Схема с наконечником 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: Схема приемника Arduino

Я думаю, что вибратора может не хватать, но почему светодиод должен работать?

Спасибо за помощь!

, 👍0

Обсуждение

где вибратор? вне экрана в нижней части изображения?, @tshimkus

зачем вы разместили весь этот код? ... вы сказали, что он работает со светодиодом, поэтому для устранения проблемы с двигателем следует использовать простой код мигания светодиода., @jsotola


1 ответ


3

TIP120, возможно, худший транзистор, который вы могли бы выбрать для этой работы. Это транзистор с парой Дарлингтона, и они имеют (относительно) огромное прямое падение от 2 до 4 вольт. Он работает со светодиодом, потому что светодиоду требуется небольшое количество тока для работы по сравнению с двигателем, и он имеет собственное фиксированное прямое напряжение. Двигатель этого не делает, и ему не хватает мощности из-за этого огромного падения напряжения (на нем может быть половина напряжения, которое должно быть).

Выбросьте этот TIP120 и замените его приличным N-канальным МОП-транзистором с "пороговым напряжением" (VGS) 2,5 В или меньше в идеале.

,

Также обратите внимание, что для управления индуктивной нагрузкой, такой как двигатель, вам понадобится [**диод обратного хода**](https://en.wikipedia.org/wiki/Flyback_diode), чтобы защитить транзистор от обратной ЭДС., @Duncan C

@DuncanC Нравится тот, который вы видите на макетной плате?, @Majenko

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