Однажды мне было очень скучно. Настолько, что я решил достать все детали своего «конструктора» и собрать что-нибудь.

В закромах нашлось следующее: Arduino совместимая плата, роутер tp-link mr3020, модуль GPS, гироскоп\акселерометр, и куча всякой прочей ерунды.
Забегая вперед, чтобы не огорчать некоторых читателей, скажу, что модуль GPS и гироскоп не пригодились
.
Причем тут twitter. Мое отношение к сабжу балансирует на грани безразличия и негатива. Ну что можно такого интересного рассказать используя всего 140 символов без картинок и видео? Непонятная игрушка для тех, кто живет в социальных сетях и постит о том что он съел на завтрак. Это мое личное мнение, если оно не совпадает с вашим, я могу это понять. Поэтому прошу уважаемых читателей не холиварить на эту тему, хотя бы в комментариях к этой статье.
Все эти мысли меня натолкнули на идею для незаменимого девайса, который будет твитить при каждом посещении мной туалета! Ну чтобы все были в курсе. И не просто о посещении, а более подробно: что именно я там делал. Приступим.
Первое что придется сделать — определить критерии. Я считаю, что признаки нахождения меня в туалете — это закрытая дверь и включенный свет. Под рукой оказался какой-то датчик от автоматических ворот, из которого был извлечен светочувствительный элемент.

Поигравшись с мультиметром, я выяснил, что при изменении освещенности в нем возникает разность потенциалов. При максимальной освещенности «напряжометр» показал примерно 0,330 вольт. Цепляем его к «ардуине». Определять положение двери (открыта\закрыта) я решил просто замыканием контактов. Это кстати оказалось самым сложным, потому что подходящей кнопки у меня не нашлось.

Вот программка для «ардуины»:
Второе что нам понадобится — это роутер. Я взял tp-link mr3020. На него надо установить OpenWRT, настроить подключение к интеренту и установить php. Как это делается тут описано много раз, в том числе и мной. Поэтому не будем на этом задерживаться. Только важные моменты: вот мы слушаем порт и получаем нужные нам данные
Постим с помощью этой библиотеки:
Третий важный момент — это возможность постить в твитер программно. Для этого нужно авторизоваться, зайти на dev.twitter.com, навести курсор вверху справа на свой светлый лик, выбрать My Applications. Делее Create New Application, отвечаем на все вопросы. Потом в Settings обязательно указать Access: Read and Write. Затем в Details нажимаем Create my access token и запоминаем поля Consumer key, Consumer secret, Access token и Access token secret, они нам еще понадобятся. Качаем библиотеку для PHP: github.com/abraham/twitteroauth/archive/master.zip
В config.php подставляем запомненные ранее данные:
Ну и сам скрипт для отправки (post.php):
Процесс отладки:

Изделие в сборе:

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

Использование:
подключаемся к роутеру по SSH, запускаем скрипт:
При этом запускается фоновый процесс, а родительский завершается. Таким образом скрипт будет работать даже после отключения от консоли.
Чтобы остановить скрипт, нужно посмотреть ID процесса и сделать ему kill:
Результат работы можно посмотреть тут: twitter.com/kruz_ivan
Что в планах:
1) Прикрутить камеру, чтобы можно было еще и видеть фото самого процесса.
2) Сейчас активно развиваются технологии передачи запахов. С появлением первый серийных устройств, я обязательно задействую их в своем проекте.
3) Создание подобных устройств, интегрированных с соцсетями, которые будут твитить когда вы, например, открываете холодильник, или инстаграмить фото каждый раз, когда вы садитесь принимать пищу.

В закромах нашлось следующее: Arduino совместимая плата, роутер tp-link mr3020, модуль GPS, гироскоп\акселерометр, и куча всякой прочей ерунды.
Забегая вперед, чтобы не огорчать некоторых читателей, скажу, что модуль GPS и гироскоп не пригодились
.
Причем тут twitter. Мое отношение к сабжу балансирует на грани безразличия и негатива. Ну что можно такого интересного рассказать используя всего 140 символов без картинок и видео? Непонятная игрушка для тех, кто живет в социальных сетях и постит о том что он съел на завтрак. Это мое личное мнение, если оно не совпадает с вашим, я могу это понять. Поэтому прошу уважаемых читателей не холиварить на эту тему, хотя бы в комментариях к этой статье.
Все эти мысли меня натолкнули на идею для незаменимого девайса, который будет твитить при каждом посещении мной туалета! Ну чтобы все были в курсе. И не просто о посещении, а более подробно: что именно я там делал. Приступим.
Первое что придется сделать — определить критерии. Я считаю, что признаки нахождения меня в туалете — это закрытая дверь и включенный свет. Под рукой оказался какой-то датчик от автоматических ворот, из которого был извлечен светочувствительный элемент.

Поигравшись с мультиметром, я выяснил, что при изменении освещенности в нем возникает разность потенциалов. При максимальной освещенности «напряжометр» показал примерно 0,330 вольт. Цепляем его к «ардуине». Определять положение двери (открыта\закрыта) я решил просто замыканием контактов. Это кстати оказалось самым сложным, потому что подходящей кнопки у меня не нашлось.

Вот программка для «ардуины»:
#include <SoftwareSerial.h> // подключаем модуль SoftwareSerial mySerial(2, 3); // RX, TX пины для передачи по rs323 int cnt = 0; // Счетчик секунд void setup() { mySerial.begin(115200); // инициализируем порт mySerial.println("Halo world"); } void loop() { int lightValue = analogRead(A0); // считываем значения с датчика света int doorValue = analogRead(A1); // считываем положение двери boolean light = false; boolean door = false; if(lightValue > 60) light = true; // если значение больше 60 - значит свет включен. Порог определен экспериментально if(doorValue > 500) door = true; // при разомкнутой сети значение должно быть 0, при замкнутой 1023. //Но там всякие помехи, дрожание контактов... Так надежней if(light && door) cnt++; // если я внутри - считаем секунды else { if(cnt>0) { // если только вышел mySerial.print("<"); mySerial.print(cnt); // шлем в порт секунды пребывания mySerial.println(">"); } cnt = 0; // обнуляем счетчик } delay(1000); }
Второе что нам понадобится — это роутер. Я взял tp-link mr3020. На него надо установить OpenWRT, настроить подключение к интеренту и установить php. Как это делается тут описано много раз, в том числе и мной. Поэтому не будем на этом задерживаться. Только важные моменты: вот мы слушаем порт и получаем нужные нам данные
<?php //Отделяем дочерний процесс от основного $child_pid = pcntl_fork(); if ($child_pid) { exit(); } posix_setsid(); // Тут функция постинга в твитер include("post.php"); $filename = "/dev/ttyATH0"; // serial-порт роутера $handle = fopen($filename, "r"); // открываем while (!feof($handle)) { $sym = fread($handle, 1); // читаем по одному байту за цикл if($sym=='>') { $f=false; echo "<<$cnt>>\n"; flush(); act($cnt); $cnt=''; } elseif($sym=='<') $f=true; elseif($f) $cnt .= $sym; } fclose($handle); function act($time) { if($time<40) {echo "dunno\n";} if(40<=$time && $time<150) { postMyPost("i was pee");} if(150<=$time && $time<300) { postMyPost("i was poo");} if(300<=$time && $time<900) { postMyPost("i take shower");} } ?>
Постим с помощью этой библиотеки:
Третий важный момент — это возможность постить в твитер программно. Для этого нужно авторизоваться, зайти на dev.twitter.com, навести курсор вверху справа на свой светлый лик, выбрать My Applications. Делее Create New Application, отвечаем на все вопросы. Потом в Settings обязательно указать Access: Read and Write. Затем в Details нажимаем Create my access token и запоминаем поля Consumer key, Consumer secret, Access token и Access token secret, они нам еще понадобятся. Качаем библиотеку для PHP: github.com/abraham/twitteroauth/archive/master.zip
В config.php подставляем запомненные ранее данные:
define('CONSUMER_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxx'); define('CONSUMER_SECRET', 'yyyyyyyyyyyyyyyyyyyyyyyyyy'); define('OAUTH_TOKEN', 'qwertyqwertyqwertyqwertyqwertyqwerty'); define('OAUTH_SECRET', 'sashagreysashagreysashagreysashagrey'); define('OAUTH_CALLBACK', 'http://example.com/twitteroauth/callback.php');
Ну и сам скрипт для отправки (post.php):
<?PHP require_once('lib/twitteroauth/twitteroauth.php'); require_once('lib/config.php'); function postMyPost($status) { $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET,OAUTH_TOKEN,OAUTH_SECRET); $connection->format = 'xml'; $connection->post('statuses/update', array('status'=>$status)); } ?>
Процесс отладки:

Изделие в сборе:

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

Использование:
подключаемся к роутеру по SSH, запускаем скрипт:
root@OpenWrt:~# php-cgi /www/twitter/run.php X-Powered-By: PHP/5.4.11 Content-type: text/html root@OpenWrt:~#
При этом запускается фоновый процесс, а родительский завершается. Таким образом скрипт будет работать даже после отключения от консоли.
Чтобы остановить скрипт, нужно посмотреть ID процесса и сделать ему kill:
root@OpenWrt:~# ps | grep run.php 1665 root 10436 S php-cgi /www/twitter/run.php 1670 root 1492 S grep run.php root@OpenWrt:~# kill 1665
Результат работы можно посмотреть тут: twitter.com/kruz_ivan
Что в планах:
1) Прикрутить камеру, чтобы можно было еще и видеть фото самого процесса.
2) Сейчас активно развиваются технологии передачи запахов. С появлением первый серийных устройств, я обязательно задействую их в своем проекте.
3) Создание подобных устройств, интегрированных с соцсетями, которые будут твитить когда вы, например, открываете холодильник, или инстаграмить фото каждый раз, когда вы садитесь принимать пищу.
