Не могу включить двигатель с помощью Arduino IoT Cloud

arduino-ide iot mkr1010

Я пытаюсь включить/выключить двигатель постоянного тока от Arduino Iot Cloud. Я должен включить/выключить его физически и через облако, физически он работает хорошо, но из облака он ничего не делает. Я использую Arduino MKR WiFi 1010, двойной полный мост L298N,двигатель постоянного тока 9 В и нажимную кнопку. Схема Ми такая

Мой код таков

#include "thingProperties.h"
#include <FTDebouncer.h>

#define MOTOR_PIN 2
#define BUTTON_PIN 5

FTDebouncer buttons;

void setup() {
  pinMode(MOTOR_PIN, OUTPUT);
  buttons.addPin(BUTTON_PIN, LOW);
  buttons.init();

  setDebugMessageLevel(2);
  Serial.begin(9600);
  delay(1500);
  // Defined in thingProperties.h
  initProperties();
  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
}

void loop() {
  buttons.update();
  ArduinoCloud.update();
  onMotorChange();
}

void onPinActivated(int pinNr) {
  // do something according to the _pinNR that is triggered. For instance:
  Serial.println(pinNr);
  toggle = !toggle;
}

void onPinDeactivated(int pinNr) {
  // do something according to the _pinNR that is triggered. For instance:
  Serial.println(pinNr);
}
void onMotorChange() {
  digitalWrite(MOTOR_PIN, toggle || motor);
  Serial.print("The motor is ");
  if (toggle) {
    Serial.println("ON");
  } 
}

Я попробовал со светодиодом, и он работал очень хорошо, но с мотором-нет. Это код, который Arduino создает, когда я добавляю что-то на плату, часть

thingProperties.h

// Code generated by Arduino IoT Cloud, DO NOT EDIT.
#include <ArduinoIoTCloud.h>
#include <Arduino_ConnectionHandler.h>

// x-ed id
const char THING_ID[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

const char SSID[]     = SECRET_SSID;    // Network SSID (name)
const char PASS[]     = SECRET_PASS;    // Network password (use for WPA, or 
use as 
key for WEP)

void onMotorChange();

bool toggle;
bool motor;

void initProperties(){

ArduinoCloud.setThingId(THING_ID);
ArduinoCloud.addProperty(toggle, READ, ON_CHANGE, NULL);
ArduinoCloud.addProperty(motor, READWRITE, ON_CHANGE, onMotorChange);

}

WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS);

Спасибо за помощь и предложения. Как я должен подключить двигатель или что я должен изменить в коде?

, 👍0

Обсуждение

Вы подключили кнопку непосредственно к плате драйвера: когда вы нажимаете кнопку, Arduino не участвует. Он распознает нажатие кнопки, но его реакция не имеет значения. Вы не можете сказать, что ваша кнопка работает с программой Arduino. Вы определили выходной сигнал двигателя на вывод 2, но использовали вывод 3 для подключения его к драйверу двигателя. Вы использовали разные входы в драйвере (для сигнала arduino signat и сигнала кнопки). Вполне возможно, что другой вход предназначен для второго двигателя. И, наконец, ваша программа имеет логику, которая не имеет никакого смысла; Я сомневаюсь, что она вообще компилируется. , @Peter Paul Kiefer

@PeterPaulKiefer это может быть объявлено в thingProperties.h, но это неясно., @Python Schlange

@PythonSchlange Да, это возможно. ОП может прояснить это. Хотя " toggle - это очень общее имя переменной, объявленной в заголовочном файле. И, например " ArduinoCloud.update()` может сыграть серьезную роль. Но у меня нет к нему доступа. Насколько я знаю программу, она не имеет для меня никакого смысла., @Peter Paul Kiefer

@PeterPaulKiefer, я полностью с тобой согласен. Пожалуйста, загрузите и заголовочный файл., @Python Schlange

@PeterPaulKiefer Я был неправ, делая диаграмму, просто. Toggle был объявлен в 'thingProperties.h', когда вы добавляете свою вещь, облако генерирует код, @Karen Baeza Domínguez

Поскольку ваши схемы в конечном итоге не соответствуют действительности, я могу только спорить с кодом. Сначала я сделал x-ed ThingsId, он не должен быть опубликован. ;-) Есть так много вещей, которые я вижу, что их нелегко объяснить вкратце. "Код - это истина", поэтому я написал ответ с комментируемым скетчем., @Peter Paul Kiefer


1 ответ


1

Следующий код является примером. Поскольку я не знаю конфигурации Arduino Cloud Thing, и у меня нет доступа к облаку и аппаратному обеспечению, программа-это просто предположение, делающее некоторые прокомментированные предположения.

Есть много предположений, которые я сделал, и я не могу полагаться на схемы, которые вы мне показали. В конце концов вам придется перепроектировать схему/аппаратную настройку. L298N-это так называемый Н-мост. Для этого требуется как минимум два управляющих контакта in1 и in2, подключенных к выходам arduino, чтобы определить направление движения двигателя. Вы подключили только один из них к выходу arduino. А один из них к кнопке и входу arduino. (Если эта часть схемы верна.)

Если вы нажмете кнопку, in1 станет ВЫСОКИМ, но in2 также может стать ВЫСОКИМ, потому что ваша программа переключает вывод двигателя на ВЫСОКИЙ. Это выключает мотор. Если один штифт ВЫСОКИЙ, другой должен быть НИЗКИМ, чтобы привести двигатель в движение. Некоторые модули L298N также нуждаются в ШИМ-сигнале на выводе enA. Это устанавливает скорость двигателя с рабочим циклом сигнала PWA. Большинство модулей имеют подтягивание на enA и enB, поэтому по умолчанию двигатели настроены на полную скорость.

#include "thingProperties.h"
#include <FTDebouncer.h>

#define MOTOR_PIN 2
#define BUTTON_PIN 5

FTDebouncer buttons;

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

  // !!! PPK: Добавлены методы обработчика
  buttons.addPin(BUTTON_PIN, LOW, onPinActivated, onPinDeactivated);

  buttons.init();

  setDebugMessageLevel(2);
  Serial.begin(9600);
  delay(1500);
  // Определено в thingProperties.h
  initProperties();
  // Подключение к облаку Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
}

void loop() 
{
  buttons.update();
  ArduinoCloud.update();
}

void onPinActivated(int pinNr) 
{
  if ( pinNr == BUTTON_PIN )
  {
     toggle = !toggle;
     // это предполагает, что тумблер запускает изменение для
     // переменная двигателя в облаке arduino. Если нет,
     // переменная двигателя не будет изменена, и мой код не работает.
     // в этом случае может помочь раскомментирование следующей строки
     // motor = toggle;
  }
}

void onPinDeactivated(int pinNr) 
{
  // Намеренно оставленный пустым, мы реагируем только на растущий край.
}

void onMotorChange() 
{
  digitalWrite( MOTOR_PIN, motor );
  Serial.print("The motor is ");
  if ( motor ) 
  {
    Serial.println("ON");
  } 
  else
  {
    Serial.println("OFF");
  }
}
,

Эта строка // !!! PPK: Методы обработчика added buttons.addPin(BUTTON_PIN, LOW, onPinActivated, onPinDeactivated); (?) Я не могу компилировать с этим, и я не могу редактировать "thingProperties.h". BUTTON_PIN - это pin для переключения, который является bool вещью, как двигатель, просто для включения/выключения (я следую примеру в Arduino project hub), @Karen Baeza Domínguez