• 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

 

DTMF Robot на платформе Arduino



 

 

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

 

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

 

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

 

 

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

 

 

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

 

 

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

 

//Robo India DTMF Wireless Robot 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);  
}

 

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

 

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

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

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

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

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

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

 

// Robo India DTMF Robot Tutorial
// www.roboindia.com
// declaring Motor Shield
int dataPin = 8;        
int latchPin = 12;
int clockPin = 4;
int en = 7;
const int Q1 = A0;  // Defining Digital Input Pins from DTMF Module
const int Q2 = A1;
const int Q3 = A2;
const int Q4 = A3;
int SoQ1 = 0;     // Defining variable to store the status(HIGH/LOW) of above inputs.
int SoQ2 = 0;
int SoQ3 = 0;
int SoQ4 = 0;
int oldCon = 0;  //  Variable to know what was the last button pressed.  
void setup(){ 
   pinMode(Q1, INPUT);  // Defining pins as input.
   pinMode(Q2, INPUT);
   pinMode(Q3, INPUT);
   pinMode(Q4, INPUT);
   pinMode(dataPin, OUTPUT);     // Setting up Motor Shield
   pinMode(latchPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   pinMode(en, OUTPUT);    
   digitalWrite(en, LOW);   
}
void loop(){
  SoQ1 = digitalRead(Q1);  // Reading status of Input Pins. It can be LOW or HIGH
  SoQ2 = digitalRead(Q2);
  SoQ3 = digitalRead(Q3);
  SoQ4 = digitalRead(Q4);
   if(SoQ4==LOW && SoQ3==LOW && SoQ2==HIGH && SoQ1==LOW// Condition for Button 2. It is equal to Binary - 0010 
    {
      if (oldCon!=2){
         forward();
       }
      oldCon=2;  
    }
  else if(SoQ4==LOW && SoQ3==HIGH && SoQ2==LOW && SoQ1==LOW// Condition for Button 4. It is equal to Binary - 0100 
    {
      if (oldCon!=4){
        turn_left();
       }
      oldCon=4;  
    }
  else if(SoQ4==LOW && SoQ3==HIGH && SoQ2==LOW && SoQ1==HIGH// Condition for Button 5. It is equal to Binary - 0101 
        {
      if (oldCon!=5){
         halt();
       }
      oldCon=5;  
    }
  else if(SoQ4==LOW && SoQ3==HIGH && SoQ2==HIGH && SoQ1==LOW )   
// Condition for Button 6. It is equal to Binary - 0110 
    {
      if (oldCon!=6){
       turn_right(); 
       }
      oldCon=6;  
    } 
  else if(SoQ4==HIGH && SoQ3==LOW && SoQ2==LOW && SoQ1==LOW )   
// Condition for Button 8. It is equal to Binary - 1000 
    {
      if (oldCon!=8){
         backward();  
       }
      oldCon=8;  
    }    
delay(50);   // Debounce Delay.
}
// Motor Shield Funtions. 
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);  
}

 

как только вы перенесли этот код на плату Arduino. Ваш робот готов следовать за беспроводной инструкцией через DTMF. Подключите телефон к плате DTMF, используя 3,5 мм Aux. аудио кабель.

 

 

Этот робот будет выполнять следующие функции:

1. Если вы нажмете 2, он будет двигаться вперед.

2. Если вы нажмете 4, он повернуть налево.

4. Если вы нажмете 5, он остановится.

5. Если вы нажмете 6, он повернуть направо.

6. Если вы нажмете 8, он будет двигаться назад.

 

 

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



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



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



          

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