2017-01-09 4 views
0

Я довольно новичок в теме arduino и стараюсь получить несколько вещей для совместной работы.arduino uno с двигателем с приводом от PWM и беспроводным приемником 433 МГц не работает

Сначала я попытался настроить двигатель постоянного тока, который можно управлять с помощью PWM, который отлично работает при автономном использовании. Я могу запустить/остановить двигатель и изменить скорость в зависимости от значения, которое я посылаю на вывод PWM.

Во-вторых, я попытался использовать радиоприемник RF-5V для работы с дистанционным управлением от удаленных источников питания. Для этого я следовал инструкциям на how to build a 433mhz sniffer. Это само по себе работает. Я могу получить разные коды, в зависимости от того, какие клавиши на пульте дистанционного управления я нажимаю.

Теперь началась забавная часть: я хотел интегрировать оба проекта в один, поэтому я мог использовать пульт для запуска/остановки двигателя. Так я придумал следующую схему:

Circuit of pwm driven motor with wireless receiver

(Спасибо за некоторые из вас, указывая на то, что схема не соответствует эскизу я сделал ошибку при рисовании, но даже с кабелями, прикрепленных к. правильные выводы, он работает, как описано выше)

и следующий код (который частично из инструкций, упомянутых выше):

#include <RCSwitch.h> 

// init 433MHz lib 
RCSwitch mySwitch = RCSwitch(); 
unsigned long lOldValue=0; // to check for consecutive reads on 433MHz 
int motorPin = 5; // PWM-Pin to use for motor 

void setup() 
{ 
    pinMode(motorPin, OUTPUT); 

    Serial.begin(9600); 

    // set-up rf receiver 
    mySwitch.enableReceive(0); // 433MHz Receiver on interrupt 0 => that is pin #2 
} 

void loop() 
{ 
    if (mySwitch.available()) 
    { 
    int value = mySwitch.getReceivedValue(); 

    // only react, if at least two times same value received 
    if (value == lOldValue) 
    { 
     if (value == 0) 
     { 
     Serial.print("Unknown encoding"); 
     } 
     else 
     { 
     Serial.print("Received "); 
     Serial.print(mySwitch.getReceivedValue()); 
     Serial.print("/"); 
     Serial.print(mySwitch.getReceivedBitlength()); 
     Serial.print("bit "); 
     Serial.print("Protocol: "); 
     Serial.println(mySwitch.getReceivedProtocol()); 

    // One of the keys on the remote 
    if (value == 274393) { 
     Serial.println("got start code, starting motor"); 
      analogWrite(motorPin, 100); // start the motor 
    } 

    // another key on the remote 
    if (value == 270384) { 
     Serial.println("got stop code, stopping motor"); 
      analogWrite(motorPin, 0); // stop the motor 
    } 
     } 
    } 
    lOldValue = value; 
    mySwitch.resetAvailable(); 
    } 
} 

, когда я запускаю код и нажмите на пульте дистанционного управления, я получаю различные значения отображаются в зависимости от нажатия клавиши. Таким образом, беспроводной приемник работает так, как ожидалось.

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

И вот начинается забавная часть: Как только я использую функцию analogWrite для передачи данных на порт PWM, к которому подключен двигатель, беспроводной приемник перестает работать (или, по крайней мере, я не получаю больше значений, когда нажатие клавиши на пульте дистанционного управления).

я нашел несколько подобных описания сообщений/проблем на сети, который сказал попробовать следующее:

  • Используйте другой штифт для PWM (из-за возможные конфликты прерываний). Я тоже это пробовал, такое же поведение
  • Используйте внешний источник питания вместо USB-кабеля, который помог кому-то решить эту проблему. Не здесь. Не работает ни

Так что вопрос: Кто-нибудь знает, как совместить эти две вещи вместе так можно использовать беспроводной приемник для получения команд и включения/выключения двигателя с ним?

+0

Если отключить двигатель, оставив ту же программу, и, возможно, поставить светодиод с резистором, означает ли это решить проблему? Если он решен, проблема заключается в недостаточной мощности или шуме. Вы можете решить первое, включив схемы снаружи (попробуйте с помощью сетевого питания сканера, а затем вы пытаетесь использовать одну батарею, но просто подтвердите это, прежде чем приступать к ее разработке). Если это какой-то шум, поставьте конденсатор рядом с источником питания двигателя (чем больше, тем лучше, по крайней мере, несколько сотен микрофарад). – frarugi87

+0

@ frarugi87 Смешно проблема все еще существует, когда я не подключаю двигатель к цепи. Даже вызов analogWrite без прикрепленного оборудования приводит к тому же поведению. – Olli

+0

Подождите, вы написали 'int motorPin = 5;', но в схеме вы подключили двигатель к контакту 3, а на штыре 5 у вас есть трансивер 433 ... Правильно ли вы исправили его? – frarugi87

ответ

0

У меня такая же проблема в прошлом. Проблема заключается в способности arduino поставлять их обоим. Я рекомендую использовать внешний источник питания для ресивера или для двигателя (лучше всего сделать это для двигателя, но в соответствии с вашей схемой невозможно), например, 545043YwRobot и поставьте другое от arduino (надеюсь, это не то, что вы пытаетесь уже, если так мне жаль).

Надеюсь, это поможет.

Йоав

+0

спасибо за эту информацию. Я постараюсь проверить, не решит ли это проблему. Но из-за ограниченного пространства в моем дизайне я бы не смог чтобы добавить два источника питания в моем случае.Я надеялся, что смогу использовать только один блок 9v для питания всей цепи. Любые идеи по этому поводу: – Olli

+0

попытайтесь перейти к ардуину и к регулятору непосредственно от аккумулятора. – YoavShtainer

Смежные вопросы