Управление сервоприводом из облака IoT Cloud

Разберемся с тем как управлять сервоприводом из облака IoT Cloud при использовании Arduino для решения некоторых задач по домашней автоматизации. Можно сделать циферблат или датчик, например, который будет поворачивать механизм и указывать на нужные данные.

Для этого проекта нам понадобится плата Arduino с поддержкой IoT Cloud, мы будем использовать Arduino MKR WIFI 1010.

Компоненты

  1. Arduino MKR WiFi 1010
  2. Микросервомотор SG90
  3. Перемычки (универсальные)
  4. Макетная плата (универсальная)

Шаг 1. Соединение компонентов

Начните с подключения компонентов к макетной плате. Следуйте пошаговому руководству, приведенному ниже.

  1. Установите плату Arduino на макетную плату.
  2. Поместите серводвигатель на макетную плату.
  3. Подключите GND на серводвигателе к GND на плате Arduino.
  4. Подключите контакт Signal на серводвигателе к контакту 9 на плате Arduino.
  5. Подключите контакт Power на серводвигателе к 5 В на плате Arduino.

Схема соединения

Управление сервоприводом из облака IoT Cloud

Шаг 2. Облако IoT Arduino

Чтобы приступить к этому шагу, нам понадобятся базовые знания о сервисе Arduino IoT Cloud. Если вы уже создавали какой-либо предыдущий проект с использованием этого сервиса, то ничего особо нового вы здесь не узнаете.

Если вы новичок в Arduino IoT Cloud, то не переживайте, в ближайшее время я переведу руководство от Ардуино «Начало работы с IoT Cloud». Со временем я также опубликую множество обучающих материалов по этому сервису. Давайте попробуем вместе дальше поработать с ним.

В облаке (Cloud) нам нужно создать новую Thing («вещь»), настроить устройство и сеть.

Затем нужно добавить Variable (переменную). Назовите ее Position (позиция). Она должна иметь тип переменной Integer Number (целое число). Она должна иметь права на чтение и запись, поскольку мы хотим отправлять значения для управления серводвигателем.

На скриншоте ниже показано как мы делаем:

Управление сервоприводом из облака IoT Cloud

Теперь вам нужно создать Dashboard (панель управления), чтобы иметь возможность отправлять информацию на плату Arduino. Перейдите в раздел Dashboards и создайте новую панель.

Внутри создайте новый виджет. Чтобы сделать создание виджета управления суперпростым, мы создадим виджет из переменной. Для этого выполните следующие шаги:

  1. Нажмите Add (Добавить), чтобы открыть выпадающее меню, затем перейдите на вкладку Things.
  2. Выберите вещь, в которой вы создали переменную Integer Number, затем просто подтвердите и создайте виджет.
  3. В результате вы получите текстовое поле, которое отображает текущий угол серводвигателя, а также позволяет вводить новые значения.
  4. В качестве альтернативы вы можете выбрать тип используемого ввода, выбрав подходящий виджет из выпадающего меню, в нашем случае мы выбрали виджет слайдера.
  5. Не забудьте выбрать нашу ранее созданную переменную position и связать ее с виджетом.
  6. Готово!

Этот виджет пока не будет функционировать, поскольку мы еще не загрузили скетч на нашу плату, что мы сделаем на следующем шаге.

Шаг 3. Код (скетч)

Для этого проекта нам нужно отправить значение, введенное в наш виджет, на сервопривод. Серводвигатели обычно имеют диапазон 0-180, представляющий собой углы, но в данном примере наш серводвигатель достигает максимума при 165º. В зависимости от того, какой серводвигатель вы используете, вам, возможно, придется посмотреть, на какое именно расстояние он может повернуться.

Если вы слышите небольшой «недовольный» и «стонущий» звук на обоих концах дуги сервомотора, это означает, что вы превысили предел и должны снизить его до тех пор, пока не перестанете слышать звук. Таким образом мы примерно поняли предел нашего сервопривода. Идем далее.

Сначала на вкладке Code нужно включить библиотеку Servo, чтобы ее функции можно было использовать для управления серводвигателем.

#include <Servo.h>

Далее мы определяем сервопривод из библиотеки, который представляет собой тип объекта под названием servo, за которым следует выбранное вами имя. В нашем случае он будет называться myservo.

Servo myservo;

Внутри setup() нам нужно присоединить сервопривод на контакт 9 к объекту servo:

void setup() {
  myservo.attach(9);
}

На самом деле функция цикла останется пустой, мы не хотим постоянно запускать код без причины.

Вместо этого в нижней части скетча есть функция, которая будет выполняться каждый раз, когда значения переменной Position, которую мы добавили перед созданием нашей панели, будут меняться. Остальная часть нашего кода будет написана внутри этой функции.

Внутри функции onPositionChange() нам просто нужно передать значения из нашего виджета, которые хранятся в переменной Position, серводвигателю.

void onPositionChange()  {
  myservo.write(position);
}

Скетч целиком:

#include "thingProperties.h"

#include <Servo.h>
Servo myservo;
void setup() {

Serial.begin(9600);
myservo.attach(9);

delay(1500);

initProperties();

ArduinoCloud.begin(ArduinoIoTPreferredConnection);

setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
}

void onPositionChange()  {
myservo.write(position);
}

Итоговый результат

Управление сервоприводом из облака IoT Cloud

После загрузки этого скетча вы сможете управлять серводвигателем с помощью слайдера в Arduino IoT Cloud.

Управление сервоприводом из облака IoT Cloud
Управление сервоприводом с помощью слайдера

Наслаждайтесь!

Была ли эта страница полезной?