Управление мотором постоянного тока с помощью 433Mhz RF
- Войдите на сайт для отправки комментариев
Вс, 12/07/2015 - 23:40
Уважаемые форумчане. Помогите со следующей ситуацией.
Имеются следующие компоненты:
- Ардуино Про Мини и Ардуино Нано
- Транзисторы КТ819Б
- Модули приемника и передатчика 433Mhz RF
- Тактовые кнопки
- Моторчики от игрушечных машинок
Приемник с моторчиком подключены примерно по следующей схеме
Передатчик с нано работает следующим образом. Нажимаем на кнопку - отправляется сигнал. Отпускаем кнопку - отправляется другой сигнал.
Скетч передатчика следующий
#include <RCSwitch.h> int rButt = 7; int lButt = 6; RCSwitch mySwitch = RCSwitch(); bool left = 0; bool right = 0; bool debounce (bool last, int pin) { bool current = digitalRead (pin); if (current != last) { delay(10); current = digitalRead (pin); } return current; } void setup() { Serial.begin(9600); mySwitch.enableTransmit(10); pinMode (rButt, INPUT); pinMode (lButt, INPUT); } void loop() { right = debounce (right, rButt); left = debounce (left, lButt); while (right != 0 && left != 0) { //Serial.println ("front"); mySwitch.send(8000, 24); delay (50); right = debounce (right, rButt); left = debounce (left, lButt); if (right ==0 || left ==0) { mySwitch.send(5000, 24); } } while (right != 0 && left == 0) { // Serial.println("right"); mySwitch.send(6000, 24); delay (50); right = debounce (right, rButt); left = debounce (left, lButt); if (right ==0 || left !=0) { mySwitch.send(5000, 24); } } while (right == 0 && left != 0) { // Serial.println("left"); mySwitch.send(4000, 24); delay (50); right = debounce (right, rButt); left = debounce (left, lButt); if (right !=0 || left ==0) { mySwitch.send(5000, 24); } } }
Далее скетч приемника
#include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); int motorPinR = 6; int motorPinL = 3; int l; void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 pinMode (motorPinR, OUTPUT); pinMode (motorPinL, OUTPUT); } void loop() { if (mySwitch.available()) { delay (50); int value = mySwitch.getReceivedValue(); if (value == 0) { Serial.print("Unknown encoding"); } else { switch (value) { case 8000: l = 8000; while (l != 5000) { mySwitch.resetAvailable(); Serial.println ("left"); l = mySwitch.getReceivedValue(); analogWrite(motorPinR, 200); analogWrite(motorPinL, 200); } analogWrite(motorPinR, 0); analogWrite(motorPinL, 0); break; case 4000: l = 4000; while (l != 5000) { mySwitch.resetAvailable(); Serial.println ("left"); l = mySwitch.getReceivedValue(); analogWrite(motorPinL, 200); } analogWrite(motorPinL, 0); break; case 6000: l = 6000; while (l != 5000) { mySwitch.resetAvailable(); Serial.println ("left"); l = mySwitch.getReceivedValue(); analogWrite(motorPinR, 200); } analogWrite(motorPinR, 0); break; } } mySwitch.resetAvailable(); }
Если вместо мотора подключить светодиод, то схема полностью работает. При нажатии на кнопку передатчика светодиод на приемнике загорается, если отпустить кнопку - светодиод гаснет.
Однако если подключить мотор, то при нажатии на кнопку мотор начинает вращаться, но уже не останавливается. Такое ощущение, что после включения мотора возникают какие-то помехи, которые не дают приемнику получить сигнал остановки.
Сам я новичок в радиотехнике. Подскажите в какую сторону копать.
Если вместо мотора подключить светодиод, то схема полностью работает. При нажатии на кнопку передатчика светодиод на приемнике загорается, если отпустить кнопку - светодиод гаснет.
Сам я новичок в радиотехнике. Подскажите в какую сторону копать.
скетчи не смотрел...
1) провода от мотора на источнике питания или плате?
2) диод стоит?
3) конденсатор нужен параллельно диоду, не электролит, лучше несколько если не уверены.
проблема в питании. проверяй напряжение при включенном моторе. да и помех много
Пробовал подключать различными способами.
1) подавал отдельно питание на ардуино в приемнике через usb, на мотор от блока питания.
2) питал ардуино и мотор от блока питания. Для ардуино ставил стабилизатор на 5 вольт 1.5 ампер (l7805)
3) Пробовал ставить керамический конденсатор на 100нФ на мотор параллельно диоду
4) устанавливал транзисторный ключ из 2-х транзисторов
Результат каждый раз одинаковый. Мотор вращается не переставая.
Собирал все на и на breadbord, и на прототипе печатной платы (не breadbord)
Подтяните базу транзистора к земле через 4к7-10кОм резистор .И поставьте по питанию конденсатор 2200мкФ или более -не помешает.
При подсоединеном моторчике в сериал команды продолжают выводиться при нажатии на кнопки?
а все тесты были при управлении от 433мгц? или просто кнопками?