Tytuł oryginału: Programming Your Home: Automate with Arduino, Android, and Your Computer
Tłumaczenie: Mikołaj Szczepaniak
ISBN: 978-83-246-5675-2
© Helion 2013.
All rights reserved.
Copyright © 2012 The Pragmatic Programmers, LLC.
All rights reserved.
No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form, or
by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior consent of
the publisher.
Many of the designations used by manufacturers and sellers to distinguish their products are claimed as
trademarks. Where those designations appear in this book, and The Pragmatic Programmers, LLC was
aware of a trademark claim, the designations have been printed in initial capital letters or in all capitals.
The Pragmatic Starter Kit, The Pragmatic Programmer, Pragmatic Programming, Pragmatic Bookshelf,
PragProg and the linking g device are trademarks of The Pragmatic Programmers, LLC.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były kompletne
i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym
ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również
żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w
książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/intdom.zip
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/intdom
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
Spis treci
Podzikowania .................................................................................... 13
Sowo wstpne .................................................................................... 15
Kto powinien przeczyta t ksik ................................................................... 16
Co znajduje si w tej ksice ............................................................................. 16
Arduino, Android, iPhone… mój Boe! .......................................................... 17
Przykady kodu i stosowane konwencje ............................................................. 20
Zasoby dostpne w internecie .......................................................................... 21
Cz I. Przygotowania ............................................23
Rozdzia 1. Pierwsze kroki ................................................................. 25
1.1. Czym jest automatyzacja domu? ................................................................ 25
1.2. Gotowe rozwizania dostpne na rynku ..................................................... 26
1.3. Rozwizania typu „zrób to sam” ............................................................... 27
1.4. Uzasadnienie inwestycji ............................................................................ 28
1.5. Przygotowywanie warsztatu ....................................................................... 30
1.6. Zapisywanie pomysów w formie szkiców ................................................... 31
1.7. Zapisywanie, czenie i testowanie ............................................................ 33
1.8. Dokumentowanie pracy ............................................................................ 34
8
Inteligentny dom
Rozdzia 2. Potrzebne elementy ........................................................ 37
2.1. Znajomo sprztu ................................................................................... 38
2.2. Znajomo oprogramowania ..................................................................... 45
2.3. Bezpiecznej zabawy! ................................................................................. 46
Cz II. Projekty ......................................................49
Rozdzia 3. System powiadamiania o poziomie wody .................... 51
3.1. Czego potrzebujemy ................................................................................. 53
3.2. Budowa rozwizania ................................................................................ 55
3.3. czenie .................................................................................................. 55
3.4. Tworzenie szkicu ...................................................................................... 56
3.5. Implementacja aplikacji internetowej wysyajcej poczt elektroniczn .......... 64
3.6. Dodanie moduu sieciowego ...................................................................... 67
3.7. czenie wszystkich elementów ................................................................. 71
3.8. Nastpne kroki ......................................................................................... 73
Rozdzia 4. Elektryczny pies stróujcy .......................................... 77
4.1. Czego potrzebujemy ................................................................................. 78
4.2. Budowa rozwizania ................................................................................ 80
4.3. System elektr
ycznego psa stróujcego .................................................... 82
4.4. Szkolenie psa ........................................................................................... 85
4.5. Testowanie .............................................................................................. 89
4.6. Spuszczamy psa ....................................................................................... 90
4.7. Nastpne kroki ......................................................................................... 91
Rozdzia 5. wierkajcy karmnik dla ptaków ................................. 93
5.1. Czego potrzebujemy ................................................................................. 95
5.2. Budowa rozwizania ................................................................................ 98
5.3. Czujnik grzdy ......................................................................................... 98
5.4. Czujnik ziarna ........................................................................................ 102
5.5. Komunikacja bezprzewodowa ................................................................. 106
5.6. wierkanie w Pythonie ........................................................................... 113
5.7. Koczenie projektu ................................................................................. 121
5.8. Nastpne kroki ....................................................................................... 123
Spis treci
9
Rozdzia 6. Wykrywacz dostarczania paczek ................................ 125
6.1. Czego potrzebujemy ............................................................................... 127
6.2. Budowa rozwizania .............................................................................. 128
6.3. czenie sprztu .................................................................................... 129
6.4. Pisanie kodu .......................................................................................... 131
6.5. Szkic systemu wykrywania dostarczonych paczek ...................................... 132
6.6. Testowanie szkicu wykrywajcego dostarczanie paczek ............................. 133
6.7. Skrypt przetwarzajcy komunikaty o przesykach ...................................... 134
6.8. Tworzenie bazy danych systemu wykrywania przesyek ............................. 135
6.9. Instalacja niezbdnych pakietów Pythona ................................................. 137
6.10. Pisanie skryptu ...................................................................................... 139
6.11. Testowanie skryptu przetwarzajcego komunikaty o paczkach ................... 144
6.12. Instalacja systemu .................................................................................. 145
6.13. Nastpne kroki ...................................................................................... 146
Rozdzia 7. Internetowy wcznik wiata .................................... 149
7.1. Czego potrzebujemy ............................................................................... 150
7.2. Budowa rozwizania .............................................................................. 153
7.3. czenie ................................................................................................ 154
7.4. Pisanie kodu klienta w formie aplikacji internetowej .................................. 158
7.5. Testowanie klienta aplikacji internetowej .................................................. 161
7.6. Pisanie kodu klienta dla systemu Android ................................................ 162
7.7. Testowanie aplikacji klienckiej dla systemu Android ................................. 167
7.8. Nastpne kroki ....................................................................................... 169
Rozdzia 8. Automatyzacja dziaania zasony ............................... 173
8.1. Czego potrzebujemy ............................................................................... 174
8.2. Budowa rozwizania .............................................................................. 177
8.3. Stosowanie silnika krokowego .................................................................. 178
8.4. Programowanie silnika krokowego ........................................................... 179
8.5. Doczanie czujników ............................................................................. 181
8.6. Pisanie szkicu ........................................................................................ 182
8.7. Instalacja sprztu .................................................................................... 187
8.8. Nastpne kroki ....................................................................................... 190
10
Inteligentny dom
Rozdzia 9. Zamek do drzwi sterowany przez Androida .............. 193
9.1. Czego potrzebujemy ............................................................................... 194
9.2. Budowa rozwizania .............................................................................. 197
9.3. Sterowanie zamkiem z poziomu Androida ............................................... 202
9.4. Pisanie kodu serwera dla systemu Android .............................................. 207
9.5. Pisanie aplikacji klienckiej dla systemu Android ....................................... 220
9.6. Testy i instalacja .................................................................................... 225
9.7. Nastpne kroki ....................................................................................... 226
Rozdzia 10. Dajmy przemówi naszemu domowi ........................ 229
10.1. Czego potrzebujemy .............................................................................. 230
10.2. Konfiguracja goników .......................................................................... 231
10.3. Wsuchajmy si w gos systemu ............................................................... 234
10.4. Kalibracja mikrofonu bezprzewodowego ................................................. 238
10.5. Programowanie mówicego systemu ........................................................ 240
10.6. Rozmowa z wasnym domem ................................................................. 249
10.7. Nastpne kroki ...................................................................................... 250
Cz III. Przewidywana przyszo ....................253
Rozdzia 11. Przysze projekty ......................................................... 255
11.1. Przyszo na wycignicie rki ............................................................... 256
11.2. Prognoza dugoterminowa ...................................................................... 260
11.3. Dom przyszoci .................................................................................... 262
Rozdzia 12. Wicej pomysów na projekty ................................... 267
12.1. Wykrywacz baaganu ............................................................................. 267
12.2. Monitor zuycia energii elektrycznej ........................................................ 268
12.3. Elektryczny strach na wróble .................................................................. 269
12.4. Pilot systemu domowej rozrywki ............................................................. 269
12.5. Wycznik urzdze domowych na czas snu ............................................ 270
12.6. Sterowanie nawadnianiem za pomoc czujnika wilgotnoci ....................... 270
12.7. Czujniki dymu przystosowane do komunikacji sieciowej ........................... 271
12.8. Zblieniowy mechanizm otwierania bramy garaowej ............................... 272
12.9. Inteligentny sterownik klimatyzacji i wentylacji ......................................... 272
Spis treci
11
12.10. Inteligentna skrzynka na listy ............................................................... 273
12.11. Inteligentne owietlenie ....................................................................... 273
12.12. Monitorowanie róde energii
zasilanych promieniami sonecznymi i wiatrem ..................................... 273
Cz IV. Dodatki ....................................................275
Dodatek A. Instalacja bibliotek platformy Arduino .................... 277
A.1.1. System Apple OS X ......................................................................... 277
A.1.2. System Linux ..................................................................................... 278
A.1.3. System Windows ................................................................................ 278
Dodatek B. Bibliografia .................................................................... 281
Skorowidz .......................................................................................... 283
Rozdzia 5.
wierkajcy
karmnik dla ptaków
am dwójk dzieci, które wprost uwielbiaj ptaki. Ju jako mae dzie-
ci miay swoje pierwsze papuki. Lubiy te obserwowa dzikie
ptaki konstruujce gniazda i posilajce si w karmniku zamontowa-
nym przy oknie sypialni. Dokarmianie ptaków wie si jednak z pewnym
problemem — dzieci cigle zapominaj o uzupenianiu nasion dla ptaków
w karmnikach. Zdarzao si, e z rozmaitych powodów w karmniku brako-
wao nasion przez cae dnie, a nawet tygodnie. Czy nie byoby prociej,
gdyby sam karmnik informowa nas o koniecznoci uzupenienia karmy?
Historia pustego karmnika bya inspiracj dla tego projektu. Czy mona sobie
wyobrazi lepsz form powiadamiania o koniecznoci dosypania nasion ni
„wierkanie” na Twitterze? Zainteresowani znajomi i krewni mog ledzi
konto karmnika, aby wiedzie, kiedy karmnik jest odwiedzany przez ptaki,
kiedy wymaga uzupenienia karmy i czy nasiona zostay dosypane. (Patrz
rysunek 5.1 zatytuowany „Wysyanie powiadomie przez karmnik dla
ptaków za porednictwem Twittera”).
M
94
5.1. Czego potrzebujemy
Rysunek 5.1.
Wysyanie powiadomie przez karmnik dla ptaków
za porednictwem Twittera (w czasie, gdy karmnik jest
odwiedzany przez ptaki, oraz w sytuacji, gdy wymaga
uzupenienia nasion)
Skoro planujemy ledzi na Twitterze komunikaty o koniecznoci uzupe-
nienia karmnika, warto rozbudowa ten mechanizm o wasny czujnik in-
stalowany na grzdzie, który bdzie rejestrowa wizyty ptaków w karmniku
i analizowa czas ich przebywania na grzdzie. Przed publikacj wpisów
na Twitterze bdziemy rejestrowa te zdarzenia w bazie danych, aby umoli-
wi wizualne prezentowanie wzorców karmienia ptaków w czasie.
Czy w kwietniu ptaki s bardziej wygodniae ni na przykad w lipcu? Czy
ptaki czciej zagldaj do karmnika rano, czy popoudniami? Ile wynosi
redni czas przebywania ptaków na grzdzie w karmniku? Ile czasu mija
pomidzy kolejnymi wizytami ptaków? Jak czsto musimy uzupenia na-
siona w karmniku? wierkajcy karmnik dla ptaków umoliwia nam pro-
wadzenie ciekawych bada w poszukiwaniu odpowiedzi na te i inne wzorce
zachowa ptaków. Czas wzbi si w powietrze!
Rozdzia 5. • wierkajcy karmnik dla ptaków
95
5.1. Czego potrzebujemy
Poniewa wierkajcy karmnik bdzie naszym pierwszym projektem reali-
zowanym na zewntrz, koszty niezbdnego sprztu z kilku powodów bd
nieco wysze. Po pierwsze, jeli nie chcemy wierci dziur przez ca grubo
cian zewntrznych domu ani prowadzi przewodów sieciowych przez otwarte
drzwi czy okna, musimy znale sposób wysyania zdarze notowanych
przez czujniki przy uyciu technik bezprzewodowych. Na szczcie istniej
niskonapiciowe i stosunkowo tanie urzdzenia w formie nadajników radio-
wych XBee. Pocztkowa konfiguracja tych urzdze wymaga dodatkowych
nakadów i wikszego wysiku, jednak wspomniane urzdzenia s do nie-
zawodne, cakiem atwo nawizuj poczenia, a raz zainstalowane nie wy-
magaj naszej uwagi.
Po drugie, mimo e moglibymy zastosowa standardow platform Ar-
duino Uno (tak jak na schematach pocze prezentowanych w tym roz-
dziale), wymiary tej pytki mog si okaza zbyt due dla typowego karm-
nika dla ptaków. W tej sytuacji zachcam do wydania minimalnie wikszej
kwoty na zakup pytki Arduino Nano. Instalacja platformy Nano z pew-
noci bdzie prostsza, zwaywszy na ograniczon przestrze w karmniku.
Niewtpliw zalet pytki Nano jest niemal identyczna konfiguracja wtyków
i ukad elementów sprztowych jak w przypadku wikszego brata. Pytka
Nano oferuje wszystkie moliwoci tradycyjnej platformy Arduino, tyle e
zajmuje duo mniej miejsca.
Po trzecie, mimo e zasilanie tych czci elektronicznych za porednic-
twem dugiego przewodu podczonego do zewntrznego gniazdka (zain-
stalowanego z myl o dekoracjach witecznych) jest moliwe, tak zapro-
jektowany system nie bdzie wystarczajco autonomiczny. Co wicej, sys-
tem karmnika dla ptaków to wprost doskonaa okazja do zastosowania
ekologicznego róda energii.
I wreszcie w zwizku z koniecznoci ochrony elektroniki musimy zadba
o dobre zabezpieczenie systemu przed niesprzyjajcymi warunkami atmosfe-
rycznymi. Oto kompletna lista zakupów (komponenty uywane w tym pro-
jekcie pokazano te na rysunku 5.2 zatytuowanym „Czci systemu wierka-
jcego karmnika dla ptaków”):
1.
Platforma Arduino Uno lub Arduino Nano
1
.
1
http://www.makershed.com/ProductDetails.asp?ProductCode=MKGR1
96
5.1. Czego potrzebujemy
Rysunek 5.2.
Czci systemu wierkajcego karmnika dla ptaków
2.
Dwa moduy XBee z zestawami adapterów oraz przewód FTDI
2
.
3.
Fotokomórka.
4.
Kawaek folii aluminiowej.
5.
Przewód.
6.
Niewielki panel soneczny z wbudowanym akumulatorem i prze-
wodem USB (na przykad podobny do tego oferowanego w sklepie
Solio)
3
.
7.
Jeden rezystor 10 k
i jeden rezystor 10 M — warto sprawdzi
kolorowe paski na stosowanych rezystorach: rezystor 10 k
powinien
by oznaczony paskami brzowym, czarnym, pomaraczowym i zotym,
natomiast rezystor 10 M
powinien by oznaczony paskami brzo-
wym, czarnym, niebieskim i zotym. Potrzebne rezystory pokazano
na rysunku 5.3 zatytuowanym „Rezystory uywane w projekcie
wierkajcego karmnika dla ptaków”. Na zdjciu wida równie foto-
komórk (nazywan take fotorezystorem CdS).
8.
Karmnik dla ptaków z otworem na nasiona, w którym zmieci si
platforma Nano i modu XBee (zabezpieczone przed czynnikami
pogodowymi).
2
http://www.adafruit.com
3
http://www.solio.com/chargers/
Rozdzia 5. • wierkajcy karmnik dla ptaków
97
Rysunek 5.3.
Rezystory uywane w projekcie wierkajcego karmnika
dla ptaków
9.
Komputer (nie ma go na zdjciu), najlepiej z systemem Linux lub
Mac OS oraz zainstalowanym kompilatorem jzyka Python 2.6
lub nowszym (na potrzeby skryptu przetwarzajcego komunikaty
wysyane przez karmnik dla ptaków).
W razie decyzji o uyciu pytki Arduino Nano zamiast tradycyjnej pytki
Arduino Uno trzeba bdzie dodatkowo zakupi standardowy przewód
USB A-mini B (nie ma go na zdjciu), aby poczy pytk Arduino
Nano z komputerem. Co wicej, poniewa na platformie Arduino Nano
zastosowano wtyki mskie zamiast wtyków eskich (stosowanych w przy-
padku pytki Arduino Uno), zamiast standardowych przewodów bdzie-
my potrzebowali odpowiednich kocówek eskich (których take nie
pokazano na zdjciu). Odpowiednie kocówki uatwi czenie przewo-
dów z wtykami na pytce Nano bez koniecznoci ich trwaego lutowania.
Projekt jest bardziej zoony ni system powiadamiania o poziomie wody,
a najtrudniejszym krokiem procesu budowy tego rozwizania bdzie za-
pewnienie niezawodnej pracy moduów XBee. Mimo to projekt jest wart
niezbdnych nakadów — w jego wyniku bdziemy dysponowali nie tylko
supernowoczesnym karmnikiem na miar XXI wieku, ale te skonfiguro-
wanym systemem obejmujcym moduy komunikacji radiowej XBee, który
bdzie nam potrzebny w wielu pozostaych projektach. Gotowy zakasa
rkawy? Do dziea!
98
5.3. Czujnik grzdy
5.2. Budowa rozwizania
Poczenie wszystkich elementów tak, aby pasoway do wntrza karmnika,
moe wymaga pewnej pomysowoci, szczególnie jeli zbiornik na ziarno
nie oferuje dostatecznie duo przestrzeni. Zanim przystpimy do upycha-
nia elektroniki w karmniku, musimy upewni si, e wszystkie komponenty
dziaaj zgodnie z naszymi oczekiwaniami.
1.
Zaczniemy od najprostszego kroku, czyli poczenia z pytk Ar-
duino czujnika pojemnociowego z folii aluminiowej oraz napisania
funkcji, która w momencie zmiany stanu tego czujnika bdzie wy-
syaa komunikat do okna monitorowania portu szeregowego (a do-
celowo do moduu XBee podczonego do tego portu).
2.
W dalszej kolejnoci musimy podczy do pytki Arduino fotoko-
mórk i napisa kod reagujcy na zmiany stanu tego czujnika.
3.
Zaraz potem przystpimy do czenia pary moduów radiowych XBee,
tak aby informacje o wspomnianych zdarzeniach byy przekazywane
pomidzy nadajnikiem XBee poczonym z pytk Arduino a odbior-
nikiem XBee poczonym z komputerem za porednictwem prze-
wodu FTDI USB.
4.
I wreszcie musimy napisa skrypt jzyka Python, który pobierze dane
z bazy danych SQLite, sformatuje je i wyle w formie gotowego wpisu
do publikacji w serwisie Twitter.
Po dopracowaniu i poczeniu wszystkich komponentów bdziemy dyspo-
nowali systemem zoonym z pytki Arduino (najlepiej w wersji Nano),
moduu XBee, czujnika grzdy i fotokomórki — cao bdzie zabezpie-
czona przed czynnikami atmosferycznymi i zainstalowana w karmniku dla
ptaków. Po sprawdzeniu, czy wszystko dziaa prawidowo, naley wyj
na dwór i przetestowa ten system w warunkach polowych.
5.3. Czujnik grzdy
Karmniki dla ptaków maja róne ksztaty i wymiary. Zdecydowaem si za-
stosowa wyjtkowo proste rozwizanie w celu wykrywania zdarze ldowa-
nia ptaków na grzdzie karmnika. Mimo e skonstruowanie mechanizmu
wykrywajcego nacisk na grzdzie z pewnoci byoby moliwe, czas potrzeb-
ny na opracowanie tego rozwizania i jego koszty byyby stosunkowo due,
a przecie naszym jedynym celem jest wykrycie, czy co nie usiado na grzdzie.
Rozdzia 5. • wierkajcy karmnik dla ptaków
99
Alternatywnym rozwizaniem jest monitorowanie zmian pojemnoci elek-
trycznej.
Wystarczy owin grzd karmnika foli aluminiow oraz poczy t foli
z cyfrowymi wtykami na pytce Arduino przy uyciu rezystora. Na podstawie
wartoci bazowych i zmian wykrywanych przez ten czujnik w momencie ldo-
wania ptaka moemy wyznaczy warto progow, której przekroczenie po-
winno powodowa wygenerowanie i wysanie komunikatu o ldujcym ptaku.
Budowa czujnika
Budowa i testowanie czujnika grzdy to najprostszy element tego projektu.
Wystarczy uy kawaka folii aluminiowej wielkoci poowy opakowania
od listka gumy do ucia i owin grzd. Naley nastpnie poczy jeden
koniec rezystora 10 M
z wtykiem cyfrowym nr 7 na pytce Arduino oraz
drugi koniec z wtykiem nr 10. Przewód poczony z foli aluminiow naley
poczy z kocówk rezystora podczon do wtyku cyfrowego nr 7. Od-
powiedni schemat pocze pokazano na rysunku 5.4 zatytuowanym „Spo-
sób podczenia czujnika pojemnociowego”.
Rysunek 5.4.
Sposób podczenia czujnika pojemnociowego
Programowanie czujnika
Naley teraz poczy platform Arduino z komputerem, po czym uruchomi
rodowisko Arduino IDE w celu napisania kodu obsugujcego czujnik.
100
5.3. Czujnik grzdy
Podobnie jak w przypadku projektu systemu powiadamiania o poziomie
wody musimy napisa kod realizujcy nastpujce zadania:
1.
Wywietli wartoci odczytane przez czujnik pojemnociowy w oknie
monitora portu szeregowego rodowiska Arduino IDE.
2.
Zidentyfikuje warto bazow tego czujnika.
3.
Dostosuje natenie prdu w momencie dotykania czujnika palcem.
4.
Zarejestruje now warto uywan w roli wartoci progowej gene-
rujcej powiadomienie.
Aby uatwi sobie wykrywanie zmian natenia prdu elektrycznego w mo-
mencie dotknicia folii palcem lub wyldowania ptaka, skorzystamy z rozwi-
zania opracowanego przez jednego z mioników platformy Arduino —
Paula Badgera. Paul napisa bibliotek Arduino, dziki której mierzenie
zmian wartoci przekazywanych przez czujniki pojemnociowe (podob-
nych do folii uywanej w tym projekcie) jest dziecinnie proste. Biblioteka
nazwana Capacitive Sensing
4
umoliwia programistom platformy Arduino
przeksztacenie dwóch (lub wikszej liczby) wtyków na pytce Arduino
w czujnik pojemnociowy, który moe suy do wykrywania pojemnoci
elektrycznej ludzkiego ciaa. Ciao czowieka cechuje si znacznie wik-
sz pojemnoci ni ciao ptaka, std dotknicie czujnika powoduje duo
wiksz zmian wartoci. Poniewa jednak take pojemno elektryczn
ptaka mona zmierzy, wystarczy odpowiednio dostroi warto progow
stosowan przez nasz program.
Naley pobra t bibliotek, rozpakowa jej zawarto i skopiowa pliki
biblioteki do folderu libraries platformy Arduino. Wicej informacji na ten
temat mona znale w dodatku A zatytuowanym „Instalacja bibliotek plat-
formy Arduino”.
W nastpnym kroku musimy utworzy nowy projekt platformy Arduino
i uy wyraenia
#include CapSense.h;
.
Z powodu duo mniejszej wielkoci samego ciaa i powierzchni styku ciaa
z foli aluminiow wartoci dla ptaka bd zasadniczo róniy si od wartoci
dla czowieka. Jeli to moliwe, warto zmierzy te rónice przy pomocy
prawdziwego ptaka. Z radoci odkryem, e papuki moich dzieci s na tyle
akome, e ochoczo uczestnicz w testach, pod warunkiem e grzda z czujni-
kiem pozwoli im si dosta do ziaren w karmniku. Moje testowe pomiary
4
http://www.arduino.cc/playground/Main/CapSense
Rozdzia 5. • wierkajcy karmnik dla ptaków
101
wykazay, e waciwa warto bazowa powinna mieci si w przedziale
od 900 do 1400 oraz e pojemno elektryczna ciaa ptaka zwiksza t war-
to do ponad 1500. Na podstawie tych wartoci moemy opracowa iden-
tyczny kod warunkowy jak w przypadku systemu powiadamiania o poziomie
wody, tak aby program zmienia stan w odpowiedzi na powiadomienia o ldo-
waniu i odlatywaniu ptaków.
Zacznijmy od napisania kodu, który zaaduje bibliotek CapSense i b-
dzie wywietla odczytywane wartoci pojemnoci w oknie monitora portu
szeregowego.
Plik
TweetingBirdFeeder/BirdPerchTest.pde
#include <CapSense.h>
#define ON_PERCH 1500
#define CAP_SENSE 30
#define ONBOARD_LED 13
CapSense foil_sensor = CapSense(10,7); // czujnik pojemnociowy
// rezystor mostkujcy wtyki cyfrowe nr 10 i 7
// przewód poczony z rezystorem od strony
// wtyku nr 7
int perch_value = 0;
byte perch_state = 0;
void setup()
{
// na potrzeby komunikatów diagnostycznych w oknie portu szeregowego
Serial.begin(9600);
// ustawia wtyk dla wbudowanej diody LED
pinMode(ONBOARD_LED, OUTPUT);
}
void SendPerchAlert(int perch_value, int perch_state)
{
digitalWrite(ONBOARD_LED, perch_state ? HIGH : LOW);
if (perch_state)
Serial.print("Zdarzenie ldowania na grzdzie, perch_value=");
else
Serial.print("Zdarzenie opuszczenia grzdy, perch_value=");
Serial.println(perch_value);
}
void loop() {
// czeka sekund w kadej iteracji ptli
delay(1000);
// pobiera warto czujnika pojemnociowego
perch_value = foil_sensor.capSense(CAP_SENSE);
switch (perch_state)
102
5.4. Czujnik ziarna
{
case 0: // aden ptak nie siedzi obecnie na grzdzie
if (perch_value >= ON_PERCH)
{
perch_state = 1;
SendPerchAlert(perch_value, perch_state);
}
break;
case 1: // jaki ptak siedzi teraz na grzdzie
if (perch_value < ON_PERCH)
{
perch_state = 0;
SendPerchAlert(perch_value, perch_state);
}
break;
}
}
Warto zwróci uwag na warto staej
ON_PERCH
(równ 1500), któr porów-
nujemy z zarejestrowan wartoci zmiennej
perch_value
. Z uwagi na ró-
nice dotyczce przewodnictwa elektrycznego zastosowanej folii i samej po-
wierzchni czujnika kady powinien dostosowa warto progow reprezento-
wan przez sta
ON_PERCH
(tak jak dostosowywalimy odpowiednie progi
w projekcie systemu powiadamiania o poziomie wody). Naley te zwróci
uwag na warto 30 przypisan staej
CAP_SENSE
. Ta warto okrela licz-
b pobra próbnych wartoci w jednym cyklu mierzenia pojemnoci.
Skoro dysponujemy ju dziaajcym czujnikiem grzdy dla ptaków, czas opra-
cowa mechanizm wykrywajcy niski poziom ziarna. Jak to zrobi? Warto
zastosowa fotokomórk.
5.4. Czujnik ziarna
Fotokomórka mierzy intensywno wiata — wiksza intensywno prze-
kada si na wysze natenie prdu; sabsze wiato powoduje spadek
tego natenia. Szczegóowe wyjanienie dziaania fotokomórek i prze-
wodnik na temat ich stosowania mona znale na stronie internetowej
Ladyady
5
. Umieszczenie fotokomórki poniej normalnego poziomu ziaren
wsypanych do karmnika umoliwi nam wykrywanie zdarzenia polegajce-
go na spadku poziomu karmy poniej czujnika — do fotokomórki bdzie
wówczas docierao wicej wiata, a nasz system bdzie móg wygenerowa
komunikat o koniecznoci uzupenienia ziaren.
5
http://www.ladyada.net/learn/sensors/cds.html
Rozdzia 5. • wierkajcy karmnik dla ptaków
103
Przed wywierceniem dziur w karmniku i zainstalowaniem fotokomórki
musimy jeszcze napisa odpowiedni kod i przetestowa go w podobny sposób
jak w przypadku wasnorcznie skonstruowanego czujnika pojemnociowego.
Jedn kocówk fotokomórki naley poczy z wtykiem 5-woltowym na
pytce Arduino; drug kocówk naley poczy z wtykiem analogowym
nr 0. Wtyk analogowy nr 0 na pytce Arduino naley nastpnie zmostko-
wa z wtykiem uziemienia za pomoc rezystora 10 k
(patrz rysunek 5.5
zatytuowany „Schemat poczenia fotokomórki”). Czy opisany schemat
pocze nie wyglda znajomo? Tak — identyczn konfiguracj stosowali-
my ju dla innych czujników czonych z platform Arduino. Jest to do
typowy wzorzec czenia wielu typów czujników z pytk Arduino.
Rysunek 5.5.
Schemat poczenia fotokomórki
Po podczeniu fotokomórki naley poczy pytk Arduino z kompute-
rem (za pomoc przewodu szeregowego USB) i uruchomi rodowisko
Arduino IDE. Moemy teraz zastosowa t sam technik co w przypadku
czujnika pojemnociowego, aby przeledzi wartoci dla wtyku analogo-
wego nr 0 (wywietlane w oknie monitora portu szeregowego rodowiska
Arduino IDE) i na tej podstawie wyznaczy wartoci bazowe — okreli
warto dla odsonitej fotokomórki. Warto teraz zasoni czujnik palcem,
aby zablokowa dopyw wiata. Naley te zanotowa, jak zmienia si
warto odczytana z fotokomórki.
Tak jak w przypadku testów czujnika pojemnociowego, musimy opraco-
wa pewne procedury i wyraenia warunkowe, które sprawdz progi nat-
enia wiata. W praktyce moemy nawet skopiowa i wklei kod testujcy
104
5.4. Czujnik ziarna
czujnik pojemnociowy i ograniczy si do dostosowania nazw zmiennych
oraz przypisania odpowiednich wtyków.
Plik
TweetingBirdFeeder/SeedPhotocellTest.pde
#define SEED 500
#define ONBOARD_LED 13
#define PHOTOCELL_SENSOR 0
int seed_value = 0;
byte seed_state = 0;
void setup()
{
// na potrzeby komunikatów diagnostycznych w oknie portu szeregowego
Serial.begin(9600);
// ustawia wtyk dla wbudowanej diody LED
pinMode(ONBOARD_LED, OUTPUT);
}
void SendSeedAlert(int seed_value, int seed_state)
{
digitalWrite(ONBOARD_LED, seed_state ? HIGH : LOW);
if (seed_state)
Serial.print("Uzupenij ziarno, seed_value=");
else
Serial.print("Karma uzupeniona, seed_value=");
Serial.println(seed_value);
}
void loop() {
// czeka sekund w kadej iteracji ptli
delay(1000);
// sprawdza warto fotokomórki ledzcej poziom ziarna
seed_value = analogRead(PHOTOCELL_SENSOR);
switch (seed_state)
{
case 0: // pojemnik na ziarno zosta napeniony
if (seed_value >= SEED)
{
seed_state = 1;
SendSeedAlert(seed_value, seed_state);
}
break;
case 1: // pojemnik na ziarno jest pusty
if (seed_value < SEED)
{
seed_state = 0;
SendSeedAlert(seed_value, seed_state);
}
break;
}
}
Rozdzia 5. • wierkajcy karmnik dla ptaków
105
Zmierzenie i ustalenie odpowiedniej wartoci progowej dla fotokomórki
(reprezentowanej przez sta
SEED
) jest duo prostsze ni w przypadku czujni-
ka pojemnociowego, a uzyskana warto jest bardziej wiarygodna. Mimo
e fotokomórk mona zasoni palcem, aby zmierzy warto w warunkach
braku dopywu wiata, lepszym rozwizaniem bdzie zasypanie czujnika
prawdziwym ziarnem. Jeli z jakiego powodu nie chcemy wierci dziur
w karmniku dla ptaków, aby zainstalowa fotokomórk, moemy umieci
czujnik na dnie papierowego kubka.
Tak jak podczas kalibrowania wartoci progowych czujnika w systemie po-
wiadamiania o poziomie wody, naley doda nastpujce wiersze za wierszem
seed_value = analogRead(PHOTOCELL_SENSOR);
w gównej ptli programu:
Serial.print("seed_value=");
Serial.println(seed_value);
Naley zapisa warto pocztkow zmiennej
seed_value
, po czym wypeni
pojemnik ziarnem i zmierzy now warto. Na podstawie tych wartoci
naley okreli warto pocztkow i warto progow dla fotokomórki.
Jeli zasonicie fotokomórki nie powoduje adnej zmiany wartoci, warto
raz jeszcze sprawdzi wszystkie poczenia. W przypadku mojej fotokomórki
warto bazowa miecia si w przedziale od 450 do 550. Zasonicie
czujnika palcem powodowao natychmiastowy spadek tej wartoci poniej
100. Kady powinien zastosowa wartoci progowe dobrane na podstawie
wasnych testów. Musimy te pamita o koniecznoci ponownej kalibracji
czujnika ju po zamontowaniu w karmniku dla ptaków.
Skoro dysponujemy ju dziaajcymi mechanizmami monitorowania czujnika
grzdy i fotokomórki, musimy znale sposób sygnalizowania przekroczenia
wartoci progowych przyjtych dla tych czujników. Prowadzenie przewo-
du sieciowego od domowego koncentratora do gazi drzewa na zewntrz
budynku byoby niepraktyczne. Sporym wyzwaniem byaby take instala-
cja platformy Arduino z doczonym moduem sieciowym w bardzo ogra-
niczonej przestrzeni karmnika dla ptaków. W tej sytuacji warto zastosowa
wygodny mechanizm komunikacji bezprzewodowej (wymagajcy stosun-
kowo niewiele mocy elektrycznej), który w zupenoci wystarczy do prze-
syania powiadomie o przekroczeniu wartoci progowych przez wskaza-
nia czujników. Po nawizaniu komunikacji bezprzewodowej moemy uy
wikszej mocy obliczeniowej i wikszych zasobów pamiciowych do przetwa-
rzania i analizy gromadzonych danych.
106
5.5. Komunikacja bezprzewodowa
5.5. Komunikacja bezprzewodowa
Mimo e istniej moduy platformy Arduino obsugujce wszechobecny
standard Wi-Fi (802.11b/g), na przykad WiFly Shield firmy Sparkfun,
w przypadku tej platformy do komunikacji bezprzewodowej czciej sto-
suje si moduy XBee. Pocztkowe nakady zwizane z zakupem zestawu
urzdze XBee mog by do wysokie. Due koszty wynikaj z koniecz-
noci zakupu (oprócz pary moduów XBee) przewodu FTDI USB po-
trzebnego do poczenia jednego z tych moduów z komputerem, tak aby
peni funkcj bezprzewodowego portu szeregowego.
Drugi modu XBee najczciej jest czony z platform Arduino. Istniej
te dodatkowe zestawy upraszczajce czenie tych elementów — umoli-
wiajce instalowanie moduów XBee przy uyciu specjalnych wtyczek i wy-
wietlanie stanu transmisji danych za pomoc wbudowanych diod LED.
Takie wizualne wska niki mog by do przydatne podczas diagnozowa-
nia poczenia pary moduów XBee i usuwania ewentualnych bdów.
Mimo wszystkich trudnoci moliwoci oferowane przez moduy XBee
(niski pobór prdu i stosunkowo duy zasig — maksymalnie 50 metrów)
czyni z tych urzdze wprost doskona technologi komunikacji bezprze-
wodowej na potrzeby tego projektu.
Z myl o uproszczeniu czenia moduów XBee firma Adafruit zaprojekto-
waa zestaw adapterów, który jednak wymaga przylutowania kilku niewiel-
kich komponentów do pytki Arduino. Adaptery naley stosowa zgodnie
z instrukcjami dostpnymi na stronie internetowej Ladyady
6
.
Po poczeniu moduów XBee konfiguracja i nawizanie komunikacji po-
midzy par tych moduów nie s trudne. Warto jednak pamita, e jedno
z najbardziej przydatnych narzdzi uatwiajcych konfiguracj tych mo-
duów dziaa tylko w systemie Windows.
Zgodnie z instrukcjami opisujcymi schemat czenia moduów XBee w topo-
logii punkt – punkt dostpnymi na stronie Ladyady
7
naley poczy wtyki
zasilania, uziemienia (Gnd), odbioru (RX) i transmisji (TX) jednego
moduu XBee z zamontowanym adapterem odpowiednio do wtyków 5V,
Gnd, cyfrowego nr 2 i cyfrowego nr 3 na pytce Arduino. Pytk Arduino
naley nastpnie poczy z komputerem, umieci na platformie program
6
http://www.ladyada.net/make/xbee/
7
http://ladyada.net/make/xbee/point2point.html
Rozdzia 5. • wierkajcy karmnik dla ptaków
107
testowy, otworzy okno monitora portu szeregowego rodowiska Arduino
IDE i upewni si, e jest ustawiona odpowiednia szybko transmisji
(9600). Naley nastpnie (jeszcze przed odczeniem platformy Arduino)
poczy komputer z drugim moduem XBee za porednictwem przewodu
FTDI USB. W nastpnym kroku musimy otworzy sesj terminala portu
szeregowego: program Hyperterminal w systemie Windows, polecenie
screen
w systemie Mac lub rozmaite programy do obsugi komunikacji szeregowej
dostpne dla systemu Linux, na przykad Minicom
8
.
Po nawizaniu poczenia szeregowego wystarczy wpisa kilka znaków w
oknie danych wejciowych uytej aplikacji. Jeli oba moduy XBee zostay
prawidowo skonfigurowane, wpisane znaki powinny zosta wywietlone
w oknie monitora portu szeregowego rodowiska Arduino IDE.
Korzystanie z narz dzia screen
Aplikacja
screen
jest wygodnym narzdziem do monitorowania por-
tu szeregowego dostpnym dla platform na bazie systemu Unix,
czyli systemów Mac OS X i Linux. Aby uy tego programu w systemie
OS X, naley okreli port szeregowy, do którego podczono przewód
FTDI USB — mona to zrobi za pomoc rodowiska Arduino IDE.
Z menu Tools tego rodowiska naley wybra opcj Serial Port, aby zi-
dentyfikowa przypisany port szeregowy.
W moim przypadku poczenie adaptera FTDI USB z XBee jest ozna-
czone jako urzdzenie /dev/tty.usbserial-A6003SHc, jednak na innym
komputerze to samo poczenie moe by reprezentowane w inny
sposób (w zalenoci od pozostaych urzdze podczonych do
komputera). Po otwarciu aplikacji terminala naley wpisa polecenie
screen /dev/tty.YOURDEVICE 9600
. W wyniku tego polecenia zostanie
otwarty port szeregowy i uzyskamy moliwo wpisywania i otrzymy-
wania znaków z szybkoci transmisji 9600. Aby zamkn narzdzie,
naley nacisn kolejno kombinacje klawiszy Ctrl+A oraz Ctrl+\.
Jeli do poczenia moduów XBee z pytk Arduino i przewodem FTDI
uyto odpowiednich adapterów, w czasie bezprzewodowej transmisji znaków
pomidzy moduami XBee powinny miga diody LED (zielona podczas
wysyania danych i czerwona podczas odbioru danych).
8
http://alioth.debian.org/projects/minicom/
108
5.5. Komunikacja bezprzewodowa
Jeli w oknie odbieranych danych nie wida adnych znaków, naley jeszcze
raz sprawdzi przewody czce modu XBee z odpowiednimi wtykami na
pytce Arduino. Warto te zamieni te moduy miejscami, aby sprawdzi, czy
oba urzdzenia s rozpoznawane po poczeniu z komputerem za pomoc
przewodu FTDI USB. W oknie terminala aplikacji portu szeregowego
naley wpisa polecenie
AT
i sprawdzi, czy w odpowiedzi otrzymamy po-
twierdzenie
OK
.
Jeli moduy XBee wci nie mog nawiza poczenia, warto poprosi
o pomoc sprzedawc, u którego zakupiono ten sprzt.
Po udanej próbie nawizania komunikacji przez par moduów XBee mo-
emy ponownie podczy fotokomórk i czujnik pojemnociowy do pytki
Arduino i poczy kod obsugujcy ten modu z kodem analizujcym warunki
progowe obu czujników. Kompletny schemat pocze tego systemu pokaza-
no na rysunku 5.6 zatytuowanym „wierkajcy karmnik dla ptaków z czuj-
nikami i moduem XBee podczonymi do platformy Arduino”.
Rysunek 5.6.
wierkajcy karmnik dla ptaków z czujnikami i moduem
XBee podczonymi do platformy Arduino
Rozdzia 5. • wierkajcy karmnik dla ptaków
109
Warto rozway uycie uniwersalnej pytki montaowej lub zlutowanie
czujników, uytych przewodów i odpowiednich wtyków na pytce Arduino.
Czytelnicy, którzy do testów wol uywa pytki uniwersalnej, musz pami-
ta, e taka pytka najprawdopodobniej nie zmieci si w karmniku, zatem
przewody czce elementy systemu trzeba bdzie przylutowa dopiero po
instalacji w miejscu docelowym. W zalenoci od pooenia i orientacji
pytki Arduino Uno lub Nano wewntrz karmnika by moe bdziemy
musieli uy dla adaptera XBee prostych wtyków zamiast standardowych
wtyków wygitych w prawo. Naszym celem jest umieszczenie wszystkich
potrzebnych elementów wewntrz karmnika w sposób gwarantujcy bez-
pieczestwo i jednoczenie moliwo konserwacji systemu. Warto przy tym
pamita, e w przeciwiestwie do pytki Arduino Uno pytka Arduino Na-
no stosuje mskie wtyki. Oznacza to, e aby lepiej poczy mskie wtyki na
pytce Nano, naley zastosowa przewody z eskimi kocówkami.
Ko czenie szkicu
Musimy odczytywa wartoci obu czujników — czujnika pojemnociowe-
go z folii aluminiowej oraz fotokomórki. Pocztkowo odczytywane warto-
ci bd trafiay do okna monitora portu szeregowego rodowiska Arduino
IDE, a docelowo (po wprowadzeniu drobnej zmiany w kodzie) bd wy-
syane przez modu XBee. Na tym etapie naszym celem jest poczenie
kodu sprawdzajcego wyznaczone wczeniej wartoci progowe dla czujni-
ka pojemnociowego i fotokomórki z kodem wysyajcym do moduu
XBee ostrzeenia o przekroczeniu tych wartoci. Po dodaniu tej logiki do
napisanego wczeniej kodu testujcego stan grzdy i pojemnika na nasiona
moemy zakoczy prac nad szkicem dla tego projektu.
Plik
TweetingBirdFeeder/TweetingBirdFeeder.pde
#include <CapSense.h>;
#include <NewSoftSerial.h>
#define ON_PERCH 1500
#define SEED 500
#define CAP_SENSE 30
#define ONBOARD_LED 13
#define PHOTOCELL_SENSOR 0
// ustawia wtyki cyfrowe na potrzeby szeregowego wysyania/odbioru danych
// przez modu XBee
NewSoftSerial XBeeSerial = NewSoftSerial(2, 3);
CapSense foil_sensor = CapSense(10,7); // czujnik pojemnociowy
// rezystor mostkujcy wtyki cyfrowe
// nr 10 i 7
110
5.5. Komunikacja bezprzewodowa
// przewód poczony z rezystorem
// od strony wtyku nr 7
int perch_value = 0;
byte perch_state = 0;
int seed_value = 0;
byte seed_state = 0;
void setup()
{
// na potrzeby komunikatów diagnostycznych w oknie portu szeregowego
Serial.begin(9600);
// na potrzeby transmisji danych za porednictwem moduu XBee
XBeeSerial.begin(9600);
// ustawia wtyk dla wbudowanej diody LED
pinMode(ONBOARD_LED, OUTPUT);
}
void SendPerchAlert(int perch_value, int perch_state)
{
digitalWrite(ONBOARD_LED, perch_state ? HIGH : LOW);
if (perch_state)
{
XBeeSerial.println("przylot");
Serial.print("Zdarzenie ldowania na grzdzie, perch_value=");
}
else
{
XBeeSerial.println("odlot");
Serial.print("Zdarzenie opuszczenia grzdy, perch_value=");
}
Serial.println(perch_value);
}
void SendSeedAlert(int seed_value, int seed_state)
{
digitalWrite(ONBOARD_LED, seed_state ? HIGH : LOW);
if (seed_state)
{
XBeeSerial.println("dosyp");
Serial.print("Uzupenij ziarno, seed_value=");
}
else
{
XBeeSerial.println("ziarnoWNormie");
Serial.print("Karma uzupeniona, seed_value=");
}
Serial.println(seed_value);
}
void loop() {
// czeka sekund w kadej iteracji ptli
delay(1000);
Rozdzia 5. • wierkajcy karmnik dla ptaków
111
// sprawdza warto czujnika pojemnociowego na grzdzie
perch_value = foil_sensor.capSense(CAP_SENSE);
// sprawdza warto fotokomórki ledzcej poziom ziarna
seed_value = analogRead(PHOTOCELL_SENSOR);
switch (perch_state)
{
case 0: // aden ptak nie siedzi na grzdzie
if (perch_value >= ON_PERCH)
{
perch_state = 1;
SendPerchAlert(perch_value, perch_state);
}
break;
case 1: // jaki ptak siedzi teraz na grzdzie
if (perch_value < ON_PERCH)
{
perch_state = 0;
SendPerchAlert(perch_value, perch_state);
}
break;
}
switch (seed_state)
{
case 0: // pojemnik na ziarno zosta napeniony
if (seed_value >= SEED)
{
seed_state = 1;
SendSeedAlert(seed_value, seed_state);
}
break;
case 1: // pojemnik na ziarno jest pusty
if (seed_value < SEED)
{
seed_state = 0;
SendSeedAlert(seed_value, seed_state);
}
break;
}
}
Warto zwróci uwag na odwoania do biblioteki obsugujcej czujnik pojem-
nociowy i nowej biblioteki obsugujcej komunikacj za porednictwem
portu szeregowego na pocztku tego szkicu. Zmienne, które bd uyway
odwoa do tych bibliotek, zainicjalizowano w tym samym miejscu, w którym
ustawiono wartoci zmiennych progowych. W dalszej czci kodu konfigu-
rujemy poczenia z oknem monitora portu szeregowego i moduem XBee,
a take z wbudowan diod LED na pytce Arduino (wtyk nr 13). Po za-
koczeniu inicjalizacji program uruchamia ptl i czeka na przekroczenie
wartoci progowych dla czujników grzdy i (lub) ziarna. W razie wykrycia
112
5.5. Komunikacja bezprzewodowa
zmiany warunków szkic wyle odpowiednie komunikaty zarówno do okna
monitorowania portu szeregowego w rodowisku Arduino IDE, jak i do
moduu komunikacji radiowej XBee.
Jeli zarówno czujnik pojemnociowy, jak i fotokomórka prawidowo prze-
kazuj wartoci, naley przekierowa dane z okna monitorowania portu
szeregowego rodowiska Arduino IDE do moduu XBee poczonego
z platform Arduino. Warto jeszcze otworzy okno aplikacji testujcej port
szeregowy w trybie ledzenia moduu XBee podczonego za pomoc
przewodu FTDI i sprawdzi, czy wszystko dziaa prawidowo — jeli tak,
dane wywietlane w oknie monitora portu szeregowego rodowiska Arduino
IDE powinny by widoczne take w aplikacji portu szeregowego na kom-
puterze, do którego podczono przewód FTDI. Czy komunikacja bez-
przewodowa nie jest wspaniaa?
Na tym etapie sprzt potrzebny do realizacji tego projektu jest prawidowo
poczony i przetestowany — caa konstrukcja powinna przypomina
karmnik mojego autorstwa pokazany na rysunku 5.7 zatytuowanym „Pa-
puka moe pomóc w testowaniu i diagnozowaniu wartoci progowych
czujnika grzdy dla zdarze ldowania i odlatywania ptaków”.
Rysunek 5.7.
Papuka moe pomóc w testowaniu i diagnozowaniu
wartoci progowych czujnika grzdy dla zdarze ldowania
i odlatywania ptaków
Zanim jednak przystpimy do instalowania tego sprztu w karmniku dla pta-
ków, musimy zbudowa jeszcze jeden wany komponent. Uyjemy jzyka
Rozdzia 5. • wierkajcy karmnik dla ptaków
113
programowania Python do napisania krótkiego programu, który bdzie na-
suchiwa komunikatów o ldujcych ptakach, sprawdza stan pojemnika
z nasionami i publikowa stosowne wpisy na Twitterze. Przejd my wic do
pisania odpowiedniego kodu.
5.6. wierkanie w Pythonie
Istnieje wiele jzyków programowania, w których mona zaimplementowa
mechanizm monitorowania i interpretacji komunikatów przychodzcych
do konsoli portu szeregowego oraz wysyania komunikatów za porednic-
twem portu szeregowego. Istnieje te wiele bibliotek Twittera dla rónych
jzyków programowania.
Wybraem jzyk Python dla tego i wielu innych skryptów prezentowanych
w tej ksice, poniewa jzyk ten ma atw w interpretacji skadni, jest do-
mylnie instalowany wraz z systemami operacyjnymi Linux i Mac OS X
oraz oferuje wiele przydatnych bibliotek (na przykad SQLite) w swojej
podstawowej dystrybucji, zatem nie wymaga doinstalowywania tych kom-
ponentów. Czytelnikom, którzy chc si nauczy programowania w jzyku
Python, polecam ksik Python. Wprowadzenie [LA03].
W tym projekcie bdziemy potrzebowali prostego skryptu o nazwie twe-
etingbirdfeeder.py, który bdzie realizowa nastpujce zadania:
1.
Rejestrowanie zdarze (wraz z dat i godzin) ldowania i odlo-
tów ptaków na podstawie komunikatów wysyanych przez czujnik
grzdy. Dane maj by zapisywane w tabeli
birdfeeding
bazy da-
nych
tweetingbirdfeeder
.
2.
Rejestrowanie daty i godziny zdarze polegajcych na wykryciu
braku ziaren i uzupenieniu pojemnika na karm. Dane maj by
zapisywane w tabeli
seedstatus
, która take naley do bazy danych
tweetingbirdfeeder
.
3.
Nasuchiwanie danych przychodzcych i wysyanie komunikatów
za porednictwem nadajnika XBee poczonego z komputerem przy
uyciu przewodu FTDI. Reagowanie na zdarzenia poprzez zapisy-
wanie danych wraz z datami, godzinami i rejestrowanymi warunkami.
4.
Nawizywanie poczenia z Twitterem za porednictwem usugi
uwierzytelniania OAuth i wysyanie wpisów na temat karmienia pta-
ków i poziomu ziaren w karmniku.
114
5.6. wierkanie w Pythonie
Na potrzeby tego projektu bdziemy musieli zainstalowa tylko dwie do-
datkowe biblioteki Pythona:
pyserial
i
python-twitter
.
Oprócz publikowania wpisów na wybranym koncie na Twitterze warto
zadba o odpowiedni wizualizacj trendów opisywanych w tych wpisach,
na przykad czstotliwoci wizyt ptaków w karmniku, liczby tych odwie-
dzin wedug dat i godzin oraz redniego czasu pomidzy uzupenianiem
karmy. Takie rozwizanie umoliwi nam ledzenie trendów na podstawie
danych zarejestrowanych w cigu godziny, doby, miesica i roku. Warunkiem
prezentacji tego rodzaju statystyk jest gromadzenie danych w odpowiednim
formacie.
Konfiguracja bazy danych
Poniewa poczwszy od wersji 2.5, jzyk Python oferuje wbudowan obsug
baz danych SQLite i poniewa nasze dane nie wymagaj wyszukanego,
autonomicznego serwera bazy danych, baza SQLite jest wprost idealnym
rozwizaniem dla tego projektu. Mimo e wartoci mona by zapisywa
w zwykym pliku CSV (z danymi oddzielonymi przecinkami), uycie bazy
danych SQLite ma dwie zasadnicze zalety. Po pierwsze, ten sposób prze-
chowywania danych uatwi wykonywanie zapyta analitycznych w przyszo-
ci. Po drugie, baza danych oferuje wiksz elastyczno w zakresie gro-
madzenia danych o rónych rodzajach zdarze i zarzdzania tymi danymi
— w wielu przypadkach wystarczy tylko doda odpowiednie kolumny do
tabeli.
Do utworzenia bazy danych w formacie pliku
sqlite3
naley uy polecenia
wiersza polece
sqlite3
. Narzdzie jest domylnie instalowane wraz z syste-
mem Mac OS X. W wikszoci systemów Linux naley pobra to narzdzie
z repozytorium aplikacji waciwego danej dystrybucji. W dystrybucjach syste-
mu Linux na bazie Debiana, na przykad w systemie Ubuntu, instalacja apli-
kacji wymaga uycia polecenia
sudo apt-get install sqlite3 libsqlite3-dev
.
Uytkownicy systemu Windows bd musieli pobra narzdzie sqlite3.exe
z witryny internetowej bazy danych SQLite
9
.
Po zainstalowaniu systemu bazy danych naley wpisa polecenie
sqlite3
w oknie terminala. Polecenie spowoduje wywietlenie komunikatów podob-
nych do tych pokazanych poniej:
9
http://www.sqlite.org/download.html
Rozdzia 5. • wierkajcy karmnik dla ptaków
115
SQLite version 3.7.6
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>
Instalacja systemu SQLite na komputerze czytelnika oczywicie moe mie
inny numer wersji.
Musimy teraz wpisa wyraenie jzyka SQL tworzce now baz danych.
W tym celu naley opuci powok polece
sqlite
, wpisujc kolejno znaki
.q
i naciskajc klawisz waciwy znakowi powrotu karetki. Zaraz potem nale-
y ponownie uruchomi narzdzie
sqlite3
, tym razem podajc nazw bazy
danych, która ma zosta otwarta.
Baz danych dla tego projektu nazwiemy
tweetingbirdfeeder
, a jej dane
bd przechowywane w pliku nazwanym tweetingbirdfeeder.sqlite. Poniewa
wspomniana baza danych jeszcze nie istnieje, system SQLite automatycznie
utworzy odpowiedni plik. Plik bazy danych zostanie utworzony w katalogu,
z którego uruchomiono narzdzie
sqlite3
. Jeli na przykad polecenie
sqlite3
wpisalimy z poziomu katalogu home, plik nowej bazy danych zostanie
utworzony wanie w tym katalogu.
W bazie danych tweetingbirdfeeder.sqlite naley teraz utworzy now tabel
nazwan
birdfeeding
. Struktur tej tabeli pokazano poniej:
Nazwa
kolumny
Typ
danych
Klucz
gówny?
Automatyczne
zwikszanie?
Dopuszczalne
wartoci puste?
Unikatowa?
id
INTEGER
TAK
TAK
NIE
TAK
time
DATETIME
NIE
NIE
NIE
NIE
event
TEXT
NIE
NIE
NIE
NIE
Odpowiedni tabel moemy utworzy, wpisujc nastpujce wyraenie jzy-
ka SQL w wierszu polece narzdzia sqlite:
[~]$ sqlite3 tweetingbirdfeeder.sqlite
SQLite version 3.7.6
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE "birdfeeding" ("id" INTEGER PRIMARY KEY NOT NULL UNIQUE,
"time" DATETIME NOT NULL,"event" TEXT NOT NULL);
Po utworzeniu tabeli
birdfeeding
potrzebujemy jeszcze jednej tabeli o po-
dobnej strukturze. Nowa tabela, nazwana
seedstatus
, bdzie naleaa do tej
samej bazy danych:
116
5.6. wierkanie w Pythonie
Nazwa
kolumny
Typ
danych
Klucz
gówny?
Automatyczna
inkrementacja?
Dopuszczalne
wartoci puste?
Unikatowa?
id
INTEGER
TAK
TAK
NIE
TAK
time
DATETIME
NIE
NIE
NIE
NIE
event
TEXT
NIE
NIE
NIE
NIE
Tak jak w przypadku tabeli
birdfeeding
, utworzenie nowej tabeli
seedstatus
wymaga wpisania odpowiedniego wyraenia jzyka SQL w wierszu polece
narzdzia sqlite:
[~]$ sqlite3 tweetingbirdfeeder.sqlite
SQLite version 3.7.6
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE "seedstatus" ("id" INTEGER PRIMARY KEY NOT NULL,
"time" DATETIME NOT NULL ,"event" TEXT NOT NULL );
Dodatek SQLite Manager
Mimo e narzdzia systemu SQLite obsugiwane z poziomu wiersza
polece oferuj wszystkie elementy niezbdne do tworzenia baz da-
nych i zarzdzania tymi bazami, w pewnych przypadkach prostszym
rozwizaniem jest korzystanie z aplikacji oferujcej graficzny inter-
fejs uytkownika. Aplikacje z takim interfejsem s szczególnie przydat-
ne, jeli musimy przewija du liczb wierszy w jednym oknie. Istnieje
wiele aplikacji open source umoliwiajcych przegldanie baz danych
SQLite i oferujcych graficzny interfejs uytkownika. Uytkowników prze-
gldarki internetowej Mozilla Firefox zachcam do instalacji dodatku SQ-
Lite Manager, który mona stosowa na wielu rónych platformach
10
.
Instalacja tego dodatku jest bardzo prosta. Z menu przegldarki Fire-
fox naley wybra opcj Dodatki, po czym znale
dodatek SQLite Ma-
nager i klikn przycisk Zainstaluj. Po zainstalowaniu dodatku naley
otworzy zakadk Rozszerzenia w oknie dodatków i klikn przycisk Opcje
dla dodatku SQLite Manager. Utworzenie nowej bazy danych sprowa-
dza si do kliknicia ikony New Database na pasku narzdzi dodatku
SQLite Manager. Równie proste jest zapisywanie i otwieranie plików
baz danych SQLite.
10
https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/
Rozdzia 5. • wierkajcy karmnik dla ptaków
117
Dysponujemy ju gotow baz danych, zatem moemy przystpi do pracy
nad kodem importujcym t baz oraz wspomniane wczeniej biblioteki Se-
rial i Twitter. Musimy te przygotowa skrypt nasuchujcy zdarze przesy-
anych za porednictwem portu szeregowego i rejestrujcy te dane (wraz ze
znacznikami czasowymi) w odpowiedniej tabeli bazy danych.
Procedura przechwytywania zdarzenia powinna si zakoczy publikacj
wpisu na Twitterze. Zanim jednak bdziemy mogli wysya takie wpisy
z poziomu programu, musimy utworzy konto na Twitterze i zarejestrowa
si, aby uzyska klucz interfejsu Twitter API wraz z powizanymi danymi
uwierzytelniajcymi standardu OAuth. Przejd my wic do procesu uzyski-
wania klucza do wspomnianego interfejsu API.
Dane uwierzytelniajce interfejsu API Twittera
Zanim bdziemy mogli umieszcza wpisy na Twitterze, musimy oczywicie
zaoy konto w tym serwisie. Co wicej, zanim bdziemy mogli wysya wpisy
z poziomu naszego programu, a konkretnie funkcji lub bibliotek jzyka
programowania obsugujcych standard uwierzytelniania OAuth
11
, musimy
utworzy identyfikator aplikacji przypisany do odpowiedniego konta na
Twitterze. Mimo e mona wykorzysta do tego celu istniejce konto na
Twitterze, moim zdaniem lepszym rozwizaniem jest utworzenie zupenie
nowego konta specjalnie na potrzeby tego projektu. Dziki temu uytkownicy
ledzcy moje dotychczasowe konto nie bd niepokojeni eksperymentalnymi
powiadomieniami w zwizku z tworzonymi projektami. Takie rozwizanie
umoliwia te bardziej selektywny wybór odbiorców postów publikowanych
przez tworzon aplikacj. Po rozwaeniu wszystkich argumentów naley
utworzy nowe konto i uzyska identyfikator aplikacji wygenerowany spe-
cjalnie dla projektu wierkajcego karmnika dla ptaków.
Musimy teraz otworzy stron dev.twitter.com, zalogowa si przy uyciu
nowych danych uwierzytelniajcych i wybra opcj Create an app. Na otwar-
tej stronie Create an application naley poda unikatow nazw nowej
aplikacji, opis zoony z co najmniej dziesiciu znaków oraz adres strony in-
ternetowej rejestrowanej aplikacji. Czytelnicy, którzy nie dysponuj wasnymi
witrynami internetowymi oferujcymi moliwo pobrania aplikacji, mog
wpisa jaki tymczasowy adres. Naley nastpnie zaznaczy pole Client under
Application Type i wybra opcj Read & Write z menu Default Access
11
http://oauth.net/
118
5.6. wierkanie w Pythonie
Type. Mona te wskaza niestandardow ikon aplikacji, jednak ten krok
nie jest wymagany. Po wpisaniu tekstu zabezpieczenia CAPTCHA na-
ley klikn przycisk Create your Twitter application na dole strony. Przed
przejciem do nastpnego kroku naley jeszcze zapozna si z warunkami
korzystania z interfejsu Twitter API i zaakceptowa proponowane zapisy.
Po zaakceptowaniu dania wygenerowany zostanie unikatowy klucz API,
klucz konsumenta standardu OAuth oraz klucz tajny konsumenta. Aby
uzyska dostp do tokenu dostpu (oauth_token) i klucza tajnego tokenu
dostpu (oauth_token_secret), naley klikn opcj My Access Token wi-
doczn po lewej stronie. Obie wartoci naley skopiowa i zapisa w bez-
piecznym, odpowiednio chronionym pliku. Obie wartoci bd potrzebne
do komunikacji z nowym kontem na Twitterze z poziomu kodu programu.
Oczywicie naley zadba o zachowanie tych wartoci w cisej tajemnicy!
Nie chcemy przecie, aby jaki zoliwy, pozbawiony skrupuów uytkownik
przej nasz tajny token, wykorzystywa go do wysyania spamu do naszych
przyjació i doprowadza do pasji ca spoeczno uytkowników Twittera.
Skoro dysponujemy ju kontem na Twitterze i poprawnym kluczem interfejsu
API tego serwisu, moemy wykorzysta uzyskane dane uwierzytelniajce
w kodzie aplikacji jzyka Python napisanej dla naszego wierkajcego karm-
nika dla ptaków.
Biblioteka Python-Twitter
Mimo e mamy dostp do Twittera za porednictwem interfejsu API, wci
nie dysponujemy mechanizmem komunikacji z Twitterem z poziomu skryp-
tów jzyka Python. Warto wykorzysta do tego celu rozwizania dostpne
w bibliotece Python-Twitter
12
. Aby zainstalowa obie biblioteki potrzebne
do realizacji tego projektu, czyli Pyserial i Python-Twitter, naley pobra
najnowsze wersje tych bibliotek i uy standardowego polecenia
sudo python
setup.py install
. W przypadku instalowania tych bibliotek w systemie Mac
OS X 10.6 (Snow Leopard) lub nowszym mona skorzysta z ju zainsta-
lowanego narzdzia instalacyjnego Pythona nazwanego
easy_install
. Aby
jednak unikn problemów zwizanych z 64-bitowymi wersjami bibliotek,
odpowiednie polecenie naley poprzedzi flag architektury i386, aby zain-
stalowa bibliotek Python-Twitter bez adnych bdów. Kompletne polece-
nie dla tej biblioteki powinno mie nastpujc posta:
sudo env ARCHFLAGS="-
arch i386" easy_install python-twitter
.
12
http://code.google.com/p/python-twitter/
Rozdzia 5. • wierkajcy karmnik dla ptaków
119
Na tym etapie wszystkie niezbdne konta s skonfigurowane, a biblioteki
— zainstalowane. Moemy wic dokoczy projekt, czyli napisa skrypt jzy-
ka Python odpowiedzialny za nasuchiwanie komunikatów za porednictwem
moduu XBee podczonego do portu szeregowego, zapisywanie tych komu-
nikatów w bazie danych i publikowanie odpowiednich postów na Twitterze.
Spróbujmy wic napisa skrypt Python implementujcy ten zoony proces.
Plik
TweetingBirdFeeder/tweetingbirdfeeder.py
# importuje biblioteki Pythona: DateTime, Serial, SQLite3 i Twitter
from datetime import datetime
import serial
import sqlite3
import twitter
# importuje modu os w celu wyczyszczenia okna terminala i uruchomienia programu
# w systemie Windows naley uy polecenia "cls"; w systemach Linux i OS X naley
uy polecenia "clear"
import os
if sys.platform == "win32":
os.system("cls")
else:
os.system("clear")
# nawizuje poczenie z portem szeregowym; nazw URZ DZENIE_SZEREGOWE naley zastpi
# nazw portu szeregowego, do którego podczono modu XBee (za pomoc przewodu FTDI)
XBeePort = serial.Serial('/dev/tty.URZ DZENIE_SZEREGOWE', \
baudrate = 9600, timeout = 1)
# nawizuje poczenie z baz danych SQLite
sqlconnection = sqlite3.connect("tweetingbirdfeeder.sqlite3")
# tworzy kursor bazy danych
sqlcursor = sqlconnection.cursor()
# inicjalizuje obiekt interfejsu Twitter API
api = twitter.Api('klucz_konsumenta_OAuth', 'klucz_tajny_konsumenta_OAuth', \
'token_dostpu_OAuth', 'klucz_tajny_tokenu_dostpu_OAuth')
def transmit(msg):
# uzyskuje i odpowiednio formatuje biec dat i godzin
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# sprawdza rodzaj komunikatu i przypisuje odpowiednie parametry odpowiedzi
if msg == "przylot":
tweet = "Jaki ptak wyldowa na grzdzie!"
table = "birdfeeding"
if msg == "odlot":
tweet = "Ptak odlecia z grzdy!"
table = "birdfeeding"
if msg == "dosyp":
tweet = "Pojemnik na ziarno dla ptaków jest pusty."
120
5.6. wierkanie w Pythonie
table = "seedstatus"
if msg == "ziarnoWNormie":
tweet = "Ziarno w karmniku zostao uzupenione."
table = "seedstatus"
print "%s - %s" % (timestamp.strftime("%Y-%m-%d %H:%M:%S"), tweet)
# zapisuje odpowiednie zdarzenie w bazie danych SQLite
try:
sqlstatement = "INSERT INTO %s (id, time, event) \
VALUES(NULL, \"%s\", \"%s\")" % (table, timestamp, msg)
sqlcursor.execute(sqlstatement)
sqlconnection.commit()
except:
print "Nie mona zapisa zdarzenia w bazie danych."
pass
# publikuje informacj na Twitterze
try:
status = api.PostUpdate(msg)
except:
print "Nie mona opublikowa postu na Twitterze"
pass
# gówna ptla programu
try:
while 1:
# nasuchuje znaków przychodzcych (wysyanych przez modu radiowy XBee
# zainstalowany w karmniku)
message = XBeePort.readline()
# w zalenoci od rodzaju otrzymanego komunikatu
# rejestruje odpowiednie zdarzenie w bazie danych i publikuje post na Twitterze
if "przylot" in message:
transmit("przylot")
if "odlot" in message:
transmit("odlot")
if "dosyp" in message:
transmit("dosyp")
if "ziarnoWNormie" in message:
transmit("ziarnoWNormie")
except KeyboardInterrupt:
# przerywa program w momencie wykrycia nacinicia kombinacji klawiszy Ctrl+C
print("\nProgram nasuchujcy komunikatów wierkajcego karmnika dla ptaków koczy prac.\n")
sqlcursor.close()
pass
Po zaadowaniu niezbdnych bibliotek
datetime
,
serial
,
sqlite
i
czycimy okno terminala (za pomoc polecenia
cls
w systemie Windows
lub polecenia
clear
w pozostaych systemach operacyjnych) i nawizujemy
poczenie z moduem XBee (poczonym z portem szeregowym kompu-
tera za pomoc przewodu FTDI). Zaraz potem nawizujemy poczenie
Rozdzia 5. • wierkajcy karmnik dla ptaków
121
z utworzonym wczeniej plikiem bazy danych tweetingbirdfeeder.sqlite3 i roz-
poczynamy wykonywanie nieskoczonej ptli
while
do momentu nacini-
cia kombinacji klawiszy Control-C, która powoduje zamknicie programu.
Jeli modu XBee otrzyma i prawidowo rozpozna komunikat, skrypt wywoa
funkcj
def transmit(msg)
, która odpowiada za analiz skadniow zmiennej
msg
, dodanie opisu danego zdarzenia, zapisanie odpowiedniego komunikatu
w bazie danych oraz opublikowanie postu na Twitterze.
Jeli platforma Arduino jest uruchomiona i jeli para moduów XBee nawi-
zaa poczenie i jest zasilana, moemy przetestowa wykrywanie przekra-
czania wartoci progowych, kilkukrotnie dotykajc czujnik grzdy i zasaniajc
fotokomórk, tak aby system wysa kilka sygnaów o tych zdarzeniach. Jeli
w oknie terminala nie zostay wywietlone adne bdy zwizane z wykony-
waniem tego skryptu, warto otworzy plik tweetingbirdfeeder.sqlite3 w oknie
Browse and Search narzdzia SQLite Manager i sprawdzi, czy informacje
o zdarzeniach dotyczcych obu czujników zostay zarejestrowane i oznaczone
odpowiednimi znacznikami czasowymi. Jeli wszystkie te mechanizmy za-
dziaay prawidowo, warto jeszcze zalogowa si na Twitterze (do konta
uywanego do publikowania komunikatów o tych zdarzeniach) i sprawdzi,
czy wszystkie posty zostay opublikowane we waciwej kolejnoci.
Nasz system jest prawie gotowy. Pozostao nam ju tylko kilka usprawnie
elementów sprztowych.
5.7. Ko czenie projektu
Aby zapewni pen funkcjonalno tego projektu, musimy jeszcze zabezpie-
czy niezbdne urzdzenia (w tym przypadku pytk Arduino poczon
z moduem XBee) przed warunkami atmosferycznymi i zainstalowa w karm-
niku dla ptaków, zamontowa fotokomórk blisko podstawy karmnika, wsy-
pa ziarno do karmnika, poczy pytk Arduino i modu XBee ze ródem
zasilania oraz umieci cao na zewntrz budynku, ale w zasigu drugiego
moduu XBee (podczonego do komputera).
Kady, kto nie mieszka w strefie klimatycznej z rzadkimi opadami deszczu,
powinien dobrze zabezpieczy urzdzenia elektryczne przed dziaaniem wody.
W moich testów wynika, e umieszczenie tych elementów elektronicznych
w dwóch szczelnych workach w zupenoci wystarczy do zabezpieczenia pyt-
ki Arduino i moduu XBee przed deszczem. Jeli jednak nie planujemy
zasilania tych komponentów za pomoc 9-woltowej baterii, któr mona by
122
5.7. Ko czenie projektu
umieci wraz z elektronik w workach (takie rozwizanie sprawdzioby si
w przypadku krótkich sesji gromadzenia danych, jednak nasz system bar-
dzo szybko wyczerpaby bateri), musimy doprowadzi do pytki Arduino
przewód zapewniajcy stay dopyw energii.
Aby doprowadzi przewód zasilajcy, wystarczy zrobi niewielki otwór
w workach foliowych, jednak takie rozwizanie narazi cay system na dziaa-
nie wilgoci. Aby zminimalizowa ryzyko zalania elementów elektronicznych,
warto zabezpieczy miejsce czenia worków z przewodem mocno nacignit
foli spoywcz, tak aby szczelnie zamkn worek i zabezpieczy czenie
przed poluzowaniem lub wylizgniciem si wskutek zmieniajcej si pogody.
Stosowanie odpowiednio zabezpieczonego przewodu zasilajcego (na przy-
kad przewodu sprzedawanego z myl o zasilaniu lampek w okresie wit
Boego Narodzenia) bdzie tasze i atwiejsze do testowania. Konstruktorzy
szczególnie dbajcy o rodowisko naturalne mog jednak zainwestowa
nieco wiksze rodki w alternatywne rozwizanie — w technologi energii
odnawialnej w formie fotowoltaicznego systemu zasilania.
Przed zakupem odpowiedniego przenonego systemu zasilania energi so-
neczn warto sprawdzi, czy produkt generuje napicie 5 V, jest odpo-
wiednio wytrzymay i zawiera wbudowany akumulator, który bdzie groma-
dzi energi. Dobrym przykadem stosunkowo niedrogich rozwiza tego
typu s zasilacze z serii Solio Bolt
13
.
Czytelnicy, którzy wol systemy fotowoltaiczne zawierajce akumulatory
o wikszych pojemnociach, musz by przygotowani na nieco wiksze koszty.
Takie firmy jak Sunforce Products maj w ofercie rozmaite rozwizania pod-
trzymujce napicie, ukady adowania akumulatorów i sterowniki projek-
towane z myl o wikszym obcieniu
14
.
Panel soneczny naley zamontowa w odpowiedniej odlegoci od karmnika,
tak aby by wystawiony na promienie soneczne. Jeli to moliwe, panel naley
zamontowa pod ktem dziewidziesiciu stopni do promieni sonecznych,
aby uzyska jak najwicej energii. W zalenoci od strefy klimatycznej i red-
niego poziomu nasonecznienia by moe trzeba bdzie poszuka alternatyw-
nych lub uzupeniajcych rozwiza, jak adowarka zasilana przez turbin
wiatrow lub nawet dynamo napdzane si mini.
13
http://www.solio.com/chargers/
14
http://www.sunforceproducts.com/results.php?CAT_ID=1
Rozdzia 5. • wierkajcy karmnik dla ptaków
123
W ramach tego projektu udao nam si osign cakiem sporo zupenie no-
wych celów — od zastosowania fotokomórki i wasnorcznie zbudowanego
czujnika pojemnociowego, przez opanowanie sztuki czenia w pary modu-
ów XBee i nawizywania komunikacji bezprzewodowej midzy nimi, po
napisanie skryptu rejestrujcego dane w ustrukturyzowanej bazie danych,
reagujcego na zdarzenia i publikujcego posty na Twitterze za porednic-
twem interfejsu API tego serwisu. Zastosowalimy take autonomiczny sys-
tem zasilania pytki Arduino i moduu XBee oraz zabezpieczylimy te wra-
liwe komponenty elektroniczne przed szkodliwym dziaaniem warunków
atmosferycznych.
Te cenne lekcje z pewnoci wykorzystamy przynajmniej w projektach
realizowanych w czci pozostaych rozdziaów.
5.8. Nastpne kroki
Czujnik pojemnociowy i fotokomórk mona wykorzysta w najróniejszych
projektach automatyzacji domu. Poniej opisaem zaledwie kilka pomysów,
które warto rozway:
Pytk Arduino z podczonymi fotokomórk i moduem XBee mona
umieci (wraz z bateriami) w lodówce lub zamraarce, aby wykry-
wa, jak czsto i jak dugo drzwi lodówki s otwarte. Na podstawie
zgromadzonych danych mona obliczy energi tracon w poszczegól-
nych miesicach w zwizku ze zbyt czstym zagldaniem do lodówki.
W razie stwierdzenia, e koszty traconej w ten sposób energii s zbyt
wysokie, system moe wysa wiadomoci poczty elektronicznej lub
powiadomienia na Twitterze przypominajce domownikom o gazach
cieplarnianych i globalnym ociepleniu.
Jeli uznamy, e szukanie wcznika wiata w ciemnociach jest zbyt
kopotliwe, by moe powinnimy zastosowa czujnik pojemnociowy
z folii aluminiowej i zainstalowa ten „wcznik” na cianie przy
wejciu do piwnicy lub garau bd na poziomej powierzchni stou
na wprost wejcia.
Na podstawie wartoci analogowych odczytywanych z fotokomórki
mona mierzy cykle dni i nocy oraz poziom nasonecznienia, aby
w ten sposób zgromadzi dane przydatne na przykad w ogrodnictwie.
124
5.8. Nastpne kroki
Czy sadzenie okrelonych gatunków kwiatów, owoców lub warzyw
w odpowiednio wybranym okresie pozwoli przyspieszy lub opó ni
wzrost rolin? Jak dugo roliny byy wystawione na pene soce,
a przez ile dni niebo byo zachmurzone?
Oprócz wymienionych pomysów istnieje jeszcze mnóstwo sposobów ana-
lizowania danych gromadzonych na podstawie zdarze dotyczcych na-
szego karmnika dla ptaków. Moemy uy biblioteki jzyka Python gene-
rujcej wykresy (na przykad CairoPlot) do wizualizacji redniego czasu
przebywania ptaka w karmniku
15
. Ile czasu zajo ptakom zjedzenie caego
ziarna? Jaki wpyw na godziny przylotów i czas przebywania w karmniku
miaa pogoda na zewntrz? Czy zmiana rodzaju ziarna wpyna na czas
przebywania ptaków w karmniku i czstotliwo przylotów?
Warto rozway udostpnienie wpisów na Twitterze innym entuzjastom pta-
ków, aby zbudowa szerok sie spoecznociow uytkowników czytajcych
i przekazujcych dalej dane generowane przez nasz karmnik. By moe wzor-
ce zaobserwowane w jednym karmniku bd nieco inne ni w przypadku
karmników zamontowanych na innych obszarach geograficznych — znajomi
z serwisu spoecznociowego by moe bd zainteresowani wspóln ana-
liz trendów dotyczcych populacji ptaków, cykli migracyjnych i pozostaych
czynników wpywajcych na zachowania naszych upierzonych przyjació.
15
http://cairoplot.sourceforge.net/
Skorowidz
A
ADK, 41, 195, 257
IOIO, 41
adres IP, Patrz IP
aktywacja dwucewkowa, 180
Android, 27, 40, 162
ADK, 41, 257
Google@Home, 258
Android@Home, 40, 257
ADK, 195
aparat, 214
konfiguracja, 214
podgld zdjcia, 214
aplikacja kliencka, 220
kod, 221
konfiguracja, 222
testowanie, 224
uprawnienia dostpu, 224
zabezpieczenia, 221
AVD, 163
bezprzewodowe otwieranie drzwi,
195
aplikacja kliencka, 220
poczenia, 198
serwer WWW, 207
sterowanie, 202
Development Tools Eclipse, 164
Eclipse, 163
intencja, 208
interfejs API, 258
IOIO, 41
kod serwera, 207
konfiguracja urzdzenia, 210
okno dialogowe nowego projektu,
164
Open Accessory Development Kit,
Patrz ADK
SDK, 41, 163
serwer WWW, 211
testowanie, 219
tworzenie, 211
statyczny adres IP, 209
testowanie, 211
tryb diagnostyczny, 206
284
Inteligentny dom
Android
uprawnienia dostpu, 218
wiadomoci e-mail, 216
doczanie grafiki, 216
X10, 167
AppleScript, 240
Editor, 240
syntezator mowy, 242
testowanie, 249
Arduino, 31, 33, 37, 42
1.0, 256
ATMega 168/328, 42
biblioteki, 277
instalacja, 277
czujnik nacisku, 130
czujnik pojemnociowy, 99, 100
czujnik ugicia, 53
czenie, 55
Ethernet, 54
fotokomórka, 103
Fritzing, 31
IDE, 57, 69, 257
Adapter USB, 155
LED Blink, 57
Linux, 69
Serial Monitor, 62
Upload, 62
Verify, 62
Inkscape, 31
Integrated Development
Environment, Patrz IDE
konfiguracja, 57
mechanizm przesyania polece, 269
modu
d wikowy, 82
MP3, 81
sieciowy, 67
Nano, 95, 97
silnik krokowy, 173
czenie, 188
szkic, 42
struktura, 42
TDD, 33
Uno Ethernet, 54
wiadomoci e-mail, 64
hosting, 64
serwer poczty SMTP, 64
wirtualny emulator, 43
wysyanie komunikatu, 70
XBee, 43, 106, 130
zabezpieczanie powiadomie, 66
zasilanie, 122
Audacity, 84
automatyzacja domu, 25, 260
„zrób to sam”, 27
analiza inwestycji, 28
Android, 27
protokó komunikacji, 26
standaryzacja, 26
TCP/IP, 27
wysyania impulsów, 26
warsztat, 30
automatyczna zasona, 173
budowa rozwizania, 177
czci systemu, 175
czujnik temperatury, 181
warto progowa, 186
czujniki, 176
doczanie, 181
instalacji, 187
fotokomórka, 177
warto progowa, 185
instalacja sprztu, 187
lista komponentów, 174
Skorowidz
285
schemat pocze, 182
silnik krokowy
instalacja, 188
kalibracja, 188
programowanie, 179
sposób czenia, 179
szkic, 180, 182
testowanie, 186
wygld systemu, 189
B
baza danych, 114
Debian, 114
packagedelivery, 135
deliverystatus, 136
tracking, 136
SQLite, 114, 134
sqlite3, 114, 135
tweetingbirdfeeder, 115
birdfeeding, 115
seedstatus, 115
tworzenie, 114
bezprzewodowe otwieranie drzwi, 194
Android, 195
aplikacja kliencka, 220
poczenia, 198
serwer WWW, 207
budowa rozwizania, 197
IOIO, 195
instalacja systemu, 226
lista komponentów, 195
PowerSwitch Tail II, 194
przecznik przeka nikowy, 194
rozbudowa, 226
Perfect Paper Passwords, 227
schemat pocze, 201
serwer WWW, 207
testowanie, 219
testowanie systemu, 225
biblioteka
AF_Wave, 85
AFMotor, 177, 179
android.net.wifi.WifiManager, 223
android.widget.Button, 223
Arduino Ethernet, 67
CairoPlot, 124
Capacitive Sensing, 100
datetime, 120
Ethernet, 70
interfejsu SPI, 67
IOIOLib, 202
java.io.InputStream, 165, 223
java.net.URL, 165, 223
MediaPlayer, 85, 86
os, 142
packagetrack, 137, 142
Pyserial, 114, 118
Python-Twitter, 114, 118
serial, 120, 142
Servo, 86
ServoTimer2, 86
smtplib, 142
sqlite, 120
sqlite3, 142
suds, 138
sys, 142
time, 142
twitter, 120
wavehc, 85
Bluetooth, 232, 234
nawizywanie poczenia, 233
286
Inteligentny dom
C
czujnik
dymu, 271
nacisku, 126
Arduino, 130
czenie, 130
odlegoci, 268
pojemnociowy, 99
Arduino, 99
budowa, 99
sposób podczenia, 99
zastosowania, 123
ruchu, 269
temperatury, 181
warto progowa, 186
ugicia, 53
Arduino, 53
montowanie, 72
próg generowania zdarzenia, 58
rozbudowa, 74
szkic, 58
tolerancja, 58
wiadomo e-mail, 64
wykorzystanie, 74
wilgotnoci, 270
D
DIY, 40
Django, 65
E
Eclipse, 163
Electric Sheep, 199
Elektor Electronic Toolbox, 32
elektryczny pies stróujcy, 77, 81
budowa rozwizania, 80
lista elementów, 79
monta, 90
PIR, 82
próbki d wików, 83
rozbudowa, 91
schemat pocze, 82
szkic, 85
testowanie, 89
F
fotokomórka, 102, 177
Adruino, 103
schemat pocze, 103
silnik krokowy, 181
warto bazowa, 105
warto progowa, 185
zastosowania, 123
fotowoltaniczny system zasilania, 122
Freemind, 31
Fritzing, 31
G
Gmail, 135
Google@Home, 258
H
Heyu, 150
kod ródowy, 156
x10.conf, 156
Hyperterminal, 107
Skorowidz
287
I
iCircuit, 32
IDE, 42, 57, 69, 257
Inkscape, 31
internetowy wcznik wiata, 149
Android, 162
testowanie, 167
biecy stan wiata, 162
budowa rozwizania, 153
kod klienta, 158, 162
testowanie, 161, 167
lista komponentów, 151
czenie, 154
rozbudowa, 170
Ruby on Rails, 158
X10, 150
CM11A, 155
IOIO, 195, 199
ADK, 41
IOIOLib, 202
schemat pocze, 201
serwer WWW, 212
IP, 68, 209
przypisanie staego adresu, 68
iPad, 32
Elektor Electronic Toolbox, 32
iCircuit, 32
iThoughts HD, 32
miniDraw, 32
K
karmnik dla ptaków, 93
Arduino Nano, 95, 97
budowa rozwizania, 98
czci systemu, 96
czujnik pojemnociowy, 98
budowa, 99
programowanie, 99
fotokomórka, 102
konfiguracja bazy danych, 114
lista komponentów, 95
nasuchiwanie komunikatów, 119
publikowanie wpisów, 113
schemat pocze, 108
szkic, 109
Twitter, 94
XBee, 95
zabezpieczenie urzdze, 121
zasilanie, 122
fotowoltaniczne, 122
klucz
API, 118
konsumenta standardu OAuth,
118
tajnego tokenu dostpu, 118
tajny konsumenta, 118
kompilator, 156
komunikacja bezprzewodowa, 106
Bluetooth, 234
Wi-Fi, 106
XBee, 43, 106
krok, 178
M
MAC, 68
metodyka wytwarzania sterowanego
testami, Patrz TTD
Minicom, 107
miniDraw, 32
288
Inteligentny dom
modu
d wikowy, 78
AF_Wave, 85
Arduino, 82
czenie, 82
próbki d wików, 83
szkic demonstracyjny, 85
zarzdzanie odtwarzaniem, 86
parowanie, 44
sieciowy, 67, 70
Arduino, 67
kodowanie, 67
przypisanie adresu, 68
stay adres IP, 68
multimetr, 34
O
open source, 31
Freemind, 31
Fritzing, 31
Heyu, 150
Inkscape, 31
P
parowanie moduów, 44
pasywny czujnik ruchu na
podczerwie, Patrz PIR
Perfect Paper Passwords, 227
PHP, 64, 65
hosting, 64
mail, 66
wiadomoci e-mail, 65
pin, Patrz wtyk
PIR, 77
instalacja, 90
czenie, 82
monitorowanie, 85
zasada dziaania, 84
pytki mikrokontrolerów, 37
Arduino, 37
pojemno elektryczna, 99
PowerSwitch Tail II, 194
powiadamianie o zdarzeniach, 230
konfiguracja goników, 231
Bluetooth, 232
nawizywanie poczenia, 233
lista komponentów, 231
mechanizm rozpoznawania mowy,
234
konfiguracja, 234
wczanie mówionych
komunikatów, 235
wybór gosu, 237
rozbudowa, 250
syntezator mowy, 237, 240
kod, 242
testowanie, 249
TTS, 230
wewntrzny mikrofon, 238
kalibracja, 239
protokó komunikacji, 26
SOAP, 138
standaryzacja, 26
TCP/IP, 27
wysyania impulsów, 26
przecznik przeka nikowy, 194
Python, 33, 45
easy_install, 118
identyfikacja XBee, 143
implementacja dostarczania paczek,
139
testowanie skryptu, 144
Skorowidz
289
implementacja procesów karmnika,
113, 119
nasuchiwanie komunikatów, 119
os, 142
packagetrack, 137, 142
przetwarzanie komunikatów, 134
publikowanie wpisów, 113
Pyserial, 114, 118
python-fedex, 138
Python-Twitter, 114, 118
serial, 142
smtplib, 142
SQLite, 114
sqlite3, 142
suds, 138
sys, 142
testy jednostkowe, 33
time, 142
R
realizacja projektów, 37
Android, 40
Arduino, 42
bezpieczestwo, 47
elementy elektroniczne, 39
oprogramowanie, 38, 45
urzdzenia wykonawcze, 38
XBee, 43
Ruby on Rails, 33, 65, 158
konfiguracja, 161
RSpec, 33
S
screen, 107, 134
Serial Monitor, 62
serwer WWW, 207
Android, 211
IOIO, 212
testowanie, 219
serwomotor, 78
moment obrotowy, 91
sterowanie, 86
silnik krokowy, 173
aktywacja dwucewkowa, 180
Arduino, 173
czenie, 188
fotokomórka, 181
kalibracja, 188
koo pasowe, 176
instalacja, 188
krok, 178
liczba obrotów, 189
modu silnika, 190
programowanie, 179
sposób czenia, 179
zasada dziaania, 178
zastosowania, 190
Simple Object Access Protocol,
Patrz protokó SOAP
Siri, 259
SQLite, 114
Manager, 116
Browse and Search, 121
sqlite3, 114, 135
standard uwierzytelniania OAuth,
117
system powiadamiania o poziomie
wody, 51
Arduino, 55
konfiguracja, 57
budowa rozwizania, 55
czujnik ugicia, 53, 55
diagram pocze, 56
290
Inteligentny dom
system powiadamiania o poziomie wody
lista komponentów, 53
czenie, 55, 71
modu sieciowy, 67
kodowanie, 67
czenie, 67
rozbudowa, 74
spawik, 56
szkic, 56
testowanie, 63, 71
tworzenie, 58
uruchamianie, 62
wiadomoci e-mail, 64
szkic, 42, 56
#include, 42
automatyczna zasona, 182
testowanie, 186
czujnik nacisku, 131, 132
testowanie, 133
warto progowa, 134
czujnik pojemnociowy, 100
doczanie bibliotek, 68
fotokomórka, 103
IDE, 42
modu sieciowy, 67
testowanie, 71
wysyanie komunikatu, 70
monitorowanie czujnika PIR, 85
gówna ptla, 87
testowanie, 89
silnik krokowy, 180
struktura, 42
ugicie czujnika, 58
konfiguracja portu szeregowego,
59
próg generowania zdarzenia, 58
testowanie, 63
tolerancja, 58
uruchamianie, 62
wiadomoci e-mail, 64
hosting, 64
serwer poczty SMTP, 64
T
TDD, 33
testy jednostkowe, 33
py.test, 33
token dostpu, 118
TTS, 230
Twitter, 93
dane uwierzytelniajce, 117
klucze, 118
nowe konto, 117
publikacja wpisu, 117
Python, 113
U
urzdzenia wykonawcze, 38
V
VPS, 65
W
warsztat, 30
pomieszczenie, 30
wyposaenie, 30
wiadomoci e-mail, 64
Arduino, 64
czujnik ugicia, 64
PHP, 64, 65
serwer poczty SMTP, 64
Skorowidz
291
wirtualne serwery prywatne,
Patrz VPE
wtyk, 42
wykrywacz dostarczania paczek, 125,
131
budowa rozwizania, 128
czci systemu, 127
czujnik nacisku, 126
instalacja systemu, 145
lista komponentów, 127
czenie sprztu, 129
rozbudowa, 146
schemat pocze, 130
testowanie skryptu, 144
testowanie szkicu, 133
X
X10, 150
AM486 Appliance, 157
Android, 167
CM11A, 152, 155
adapter USB, 154
Arduino, 154
interfejs, 154
monitorowanie komunikacji, 157
podczanie, 154
Firecracker, 152
Heyu, 150
modu sterownika, 152
problemy, 158
protokó, 158
zasada dziaania, 153
x10.conf, 156
XBee, 43
Arduino, 43, 106, 130
komunikacja radiowa, 43
moliwoci, 106
nadajnik radiowy, 95
parowanie moduów, 44
schemat czenia, 106