Схема с наконечником 120 работает со светодиодом, но не с вибратором.
У меня есть 2 платы Arduino Nano. Один с радиочастотным передатчиком, а другой с радиочастотным приемником 433 МГц, и оба имеют два вибрационных двигателя на 3 В. Я хочу, чтобы один Arduino отправил строку другому Arduino, чтобы сообщить ему, какой вибратор ему нужен для вибрации. Соединение работает, когда Arduino с передатчиком отправляет сообщение, другой Arduino получает сообщение и устанавливает вывод 2 (вывод для вибратора через наконечник 120) в ВЫСОКИЙ уровень. Но вибратор не вибрирует. Когда я меняю вибратор на светодиод, он работает, светодиод включается и выключается. Так почему же светодиод работает, а моторчик вибратора нет?
Я использую библиотеку VirtualWire для RF-модулей.
Вот код, а также краткое изложение:
Вывод: это код приемника Arduino. message_received
— это строковая переменная, в которой хранится сообщение, и в цикле это сообщение проверяет, что в нем содержится. Затем светодиод гаснет и снова загорается.
#include <VirtualWire.h>
byte message[VW_MAX_MESSAGE_LEN]; // буфер для хранения входящих сообщений
byte messageLength = 255; // размер сообщения
String message_received;
String message_go_on = "GO_ON";
String message_go_off = "GO_OF";
void setup() {
Serial.begin(9600);
vw_setup(2000); // Бит в секунду
vw_rx_start(); // Запускаем приемник
Serial.println("RECEIVER MONITOR");
}
void loop() {
// поместите сюда ваш основной код для многократного запуска:
if (vw_get_message(message, &messageLength)){ // Неблокирующий
Serial.print("Incoming message: ");
for (int i = 0; i < messageLength; i++){
Serial.write(message[i]);
message_received += (char)message[i];
}
Serial.println();
}
if(message_received == message_go_on){
digitalWrite(2, HIGH);
}
if(message_received == message_go_off){
digitalWrite(2, LOW);
}
message_received = "";
}
Вывод: это код передатчика. У меня есть 2 сообщения, которые я хочу отправлять каждые 200 миллисекунд. Метод отправки предназначен для передатчика, и ему нужен массив символов, поэтому я изменяю строку на char[] с помощью метода toCharArray().
#include <VirtualWire.h>
String message_go_on = "GO_ON";
String message_go_off = "GO_OF";
char buf1[VW_MAX_MESSAGE_LEN];
char buf2[VW_MAX_MESSAGE_LEN];
void setup() {
Serial.begin(9600);
vw_setup(2000); // Бит в секунду
message_go_on.toCharArray(buf1,VW_MAX_MESSAGE_LEN);
message_go_off.toCharArray(buf2,VW_MAX_MESSAGE_LEN);
Serial.println("TRNASMITTER MONITOR");
}
void loop() {
send(buf1);
delay(200);
send(buf2);
delay(200);
}
void send (char *message)
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Подождем, пока не исчезнет все сообщение
}
Схема приемника Arduino:
Я думаю, что вибратора может не хватать, но почему светодиод должен работать?
Спасибо за помощь!
@user75322, 👍0
Обсуждение1 ответ
TIP120, возможно, худший транзистор, который вы могли бы выбрать для этой работы. Это транзистор с парой Дарлингтона, и они имеют (относительно) огромное прямое падение от 2 до 4 вольт. Он работает со светодиодом, потому что светодиоду требуется небольшое количество тока для работы по сравнению с двигателем, и он имеет собственное фиксированное прямое напряжение. Двигатель этого не делает, и ему не хватает мощности из-за этого огромного падения напряжения (на нем может быть половина напряжения, которое должно быть).
Выбросьте этот TIP120 и замените его приличным N-канальным МОП-транзистором с "пороговым напряжением" (VGS) 2,5 В или меньше в идеале.
Также обратите внимание, что для управления индуктивной нагрузкой, такой как двигатель, вам понадобится [**диод обратного хода**](https://en.wikipedia.org/wiki/Flyback_diode), чтобы защитить транзистор от обратной ЭДС., @Duncan C
@DuncanC Нравится тот, который вы видите на макетной плате?, @Majenko
Я не собираюсь пытаться обвести изображение макетной платы. Теперь, когда вы упомянули об этом, я вижу диод на макетной плате, но в любом случае стоит упомянуть, потому что другие, кто не знает об этом требовании, читают этот протектор., @Duncan C
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Питание светодиодной ленты - Сколько ампер?
- Как я могу запитать Arduino Nano от батареи LiPo, желательно 3,7 В
- Самая низкая мощность, возможная в Arduino
- Альтернатива мосфету IRF520 в схеме выключения Arduino
- Что произойдет, если мы соединим GND и +5v?
- Как перевести Arduino Nano в спящий режим с низким энергопотреблением (<0,05 мА)
- Энергопотребление Arduino Nano IoT
где вибратор? вне экрана в нижней части изображения?, @tshimkus
зачем вы разместили весь этот код? ... вы сказали, что он работает со светодиодом, поэтому для устранения проблемы с двигателем следует использовать простой код мигания светодиода., @jsotola