Скетч для Ultrasonic HC-SR04

Artemon29
Artemon29 аватар
Offline
Зарегистрирован: 19.01.2013

Добрый день!Хочу узнать можно ли сделать скетч для робота под Ардуино с ультразвуковым датчиком Ultrasonic HC-SR04 чтоб робот "вёл" себя как этот http://www.youtube.com/watch?feature=player_embedded&v=kXGZjqqM4T8#!,я в том смысле что это разные датчики(тот инфракрасный, а у меня ультразвуковой),"вёл" я имею в виду чтобы также подъезжал к руке\другому предмету,а если слишком близко отъзежал.Кто-нибудь может помочь каркасом для скетча?Если что мой датчик закреплен непосредственно на корпусе робота т.е. у меня он без серво-мотора.Заранее спасибо.

maksim
Offline
Зарегистрирован: 12.02.2012

Можно, только нужно 4 датчика, как и на видео, а точнее на видео 8 фотодиодов (фототранзисторов) по 2 на каждой стороне.

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Один датчик, неподвижно закрепленный на корпусе. Чего вы от него хотите ? Хотя можно и с одним. Только его поведение будет отличаться от того что на видео.

Робот может совершать движения в виде маятника или вращаться , пока не задетектит объект на заданом расстоянии. После чего начнет движение к объекту.  И остановится недоезжая до него.

Вобщем алгоритм можно придумать.

Artemon29
Artemon29 аватар
Offline
Зарегистрирован: 19.01.2013

Каркасом для скетча не поможете?

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011






void setup()  
{ 
  
} 

void loop()  
{ 
                         
}

Такой подойдет ?

Если серьезно, то сначачала продумайте весь алгоритм и сформируйте рабочее ТЗ.

Не совсем понятно что вы имеете в виду под словом "Каркас".

Это полностью готовая программа, с возможностью корректирвок и настроек под разное оборудование ?

Или что то другое ?

Обычно я пишу программы либо последовательно (строка за строкой) , либо модульно (большие сложные программы).

Artemon29
Artemon29 аватар
Offline
Зарегистрирован: 19.01.2013

Ладно и на том спасибо.Пойду программить..)

vlad08.ne
Offline
Зарегистрирован: 27.11.2013

Добрий день, мене цікавить вдалося написати програму, В мене схожий  робот?

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Извините, но по Молдавски мы не понимаем

Клапауций
Offline
Зарегистрирован: 10.02.2013

.

vlad08.ne
Offline
Зарегистрирован: 27.11.2013

Добрый день, меня интересует удалось написать программу, у меня похожий робот(подъезжал к руке\другому предмету,а если слишком близко отъзежал)

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Задача простейшая.

Возьмите за основу код, робота объезжающего препятствия

Видео

Код этого робота



#include <CyberLib.h>

#define motors_init {D4_Out; D5_Out; D6_Out; D7_Out;}
#define robot_go {D4_Low; D5_High; D6_High; D7_Low;}
#define robot_back {D4_High; D5_Low; D6_Low; D7_High;}
#define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;}
#define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;}
#define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;}

#define size_buff 5 
uint16_t sensor[size_buff]; 
uint8_t stat=0; 

void setup()  
{
  motors_init;  
  D11_Out;  D11_Low;   
  D14_Out; D14_Low; /
  D15_In;    
  randomSeed(A6_Read); 
  for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); 
  wdt_enable(WDTO_500MS);   
}

void loop()
{Start  
  uint16_t dist=GetDistance(); 

    if( dist < 10) {rotation(stat, 255);} else   
    if( dist < 20) {rotation(stat, 200);} else
    if( dist < 40) {rotation(stat, 130);} else   
                   {robot_go; stat=~stat;}   
     wdt_reset(); //покормить собаку
End;}
//***************************************************
void rotation(uint8_t arr, uint8_t dur) 
{
    switch (arr) 
    {
    case 0:    robot_rotation_right;
      break;
    case 255:    robot_rotation_left; 
      break;    
    } 
    delay_ms(dur);  
    robot_stop;    
}
//***************************************************
uint16_t GetDistance() 
{
 uint16_t dist;
 for (uint8_t i = 0; i < size_buff; ++i) 
  { 
    D14_High; delay_us(10);  D14_Low; 
   dist = pulseIn(15, HIGH, 2400); 
   if(dist==0) dist=2400;  
   sensor[i]=dist; 
   delay_ms(40); 
   wdt_reset(); 
  }
  dist=(find_similar(sensor, size_buff, 58))/58; 
  return dist;
}