Arduino будильник управляемый из браузера

в 15:32, , рубрики: arduino, php, сиськи, метки: , , ,

Добрый день, уважаемые читатели!
Да, вы совершенно правы — это очередной гов.. топик об Arduino.

Давеча я при помощи дядюшки Лао обзавелся этим замечательным устройством, и по сложившейся традиции не удержался выложить свой «Hello World» на хабр.
Итак — Arduino будильник, управляемый из браузера. Без использования Ethernet шилда, и ему подобных приблуд.
Если интересно — прошу под кат.

На самом деле это даже не совсем будильник, в привычном понимании, а некое приспособление, которое после нажатия в браузере кнопки — начинает играть мелодию и показывает на LCD-дисплее дату.

Данный «конечный продукт» — это конечно просто для забавы, на самом деле мне было необходимо получить доступ к управлению arduino удаленно, а ethernet-шилд, или ему подобные я не купил.
Было принято решение использовать PHP для работы с COM-портом. В качестве теста и был написан данный пример.

Железо:

  • Arduino UNO
  • Текстовый LCD-дисплей 16х2
  • Пьезо-пищалка
  • Переменный резистор
  • Резистор на 220 Ом — 2 шт.
  • ПК с Windows 7 =

Исходники:

Сорцы php

<?php

	print '<form action="#" method="post">'.
    '<input type="submit" name="submit" value="Wake Up!">'.
	'</form>';

if(isset($_POST['submit']))
{
	// выполняем виндовую команду по настройке параметров COM-порта
	exec("mode COM5 BAUD=9600 PARITY=N data=8 stop=1 xon=off");
	// открываем COM порт, у меня #5, у Вас может быть другой
	$fp = fopen ("COM5", "w+");
	if (!$fp) {
	   echo "Not open";
	} else {
	// Передаем arduino необходимые данные
		fwrite($fp,date("m F").", ".date("H:i")."r    Wake up!");
	}
	fclose($fp);
}

?>

Код маленький, думаю комментариев в коде будет достаточно.

Сорцы arduino скетча:

>>Скачать (pastebin)<<
Не стал приводить весь код скетча, т.к. он довольно длинный, подключение LCD-дисплея и пьезо-пищалки стандартное.
Приведу лишь несколько пояснений:
1) Для проигрывания мелодии использовался код товарища Brett Hagman, ссылка на code.google.com
2) Кусок скетча — void loop()

void loop(){
  lcd.setCursor(pos, line);
  if (Serial.available() > 0) {
    text = Serial.read();

// Если получаем символ перевода строки - меняем позицию курсора и используем вторую строку на LCD
    if (text == 13) {
      pos = 0;
      line++;
    }
    else {
// Выводим на LCD-экран полученные данные
      lcd.print(char(text));
      pos++;
    }  
    lcd.setCursor(pos, line);

// Символ "!" в dec=33. Этот символ мы передаем php-скриптом в строке "Wake up!", при получении его - проигрывается мелодия
    if (text == 33) {
      play_rtttl(song);
      while(1);
    }
  }
}

Мелочи:

Использование резисторов:
1 резистор на 220 Ом — для подключения пьезопищалки
1 резистор на 220 Ом — для подключения на 15-й контакт LCD для приглушения общей подсветки экрана (с 5В горела слишком ярко)
1 переменный резистор — для подключения на 3-й контакт LCD для плавной регулировки контрастности знакомест (прямоугольников отображающих символы)

Выводы:

Я купил ардуино для организации мини-умного дома — датчики, сенсоры, свистелки, перделки.
А, т.к. прикольнее всего управлять этим удаленно, но Ethernet-шилда нет, то PHP+COM порт — неплохой вариант, на мой взгляд.

Видео:

Видео снималось на калькулятор с камерой, поэтому прошу не судить строго, выкладываю для ознакомления.

Спасибо за внимание, и простите меня, ненавистники Hello World для arduino :)

Автор: Twost

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js