?

Log in

No account? Create an account

Previous Entry Share Next Entry
Градусник он-лайн.
g0l
Весь день провалялся в постели, аццки потел и отлёживался. В результате вечером самочувствие улучшилось и оказалось что сна - ни в одном глазу. Так что решил заняться чем-нибудь, где мозги особо не требуются. Т.е. доделать градусник.

С сетевой платой на базе ENC28J60 у меня как-то не срослось из-за того что штатная библиотека EtherShield.h не поддерживает маршрутизации, т.е. пашет только в своём сегменте сети. Нашлась модифицированная версия этой библиотеки, но весь код - на низком уровне, шибко уж запутанно. Хочется чего-нить высокоуровнего. А для этого нужна стандартная ардуиновская плата eShield. Которую нигде не получается купить ибо нигде нету в наличии.

Вспомнил что SysCat подарил мне много запчастей, среди которых нашёлся набор "сделай сам" как раз для требуемого шылда. Нужно паять.

Достал паяльник, олово, под паятельные нужды экспроприировал Катюхину кухонную разделочную доску (Кать, куплю другую). Думать вообще не надо - на сайте производителя есть инструкция по сборке из серии "для блондинок".

Паяльник давно в руках не держал, но припаяв несколько кондёров дело пошло на лад и под конец процедуры пины и кроватки припаял на ура - не отличишь от заводской пайки :-)

Слева - то, что я спаял. Справа - модуль Wiznet W5100
Полный размер      Слева - то, что я спаял. Справа - модуль Wiznet W5100


Модуль вставляется в шылд
Полный размер      Модуль вставляется в шылд

Вот такая лепота получилась
Полный размер      Вот такая лепота получилась

А вот шылд уже пристыкован к ардуине
Полный размер      А вот шылд уже пристыкован к ардуине


Далее всё почти без проблем завелось. На базе сэмплов сбацал вот такой скетч:

#include <DallasTemperature.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 134 };
byte server[] = { 82, 138, 2, 107 }; // G0l.ru

Client client(server, 80); // подключаемся к серверу

DallasTemperature tempSensor;

void setup(void)
{
Ethernet.begin(mac, ip);
Serial.begin(9600);
tempSensor.begin(7); //Вешаем Датчик на 7 порт
}

void loop(void)
{
switch(tempSensor.isValid())
{
case 1:
Serial.println("Invalid CRC");
tempSensor.reset(); // сбросить девайс
return;
case 2:
Serial.println("Invalid device");
tempSensor.reset(); // сбросить девайс
return;
}

// если подключены то отправляем данные о температуре
Serial.println(".");
if (client.connect()) {
Serial.println("sending info");
client.print("GET /address?password=pass&temp=");
client.print(tempSensor.getTemperature());
client.print(" HTTP/1.0\r\n");
client.println();
client.stop();
delay(1000);
}
if (!client.connected()) {
Serial.println("disconnecting.");
client.stop();
}
}


Всё просто. Ардуина каждую секунду передаёт на сервак сведения о температуре. А скриптик на PHP эту температуру показывает. Сейчас показывает только текущую температуру, надо будет ещё график изменения сделать.

Результат работы мона посмотреть вот тут. В IE8 у меня не заработало, а в браузерах - нормуль пашет. Кстати, информация коррелирует с яндексовой - мой градусник показывает +26 и на яндексе написано +26.

UPD> Между тем градусник уже научился отправлять СМС с указанием текущей температуры. Если температура превышает заданный порог - мне на мобилу уходит ругательная СМС. Правда, за удовольствие надо платить - отправка сделана на базе sms.ru Одно сообщение стоит 50 копеек, дешевле чем даже с мобилы отправлять.

UPD> Добавлено предварительное построение графика изменения температуры. Отладочная, пробная версия. Посмотреть можно вот тут: 12.08.2010, 13.08.2010, текущий день. Температурные пики объясняются тем что градусник часть дня на солнце лежит, прогревается сильно.

Заметка закросспостена с моего блога g0l.ru