• I






      
           

Научно-популярный образовательный ресурс для юных и начинающих радиолюбителей - Popular science educational resource for young and novice hams

Основы электричества, учебные материалы и опыт профессионалов - Basics of electricity, educational materials and professional experience

КОНКУРС
language
 
Поиск junradio

Радиодетали
ОК
Сервисы

Stock Images
Покупка - продажа
Фото и изображений


 
Выгодный обмен
электронных валют

Друзья JR



JUNIOR RADIO

 

Робот на основе ультразвукового дальномера SR-04 и платформы Arduino



 

 

Совместимый с Arduino блок двигателя, который может работать с 2 сервоприводами и 2 шаговыми или 4  постоянного тока. Блок использует ИС регистры сдвига.  Соединение выглядит следующим образом.

 

Совет по смене регистра-

  • Цифровой контакт 8 - Штырь данных
  • Цифровой контакт 12 - Защелка
  • Цифровой контакт 4 - Clock Pin
  • Цифровой контакт 7 - контактный контакт

 

Регистр сдвига в Motors

  • Q0 - M3 A
  • Q1 - M2 A
  • Q2 - M1 A
  • Q3 - M1 B
  • Q4 - M2 B
  • Q5 - M4 A
  • Q6 - M3 B
  • Q7 - M4 B

 

 

Вот библиотека, чтобы использовать этот датчик. Вы можете скачать его здесь .

Как только вы загрузите эту библиотеку. Извлеките это и скопируйте папку в Мои документы / Arduino / Libraries или другие аналогичные местоположения. После сборки робота сделайте соединение, как показано на следующей диаграмме. Перемычка питания на защитном кожухе двигателя работает как «Переключение на двигатель», она будет полезна при отладке.

 

 

 

 

После сборки робот будет выглядеть 

 

 

Трудно найти GND и положительный вывод питания двигателя. Передайте следующий код в Совет Arduino. Робот должен двигаться в прямом направлении, если он этого не делает, замените провод двигателя. например, если левый двигатель вращается в обратном направлении, а правый двигатель вращается в прямом направлении, тогда вам необходимо поменять провода на клемме M3.

 

//Robo India Robotic Motion Tutorial
// This codes runs robot in the forward direction.
// Shield Pins Declaration 
int dataPin = 8;        
int latchPin = 12;
int clockPin = 4;
int en = 7;
void setup()
{
    pinMode(dataPin, OUTPUT);     // Setting up the motor shield. 
    pinMode(latchPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(en, OUTPUT);    
    digitalWrite(en, LOW); 
 forward(); // This funtion for forward robot motion  
 }
void loop()
{
}
void forward(void){
        digitalWrite(latchPin, LOW);            
        shiftOut(dataPin, clockPin, LSBFIRST, 3);
        digitalWrite(latchPin, HIGH);  
}
void backward(void){
        digitalWrite(latchPin, LOW);            
        shiftOut(dataPin, clockPin, LSBFIRST, 164);
        digitalWrite(latchPin, HIGH);  
}
void turn_left(void){
        digitalWrite(latchPin, LOW);            
        shiftOut(dataPin, clockPin, LSBFIRST, 161);
        digitalWrite(latchPin, HIGH);  
}
void turn_right(void){
        digitalWrite(latchPin, LOW);            
        shiftOut(dataPin, clockPin, LSBFIRST, 38);
        digitalWrite(latchPin, HIGH);  
}
void halt(void){
        digitalWrite(latchPin, LOW);            
        shiftOut(dataPin, clockPin, LSBFIRST, 32);
        digitalWrite(latchPin, HIGH);  
}

 

До этого шага вы сделали все соединение, и ваши двигатели подключены к правильным клеммам. Следующая программа основана на следующем алгоритме.

 

 

Это очень простой алгоритм для предотвращения препятствий роботу. Мы сохранили это просто, чтобы новички могли понять концепцию. Вы можете улучшить программу, улучшив алгоритм.

 

Он имеет следующую предопределенную функцию для движения робота -

1. forward (): движение вперед робота.

2. назад (): назад движение робота.

3. turn_left (): для поворота влево.

4. turn_right (): для поворота направо.

5. halt (): для остановки робота.

 

 

// Tutorial Obstacle avoiding robot
// Prepared by Robo India
// www.roboindia.com

 
#include <Servo.h>  // Includes servo library.
#include  // Includes SR-04 Sensor Library.
Ultrasonic ultrasonic(A0,A1); // (Trig PIN,Echo PIN)
Servo servo_1;      // Creating Servo object. 
// declaring Motor Shield
int dataPin = 8;        
int latchPin = 12;
int clockPin = 4;
int en = 7;
// Variable to store distance
int left_d = 0;
int right_d = 0;
int front_d = 0;
int max_d = 50;  // Max distance to obastacle 
void setup() 
{ 
  // setting up shield. 
    pinMode(dataPin, OUTPUT);      
    pinMode(latchPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    pinMode(en, OUTPUT);    
    digitalWrite(en, LOW);   
    servo_1.attach(10);  // Attaching servo to Pin No.10
    servo_1.write(90);   // Initial position
    delay(350);
} 
void loop() 
   front_d = ultrasonic.Ranging(CM); // measuring fornt distance  
   if (front_d < max_d)
   {
     halt();
     get_d();     
     if(right_d > max_d)
     {
       turn_right();
       delay(400);
       forward();
     }
     else if ( left_d > max_d)
     {
       turn_left();
       delay(400);
       forward();     
     }     
     else  {           
       backward();
       delay (500);
       halt();      
      }
   }
   else{   
    forward();   
   } 
} 
void forward(void){  // function for forward movement. 
        digitalWrite(latchPin, LOW);            
        shiftOut(dataPin, clockPin, LSBFIRST, 3);
        digitalWrite(latchPin, HIGH);  
}
void backward(void){   // function for forward movement. 
        digitalWrite(latchPin, LOW);            
        shiftOut(dataPin, clockPin, LSBFIRST, 164);
        digitalWrite(latchPin, HIGH);  
}
void turn_left(void){   // function for left turn. 
        digitalWrite(latchPin, LOW);            
        shiftOut(dataPin, clockPin, LSBFIRST, 161);
        digitalWrite(latchPin, HIGH);  
}
void turn_right(void){   // function for Right turn. 
        digitalWrite(latchPin, LOW);            
        shiftOut(dataPin, clockPin, LSBFIRST, 38);
        digitalWrite(latchPin, HIGH);  
}
void halt(void){        // function for stopping robot. 
        digitalWrite(latchPin, LOW);             
        shiftOut(dataPin, clockPin, LSBFIRST, 32);
        digitalWrite(latchPin, HIGH);  
}
void get_d(void// Fuction to get distances.
{
    servo_1.write(0);   // Right Position 
    delay(500);
    right_d = ultrasonic.Ranging(CM);     
    servo_1.write(90);  // Front Positon 
    delay(500);
    front_d = ultrasonic.Ranging(CM);     
    servo_1.write(180); // Left position of servo
    delay(500);
    left_d = ultrasonic.Ranging(CM);  
    servo_1.write(90);  // back to front
    delay(250);
}

 

 

 

В начало обзора



Купить радиодетали для ремонта
 



Необходимо добавить материалы...
Результат опроса Результаты Все опросы нашего сайта Архив опросов
Всего голосовало: 380



          

Радио для всех© 2024