Прикручиваем 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!