DTMF Robot на платформе Arduino
Cовместимый с Arduino блок двигателя, который может работать с 2 сервоприводами и 2 шаговыми или 4 постоянного тока. Блок использует ИС регистра сдвига. Данные приводятся в последовательном режиме, который преобразуется в параллель с помощью этого переключающего регистра IC. Соединение выглядит следующим образом.
Совет по смене регистра
- Цифровой контакт 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
После сборки робота сделайте соединение, как показано на следующей диаграмме. Перемычка питания на защитном кожухе двигателя работает как «Переключение на двигатель», она будет полезна при отладке.
После сборки робот будет выглядеть
Трудно найти 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, он будет двигаться назад.