Управление двигателем Arduino в определенное время

Привет. В настоящее время я работаю над созданием автоматического дозатора корма для собак. Я использую Arduino Uno R3, шаговый драйвер L298N, плату DS1307 RTC, шаговый двигатель Nema 17 и макет для распределения мощности на каждой плате. Я использую 9-вольтовую батарею для временного питания. Я протестировал управление двигателем без определения текущего времени, и оно отлично работает, однако, когда я запускаю двигатель в определенное время (4:45 и 6:45 в коде), двигатель не двигается. Как я могу двигать двигатель в это конкретное время?

#include <RTClib.h>
#include <Stepper.h>
#include <SoftwareSerial.h>

RTC_DS1307 rtc;

Stepper myStepper(200 , 9 , 10 , 11 , 12);

void setup() {                                                
  Serial.begin(9600);                                       
  rtc.adjust(DateTime(2021 , 7 , 14 , 4 , 44 , 0));
  myStepper.setSpeed(20);
}

void loop() {

  DateTime now = rtc.now();

  if ((now.hour() == 4 and now.minute() == 45) or (now.hour() == 6 and now.minute() == 45)) {
      Serial.println("testing");
      myStepper.step(10000);
      delay(1000);

}


}

, 👍1


2 ответа


1

Вы нажимаете на предел L298N, вероятно, превысите его. Типичный шаговый двигатель, такой как NEMA 17, вероятно, рассчитан на напряжение около 2,8 Вольт и максимальный ток 1,68 Ампер. Это в основном означает, что, если вы подключите его до 2,8 Вольт, он потянет 1,68 ампера. Если вы попытаетесь запустить его при более высоком напряжении, он будет потреблять больше тока и станет чрезмерно горячим. Модель драйвера: L298N имеет Ток питания двигателя (максимальный): 2A, Логическое напряжение: 5 В, Напряжение драйвера: 5-35 В. Мощность двигателя была рассчитана примерно на 2,8 В, и его мощность очень быстро превысит мощность вашего моста. Arduino даст вам 5 В и 3,3 В, но использование любого из них для питания вашего двигателя, вероятно, уничтожит Arduino. В Arduino источника питания НЕТ! Я предлагаю вам использовать отдельный источник питания для двигателя. Если вы запитываете Arduino через Vin и используете понижающий преобразователь от 12 В, он должен работать нормально.

,

Могу ли я подключить батарею 9 В к макетной плате и заставить двигатель и arduino использовать один и тот же источник питания?, @Carter

@Картер, если вы имеете в виду эти стандартные блочные батареи 9 В, то нет. Они едва обеспечивают достаточный ток для самого Arduino, не говоря уже о любом двигателе., @chrisl


1

Я новичок в этом, но мне кажется, что ваш rtc использует связь i2c. Я не вижу, чтобы вы включили провод.h или выдал провод.начните инициировать связь между rtc и arduino. Смотрите другие примеры rtc и удачи!

,

Я тоже новичок в этом, и я нашел несколько примеров (все они с использованием ЖК-экрана) с использованием провода.h, но думал, что они связаны с ЖК-дисплеем. Приятно знать, что мое предположение было неверным. Спасибо за вашу помощь!, @Carter

Без проблем. Будет любопытно, решит ли это проблему. Спасибо., @Vince

Связь I2C, вероятно, уже выполнена библиотекой RTC. Таким образом, в основном скетче нет необходимости в "проводе", @chrisl

@крисл. Вы могли бы подумать, но RTClib показывает провод как зависимость., @Vince

@Винс Дело в том, что RTClib уже [#включает Wire.h](https://github.com/adafruit/RTClib/blob/d352323ccbb326a6250943ae4266c47d40ff8dee/RTClib.cpp#L50). Вам нужно включать библиотеки только там, где они используются. Поскольку "Провод" не называется в основном скетче, его не нужно туда включать. Провод` вызывается в библиотеке RTClib, чтобы она включала его в начале своей реализации., @chrisl

Добавление #include <Wire.h>и wire.begin(); сработало, @Carter

@Картер Рад, что это сработало! Спасибо за обновление., @Vince