Прикручиваем bluetooth к автокормушке

В предыдущем посте мы сделали кормушку с таймером для моего кота. Но все становится еще лучше если добавить bluetooth. Этим мы сегодня и займемся.

В распоряжении у нас попсовый модуль HM-10. Документацию можно глянуть тут. На АлиЭкспресс такой можно взять за сотню и прикрутить к чему угодно.

Питается HM-10 от 3В и имеет на борту UART интрфейс, через который Ардуино будет общаться с ним. Настроить HM-10 или получить какую-то информацию о его состоянии можно при помощи AT-команд.

Подключение к Arduino

Для того чтобы общаться с bluetooth и получать ответы по встроенному UART-монитору Arduino-IDE, мы возьспользуемся софтварной реализацией UART из библиотеки SoftwareSerial.h

Накидаем простенькую программу, которая выводит в монитор UART команды принятые через bluetooth соединение с HM-10. Для отправки на модуль можно воспользоваться любым приложением Bluetooth Serial из Play Market.

SoftwareSerial mySerial(10, 11); // RX, TX - софтварные поты UART
String command;
void setup() {
    mySerial.begin(9600); //выставляем скорость UART 9600
    Serial.begin(9600);
}

void loop() {
    if (mySerial.available())
     {  
       command = mySerial.readString();//прочитать из порта
       Serial.println(command); //отправить в другой порт
     }
    if (Serial.available())
     {  
       command = Serial.readString();//прочитать из порта
       mySerial.println(command); //отправить в другой порт
     }
  
}

Рабочая программа

После тестов, можно перейти к реализации основной программы. В данном случае можно взять наш скетч из предыдущей статьи и просто добавить опрос UART и выполнение команды, если сигнал принят.

#include <Servo.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX
Servo myservo;  // create servo object to control a servo
int counter;
int am24;
int am4;
int comparer;
String command;
String FEED_COMMAND = "feed";
String TEST_COMMAND = "test";

void setup() {
  counter = 0;
  am4 = 1440; // 1440 4 hours - установка первого срабатывания
  //с учетом времени подключения к сети
  am24 = 8640; //8640 24 hours
  comparer = am4;
  mySerial.begin(9600);
  Serial.begin(9600);
}

void feed() {
    myservo.attach(5); // attaches the servo on pin 9 to the servo object
    myservo.write(60); //ставим вал под 0
    delay(1000); //ждем 2 секунды
    myservo.write(150); //ставим вал под 180
    delay(1000); //ждем 2 секунды
    myservo.detach();
}

void loop() {
  if(counter == comparer){
    counter = 0;
    comparer = am24;
    feed();
  } else {
    if (mySerial.available())
     {  
       command = mySerial.readString(); // прочитать из порта
       Serial.println(command);
       command.trim();
       if(command == FEED_COMMAND){
          feed();
          mySerial.print("Success feed");
       } else {
          mySerial.print(counter); // вывести тестовые данные
       }
     }
     counter++;
     mySerial.print(counter);
     delay(10000);
  }
  
}

В следущей статье мы опишем процесс разработки простенького приложения под Андроид, которое позволит нам кормить котейку по Bluetooth.

Присоединяйтесь к нашим каналам FrontEndDev и Web Stack и моему личному блогу Sleepless Tech в Telegram, чтобы не пропустить самое интересное из мира Web!