Страница 1 из 1

Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 12 янв 2016, 21:52
-=dp=-
Всем привет!

Решил для своей детворы соорудить радиоуправляемую машинку на Ардуино и радиомодулях на 433 МГц. :)
Порылся в детских игрушках и нашел сломанную машинку с моторчиком на задних колесах, от другой машинки нашел 4 колеса и перекладины для них, от третей машинки взял верхнюю часть кузова :D
Дальше осталось только все это сляпать воедино :?

Долго думал на какой Ардуино делать, УНО, НАНО, ПРО мини и решил взять две модели контроллеров Ардуино, это:
Ардуино НАНО для установки в самой модели и
Ардуино ПРО мини 5В 16МГц для установки в пульт.
В качестве приемопередатчиков я выбрал комплект радио-модулей на 433 МГц.
Для управления поворотной осью радио-модели решил применить серводвигатель SG90.
Вот собственно весь основной набор деталей.

Изготовление пульта для радиоуправления.
Для изготовления пульта радиоуправления , как я уже писал выше, нам понадобится контроллер Ардуино ПРО мини 5В 16 МГц, передатчик на 433 МГц, 8 кнопок без фиксации, 1 кнопка с фиксацией для включения питания, отсек для пальчиковых батареек 6 шт, что бы получилось напряжение питания 9 в, ну и корпус с антенной.
Сначала делаем разметку на корпусе под установку кнопок, сверлим отверстия и вкручиваем все наши 8 кнопочек и кнопку питания.
Я разместил на передней панели пульта еще пару светодиодов, один для контроля нажатия на любую из кнопок, второй для контроля напряжения питания или разряда батареек.
После крепления кнопок размещаем в корпусе Ардуино ПРО мини , радиомодуль на 433 МГц и отсек для батареек.
Все это я прикрепил термоклеем.
Далее начнем распайку кнопок. В начале припаиваем ко всем кнопкам кроме кнопки питания общий провод, его конец подпаиваем через резистор 560 Ом на вывод пинания VCC Ардуино.
К другому концу кнопок припаиваем отдельные проводки , которые распаиваем на цифровые выходы Ардуино, начиная с 2 по 9.
Затем берем 8 одинаковых резисторов , номиналом от 3 до 100 КОм и припаиваем их один конец к тем же цифровым выводам или к контактам кнопок, к которым они подпаяны.
Вторые концы соединяем все вместе и припаиваем их проводом к общему выводу GND Ардуино.
Эти резисторы необходимы для шунтирования цифровых входов от наводок и помех.
Затем припаиваем светодиоды последовательно с резисторами 560 Ом к выводам 10 и 13 Ардуино.
Далее припаиваем вывод VCC передатчика 433 МГц к + контакту блока батареек, вывод GND припаиваем к выводу GND на Ардуино, вывод DATA припаиваем к цифровому входу 12 Ардуино.
Вывод питания Ардуино VCC припаиваем к клемме в средней части батарейного блока так, чтобы получился овод + от третей батарейки, то есть 4,5 В.
Минусовой вывод батарейного блока припаиваем к одной клемме кнопки с фиксацией, а вторую клемму соединяем с общим выводом GND Ардуино ПРО мини.
Как вы наверное уже догадались, мы будем использовать два напряжения питания:
4,5 В для питания контроллера Ардуино ПРО мини,
9 В для питания передатчика.
Так как мы используем 2 напряжения, коммутировать питание (включать, выключать) мы будем через минус.
После завершения монтажа пульта радиоуправления, подключаем Ардуино ПРО мини через переходник USB UART RS232 TTL5В, я использовал на чипе CH340 и закачиваем в контроллер наш скетч :

Код: выделить все
#include <VirtualWire.h>
const int btn2 = 2;
const int btn3 = 3;
const int btn4 = 4;
const int btn5 = 5;
const int btn6 = 6;
const int btn7 = 7;
const int btn8 = 8;
const int btn9 = 9;
int btn2State = 0;
int btn3State = 0;
int btn4State = 0;
int btn5State = 0;
int btn6State = 0;
int btn7State = 0;
int btn8State = 0;
int btn9State = 0;
int check = 0;

void setup()
{
pinMode(btn2, INPUT);
pinMode(btn3, INPUT);
pinMode(btn4, INPUT);
pinMode(btn5, INPUT);
pinMode(btn6, INPUT);
pinMode(btn7, INPUT);
pinMode(btn8, INPUT);
pinMode(btn9, INPUT);
pinMode(10, OUTPUT);
pinMode(13, OUTPUT);
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
delay(500);
digitalWrite(10, HIGH);
digitalWrite(13, HIGH);
delay(5000);
digitalWrite(10, LOW);
digitalWrite(13, LOW);
}


void loop()
{
int sensorValue1 = analogRead(A0);
if (sensorValue1<=800){
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);
digitalWrite(10, HIGH);
delay(500);
digitalWrite(10, LOW);
delay(500);
} else {
digitalWrite(10, LOW);
};
btn2State = digitalRead(btn2);
btn3State = digitalRead(btn3);
btn4State = digitalRead(btn4);
btn5State = digitalRead(btn5);
btn6State = digitalRead(btn6);
btn7State = digitalRead(btn7);
btn8State = digitalRead(btn8);
btn9State = digitalRead(btn9);

if (btn2State == HIGH) {
send("1");
digitalWrite(13, HIGH);
delay(1);
} else {
digitalWrite(13, LOW);
};
if (btn3State == HIGH) {
send("2");
delay(1);
} else {
digitalWrite(13, LOW);
};
if (btn4State == HIGH) {
send("3");
delay(1);
} else {
digitalWrite(13, LOW);
};
if (btn5State == HIGH) {
send("4");
delay(1);
} else {
digitalWrite(13, LOW);
};
if (btn6State == HIGH) {
send("a");
delay(1);
} else {
digitalWrite(13, LOW);
};
if (btn7State == HIGH) {
send("b");
delay(1);
} else {
digitalWrite(13, LOW);
};
if (btn8State == HIGH) {
send("c");
delay(1);
} else {
digitalWrite(13, LOW);
};
if (btn9State == HIGH) {
send("d");
delay(1);
} else {
digitalWrite(13, LOW);
};

}

void send (char *message)
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Wait until the whole message is gone
}




Да, чуть не забыл :) нам понадобится библиотека VirtualWire, которую вы можете скачать во вложении.

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 12 янв 2016, 22:20
-=dp=-
Изготовление радиомодели на Ардуино.
Для изготовления радио-модели понадобятся следующие детали:
Контроллер Ардуино НАНО,
Колесный привод от любой детской электромашинки , с редуктором и коллекторным двигателем постоянного тока с напряжением 5-9 В,
Серводвигатель SG90,
Модуль приемника 433МГц,
4 транзистора IRF 710 или аналоги, можно так же использовать биполярные транзисторы типа КТ819.
Стабилизатор LM7805,
Резисторы 560 ОМ - 8 шт,
200 Ом - 4 шт,
47-100К - 4 шт,
кучка цветных светодиодов,
передняя ось с колесами, и такие же колеса для задней оси,
корпус,
Кусок оргстекла толщиной 6-8мм,
Болтики на М3, гайки, в общем различные крепежные элементы,
Суперклей, термоклей, капроновые стяжки, изолента и т.д.

Сборка радиомодели на Ардуино НАНО.
В начале делаем из оргстекла несущую платформу, крепим заднюю ось с редуктором и двигателем, на один конец платформы, второй конец платформы заужаем по краям и крепим серводвигатель SG90, по середине, так что бы его шкив смотрел в низ платформы.
Далее выпиливаем из оргстекла полоску шириной 2 см и длиной по ширине основной платформы, сверлим по середине отверстие и тягу от серводвигателя.
Далее крепим скобами вал с колесами и прикручиваем всю полученную площадку к шкиву серводвигателя.
Платформа с колесами готова, на фото ниже показано как она выглядит у меня.
В каждом случае размеры модели можете выбирать исходя из имеющихся деталей, колес, двигателей, на собственное усмотрение.

Затем крепим электронику, контроллер Ардуино НАНО, приемник на 433 МГц, кусок макетной платы для распайки транзисторного моста управления коллекторным двигателем заднего привода и схемы стабилизатора питания для Ардуино НАНО.
Распаиваем все это по схеме ниже.
Заранее планируем место для размещения аккумуляторов , кнопки включения питания и крепления кузова со светодиодами.
В кузове я насверлил отверстий в местах расположения фар и приклеил термоклеем в эти отверстия светодиоды, сзади красные, спереди синие габаритные огни и белые светодиоды с линзами в качестве фар ближнего-дальнего света.
В общем, тут все делаем на ваш собственный вкус , на сколько хватит фантазии :D

У меня получилось как то так :

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 12 янв 2016, 22:28
-=dp=-
Далее припаиваем выводы серводвигателя к Ардуино НАНО, распаиваем сигнальные выводы для включения светодиодов и управления двигателем заднего моста согласно скетчу

Код: выделить все
#include <VirtualWire.h>
#include <ServoTimer2.h>
byte message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages
byte messageLength = VW_MAX_MESSAGE_LEN; // the size of the message
const int receive_pin = 11;
int startpos=1030;
int savepos = 1;
#define rollPin  2
ServoTimer2 servoRoll;
void setup()
{
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(13, OUTPUT);
servoRoll.attach(rollPin);

vw_set_rx_pin(receive_pin);
Serial.begin(9600);
Serial.println("Device is ready");
// Initialize the IO and ISR
vw_setup(2000); // Bits per sec
vw_rx_start(); // Start the receiver
servoRoll.write(startpos);
}


void loop()
{
if (vw_get_message(message, &messageLength)) // Non-blocking

{

for (int i = 0; i < messageLength; i++)
{
char c = message[i];
Serial.print(c);

if(c == '1') {
 digitalWrite(3, HIGH);
};
if(c == '2') {
 digitalWrite(3, LOW);
};
if(c == '3') {
 digitalWrite(4, HIGH);
};
if(c == '4') {
digitalWrite(4, LOW);
};
if(c == 'a') {
savepos=1;
digitalWrite(5, HIGH);
delay(50);
servoRoll.write(startpos);
delay(200);
digitalWrite(5, LOW);
};
if(c == 'b') {
savepos=2;
digitalWrite(6, HIGH);
delay(50);
servoRoll.write(startpos);
delay(200);
digitalWrite(6, LOW);
};

//-----------povoroty---------------
//------levo-------------
if(c == 'c') {
//--------vpered----------
if (savepos==1){
digitalWrite(5, HIGH);
delay(50);
servoRoll.write(startpos-200);
delay(100);
digitalWrite(5, LOW);
};
//---------nazad-------------
if (savepos==2){
digitalWrite(6, HIGH);
delay(50);
servoRoll.write(startpos-200);
delay(100);
digitalWrite(6, LOW);
};
};


//-----------pravo---------------
if(c == 'd') {
if (savepos==1){
digitalWrite(5, HIGH);
delay(50);
servoRoll.write(startpos+200);
delay(100);
digitalWrite(5, LOW);
};
if (savepos==2){
digitalWrite(6, HIGH);
delay(50);
servoRoll.write(startpos+200);
delay(100);
digitalWrite(6, LOW);
};
};

}
Serial.println();
}



}



Так же, для управления серводвигателем нам понадобится библиотека ServoTimer2 которую можно скачать ниже.
Почему необходимо использовать именно эту библиотеку?
Потому что в отличии от стандартной библиотеки Servo, библиотека ServoTimer2 не конфликтует с библиотекой VirtualWire :D

Немного причесав схему и провода я монтировал кузов и вот что у меня получилось:

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 12 янв 2016, 22:34
-=dp=-
Да, обязательно советую сделать бампер, желательно покрепче, так как при боковых ударах по передним колесам сразу сломаются зубья пластиковых шестеренок серводвигателя SG90 :cry: при первом же пуске, так что ваше чадо даже не успеет наиграться машинкой .

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 12 янв 2016, 23:13
-=dp=-
Видео с демонстрацией работы самодельной радиоуправляемой модели на Ардуино https://youtu.be/fqV9vXhEAkA

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 09 фев 2016, 20:13
Pyzoterovod
А вот инетересна дальность на таких радиомодулях. Ибо цена их просто смешная.Давно на них смотрю. Машина есть. но ее управление раздражает своей дальностью. Модернизировать есть желание.

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 09 фев 2016, 22:09
-=dp=-
Pyzoterovod писал(а):А вот инетересна дальность на таких радиомодулях. Ибо цена их просто смешная.Давно на них смотрю. Машина есть. но ее управление раздражает своей дальностью. Модернизировать есть желание.


Модули приемопередатчиков на 433 МГц работают на 50 метров уверенно, с штыревыми антеннами 20 см .
Я ради эксперемента к передатчику сделал усилитель мощности ВЧ на одном транзисторе, на 500 м уверенный прием, дальше не проверял, не было возможности.

Схема на рисунке ниже.

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 10 фев 2016, 08:56
Pyzoterovod
Отлично вообще. Значит у китайцев закажу. Спасибо за усилитель)) Может и понадобится.

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 22 июл 2016, 16:51
Dethdron
приветствую, подскажите пожалуйста, на машинке серво привод подключен на второй пин ,приемник 11, драйвер мотора 5,6 верно? запутался в скетче :idea: , и по какой схеме собирали н мост? не оставляйте без внимания собираю игрушку ребенку, именно на rf модулях

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 25 июл 2016, 19:42
-=dp=-
Здравствуйте!

Выкладываю схему самодельного драйвера для двигателей постоянного тока

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 25 июл 2016, 19:50
-=dp=-
Dethdron писал(а):приветствую, подскажите пожалуйста, на машинке серво привод подключен на второй пин ,приемник 11, драйвер мотора 5,6 верно? запутался в скетче :idea: , и по какой схеме собирали н мост? не оставляйте без внимания собираю игрушку ребенку, именно на rf модулях


Да, все верно , серво на цифровой пин 2, приемник на 11, движение вперед 5 пин, движение назад 6 пин.

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 25 июл 2016, 21:31
Dethdron
Собрал пульт по схеме,залил скетч, в про мини 5v 16мгц,но вот не задача! :shock: Пульт странно работает, приходится несколько секунд удерживать кнопки что бы включить или выключить например габариты, ближний. Тоже самое с движением сдвижением веред назад. Не пойму в чем проблема , при включении питания светодиоды загораются на 5 секунд и тухнут. Затем начинает моргать светодиод на 10 пине ,питание от трех aa и 9v батарейки для rf модуля, земли соединены. да и индикация нажатий на кнопки срабатывает только на первой кнопке при удержании. абракадабра какая то, что посоветуете? куда копать

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 01 авг 2016, 19:04
Dethdron
Уважаемый помогите, замучился уже...

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 02 авг 2016, 18:53
-=dp=-
Dethdron писал(а):Уважаемый помогите, замучился уже...


Здравствуйте!

Без подтягивающих резисторов на входах контроллера будут наводиться помехи, из-за этого и будут мигать светодиоды как будто кнопки нажимаются сами хаотично.
Кнопки надо подключить по схеме ниже.

Re: Радиоуправляемая модель на Ардуино

СообщениеДобавлено: 07 авг 2016, 22:22
Dethdron
Димон писал(а):
Dethdron писал(а):Уважаемый помогите, замучился уже...


Здравствуйте!

Без подтягивающих резисторов на входах контроллера будут наводиться помехи, из-за этого и будут мигать светодиоды как будто кнопки нажимаются сами хаотично.
Кнопки надо подключить по схеме ниже.


Спасибо так и подключал, разобрался уже! не допер сначала почему светодиод моргает, заглянул в скетч и увидел что задействован порт AO подключил плюс ардуинки на 5v и все встало на свои места, в статье этого не указано, потом уже на видео услышал что мигающий светодиод означает что акб разряжен. Надо было сразу глянуть!
P.S Вообще я задействовал atmega 8 в пульте и про мини в машинке, работает отлично :D