Я довольно новичок в теме arduino и стараюсь получить несколько вещей для совместной работы.arduino uno с двигателем с приводом от PWM и беспроводным приемником 433 МГц не работает
Сначала я попытался настроить двигатель постоянного тока, который можно управлять с помощью PWM, который отлично работает при автономном использовании. Я могу запустить/остановить двигатель и изменить скорость в зависимости от значения, которое я посылаю на вывод PWM.
Во-вторых, я попытался использовать радиоприемник RF-5V для работы с дистанционным управлением от удаленных источников питания. Для этого я следовал инструкциям на how to build a 433mhz sniffer. Это само по себе работает. Я могу получить разные коды, в зависимости от того, какие клавиши на пульте дистанционного управления я нажимаю.
Теперь началась забавная часть: я хотел интегрировать оба проекта в один, поэтому я мог использовать пульт для запуска/остановки двигателя. Так я придумал следующую схему:
(Спасибо за некоторые из вас, указывая на то, что схема не соответствует эскизу я сделал ошибку при рисовании, но даже с кабелями, прикрепленных к. правильные выводы, он работает, как описано выше)
и следующий код (который частично из инструкций, упомянутых выше):
#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-кабеля, который помог кому-то решить эту проблему. Не здесь. Не работает ни
Так что вопрос: Кто-нибудь знает, как совместить эти две вещи вместе так можно использовать беспроводной приемник для получения команд и включения/выключения двигателя с ним?
Если отключить двигатель, оставив ту же программу, и, возможно, поставить светодиод с резистором, означает ли это решить проблему? Если он решен, проблема заключается в недостаточной мощности или шуме. Вы можете решить первое, включив схемы снаружи (попробуйте с помощью сетевого питания сканера, а затем вы пытаетесь использовать одну батарею, но просто подтвердите это, прежде чем приступать к ее разработке). Если это какой-то шум, поставьте конденсатор рядом с источником питания двигателя (чем больше, тем лучше, по крайней мере, несколько сотен микрофарад). – frarugi87
@ frarugi87 Смешно проблема все еще существует, когда я не подключаю двигатель к цепи. Даже вызов analogWrite без прикрепленного оборудования приводит к тому же поведению. – Olli
Подождите, вы написали 'int motorPin = 5;', но в схеме вы подключили двигатель к контакту 3, а на штыре 5 у вас есть трансивер 433 ... Правильно ли вы исправили его? – frarugi87