Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00418 007294 14239787 na godz. na dobę w sumie
Czujniki dla początkujących. Poznaj otaczający Cię świat za pomocą elektroniki, Arduino i Raspberry Pi - ebook/pdf
Czujniki dla początkujących. Poznaj otaczający Cię świat za pomocą elektroniki, Arduino i Raspberry Pi - ebook/pdf
Autor: , Liczba stron: 128
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-0368-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> hardware >> raspberry pi
Porównaj ceny (książka, ebook, audiobook).

Zdobądź informacje na temat świata zewnętrznego!

Arduino oraz Raspberry Pi to płytki, które sprawiły, że świat elektroniki stał się dostępny dla wszystkich. Z ich pomocą każdy amator może sprawnie zrealizować projekt, o którym marzył od zawsze. Fantastyczne możliwości oraz łatwość, z jaką można je wykorzystać, przyczyniły się do ich ogromnej popularności. Jeżeli jednak chcesz zbudować bardziej wyrafinowany układ, będziesz potrzebować informacji o świecie zewnętrznym. Dostarczą Ci ich czujniki!

Jeżeli chcesz zorientować się, jak szeroki wachlarz czujników dostępny jest dla Raspberry Pi oraz Arduino, trafiłeś na doskonałą książkę. Znajdziesz w niej bogato ilustrowane opisy zastosowania przeróżnych sensorów. Pomiar obrotu, jasności światła, temperatury oraz odległości to tylko niektóre z opcji. Z kolejnych rozdziałów dowiesz się, jak wykorzystać przycisk monostabilny oraz zbudować urządzenie regulowane czujnikiem podczerwieni. Książka ta jest znakomitym źródłem informacji dla pasjonatów chcących tworzyć zaawansowane projekty z użyciem dostępnych na rynku czujników.

Dzięki tej książce:

Zbuduj wymarzony układ, reagujący na dane ze środowiska zewnętrznego!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Getting Started with Sensors Tłumaczenie: Krzysztof Brauner ISBN: 978-83-283-0365-2 © 2015 Helion S.A. Authorized Polish translation of the English edition of Getting Started with Sensors, ISBN 9781449367084 © 2014 Tero Karvinen, Kimmo Karvinen, published by Maker Media Inc. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. 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. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą 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) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/czujpo Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci Wst(cid:218)p ..........................................................................................................................7 1. Czujniki ............................................................................................................................. 11 Projekt 1. Pomiar jasno(cid:258)ci (cid:258)wiat(cid:239)a za pomoc(cid:200) fotorezystora ..............................................................13 Elementy .....................................................................................................................................13 Budowa .......................................................................................................................................14 Analiza: fotorezystory ..................................................................................................................15 Bezpo(cid:258)rednie sterowanie czujnikami ............................................................................................16 Co dalej? .....................................................................................................................................16 2. Podstawowe czujniki ....................................................................................................... 19 Projekt 2. Prosty prze(cid:239)(cid:200)cznik ..............................................................................................................19 Elementy .....................................................................................................................................20 Budowa .......................................................................................................................................20 Rozwi(cid:200)zywanie problemów .........................................................................................................21 Dioda LED wymaga pod(cid:239)(cid:200)czenia rezystora ...................................................................................22 Projekt 3. Regulacja g(cid:239)o(cid:258)no(cid:258)ci brz(cid:218)czyka ...........................................................................................22 Elementy .....................................................................................................................................23 Budowa .......................................................................................................................................23 Rozwi(cid:200)zywanie problemów .........................................................................................................24 Projekt 4. Efekt Halla ..........................................................................................................................24 Elementy .....................................................................................................................................24 Budowa .......................................................................................................................................25 Rozwi(cid:200)zywanie problemów .........................................................................................................26 3 Kup książkęPoleć książkę Projekt 5. Robaczek (cid:258)wi(cid:218)toja(cid:241)ski .......................................................................................................26 Uk(cid:239)ady scalone ............................................................................................................................26 Uk(cid:239)ad czasowy 555 .....................................................................................................................27 W(cid:239)(cid:200)czenie diody LED, gdy jest jasno ...........................................................................................28 (cid:165)wiat(cid:239)o w mroku .........................................................................................................................29 Elementy .....................................................................................................................................29 Budowa .......................................................................................................................................30 Tranzystory .................................................................................................................................30 Wzmacniacz ze wspólnym emiterem ...........................................................................................31 Sterowanie jasno(cid:258)ci(cid:200) (cid:258)wiecenia diody LED ..................................................................................32 Pulsuj(cid:200)ca dioda LED z wykorzystaniem uk(cid:239)adu 555 .....................................................................33 Kondensatory ..............................................................................................................................35 Robaczek (cid:258)wi(cid:218)toja(cid:241)ski ................................................................................................................36 Rozwi(cid:200)zywanie problemów .........................................................................................................37 Co dalej? .....................................................................................................................................37 3. Czujniki i Arduino ............................................................................................................. 39 Projekt 6. Przycisk monostabilny i rezystor podci(cid:200)gaj(cid:200)cy ...................................................................40 Elementy .....................................................................................................................................40 Budowa .......................................................................................................................................41 Uruchom kod ..............................................................................................................................41 Projekt 7. Wykrywanie przedmiotów za pomoc(cid:200) czujnika zbli(cid:285)eniowego na podczerwie(cid:241) ...................45 Elementy .....................................................................................................................................46 Budowa .......................................................................................................................................47 Uruchom kod ..............................................................................................................................47 Projekt 8. Pomiar obrotu z wykorzystaniem potencjometru ................................................................48 Elementy .....................................................................................................................................50 Budowa .......................................................................................................................................50 Uruchom kod ..............................................................................................................................50 Projekt 9. Pomiar jasno(cid:258)ci (cid:258)wiat(cid:239)a za pomoc(cid:200) fotorezystora ..............................................................51 Elementy .....................................................................................................................................52 Budowa .......................................................................................................................................52 Uruchom kod ..............................................................................................................................53 Projekt 10. Pomiar si(cid:239)y nacisku za pomoc(cid:200) czujnika FlexiForce ..........................................................53 Elementy .....................................................................................................................................54 Budowa .......................................................................................................................................54 Uruchom kod ..............................................................................................................................56 Projekt 11. Pomiar temperatury — czujnik LM35 ...............................................................................57 Elementy .....................................................................................................................................57 Budowa .......................................................................................................................................57 Uruchom kod ..............................................................................................................................58 4 Spis tre(cid:258)ci Kup książkęPoleć książkę Projekt 12. Pomiar odleg(cid:239)o(cid:258)ci za pomoc(cid:200) czujnika ultrad(cid:283)wi(cid:218)kowego HC-SR04 .................................60 Elementy .....................................................................................................................................60 Budowa .......................................................................................................................................60 Uruchom kod ..............................................................................................................................61 Podsumowanie ..................................................................................................................................63 4. Czujniki i Raspberry Pi ..................................................................................................... 65 Projekt 13. Przycisk monostabilny .....................................................................................................66 Elementy .....................................................................................................................................66 Budowa .......................................................................................................................................67 Uruchom kod ..............................................................................................................................68 Rozwi(cid:200)zywanie problemów .........................................................................................................69 Witaj w (cid:258)wiecie Pythona ....................................................................................................................70 Projekt 14. Migaj(cid:200)ca dioda LED .........................................................................................................70 Elementy .....................................................................................................................................71 Budowa .......................................................................................................................................71 Uruchom kod ..............................................................................................................................71 Projekt 15. Regulowany czujnik na podczerwie(cid:241) ................................................................................74 Elementy .....................................................................................................................................74 Budowa projektu regulowanego czujnika na podczerwie(cid:241) ............................................................74 Uruchom kod ..............................................................................................................................75 Dzielnik napi(cid:218)cia ..........................................................................................................................76 Analogowe czujniki rezystancyjne ......................................................................................................77 Projekt 16. Pomiar obrotu z wykorzystaniem potencjometru ..............................................................77 Elementy .....................................................................................................................................78 Budowa .......................................................................................................................................78 Zainstaluj bibliotek(cid:218) SpiDev .........................................................................................................79 Zezwól na korzystanie ze SPI bez uprawnie(cid:241) root .........................................................................79 Uruchom kod ..............................................................................................................................80 Odczyt ci(cid:200)g(cid:239)y ...............................................................................................................................80 Dlaczego potencjometr ma trzy wyprowadzenia? .........................................................................81 Projekt 17. Fotorezystor .....................................................................................................................82 Elementy .....................................................................................................................................82 Budowa .......................................................................................................................................82 Uruchom kod ..............................................................................................................................82 Zabawa z liczbami .......................................................................................................................83 Projekt 18. Czujnik FlexiForce .............................................................................................................84 Elementy .....................................................................................................................................84 Budowa .......................................................................................................................................84 Uruchom kod ..............................................................................................................................85 Spis tre(cid:258)ci 5 Kup książkęPoleć książkę Projekt 19. Pomiar temperatury z wykorzystaniem czujnika LM35 ...................................................85 Elementy .....................................................................................................................................85 Budowa .......................................................................................................................................86 Uruchom kod ..............................................................................................................................86 Projekt 20. Ultrad(cid:283)wi(cid:218)kowy czujnik odleg(cid:239)o(cid:258)ci ....................................................................................88 Elementy .....................................................................................................................................88 Budowa .......................................................................................................................................89 Uruchom kod ..............................................................................................................................89 Szybko czy w czasie rzeczywistym? ...........................................................................................91 A Sposoby rozwi(cid:200)zywania problemów ............................................................................... 93 B Konfigurowanie Arduino IDE ........................................................................................... 95 C Konfigurowanie Raspberry Pi ........................................................................................ 199 D Spis elementów ............................................................................................................. 115 Skorowidz ............................................................................................................................ 121 O autorach ............................................................................................................................ 125 6 Spis tre(cid:258)ci Kup książkęPoleć książkę Czujniki i Arduino 3 W tym rozdziale opiszemy, w jaki sposób do dokonywania pomiarów wykorzysta(cid:202) Arduino — popularn(cid:200) platform(cid:218) programistyczn(cid:200), której sercem jest mikrokontroler AVR. Korzysta- nie z Arduino, w porównaniu do uk(cid:239)adów budowanych za pomoc(cid:200) poszczególnych ele- mentów (tak jak to przedstawiono w rozdziale 2.), ma wiele zalet. Jedn(cid:200) z najwi(cid:218)kszych jest oszcz(cid:218)dno(cid:258)(cid:202) czasu wynikaj(cid:200)ca z braku konieczno(cid:258)ci budowania skomplikowanych ob- wodów do przetwarzania danych pochodz(cid:200)cych z czujników (rysunek 3.1). Rysunek 3.1. Nasz uk(cid:239)ad Arduino, p(cid:239)ytka stykowa i laptop Uk(cid:239)ad Arduino uruchamia szkice (ang. sketch). To poj(cid:218)cie oznacza programy, które po napisaniu przesy(cid:239)a si(cid:218) ze swojego komputera do Arduino. Musisz oczywi(cid:258)cie napisa(cid:202) kilka linii kodu, ale znacznie szybciej jest utworzy(cid:202) p(cid:218)tl(cid:218) warunkow(cid:200), ni(cid:285) zaprojektowa(cid:202) j(cid:200) za pomoc(cid:200) elementów elektronicznych — w ka(cid:285)dym razie dla wi(cid:218)kszo(cid:258)ci z nas. 39 Kup książkęPoleć książkę Tak(cid:285)e modyfikacja kodu wydaje si(cid:218) zadaniem prostszym ni(cid:285) modyfikacja ca(cid:239)ego uk(cid:239)adu. Za(cid:239)ó(cid:285)my, (cid:285)e chcesz doda(cid:202) do swojego uk(cid:239)adu opó(cid:283)nienie, z jakim czujnik dokonywa(cid:239) b(cid:218)dzie kolejnych pomiarów. Móg(cid:239)by(cid:258) tego dokona(cid:202), (cid:239)(cid:200)- cz(cid:200)c z sob(cid:200) kilka kondensatorów, ale uzyskanie odpowiedniej warto(cid:258)ci opó(cid:283)nienia wymaga pewnych prze- my(cid:258)le(cid:241) i oblicze(cid:241). Znacznie prostsze jest utworzenie prostego uk(cid:239)adu na Arduino i skorzystanie z funkcji delay(), która s(cid:239)u(cid:285)y w(cid:239)a(cid:258)nie do generowania opó(cid:283)nienia. Szybciej napiszesz kilka linii kodu i za(cid:239)adujesz program do Arduino, ni(cid:285) znajdziesz odpowiednie elementy i zmodyfikujesz uk(cid:239)ad. Na przyk(cid:239)ad: delay(1000); // opó(cid:296)nia wykonanie kolejnej instrukcji o 1000 milisekund (1 sekund(cid:266)) Je(cid:258)li jeszcze nigdy w (cid:285)yciu nie programowa(cid:239)e(cid:258), nie przejmuj si(cid:218). Podstawy zrozumiesz w mig, a im bardziej b(cid:218)dziesz dopracowywa(cid:239) swój kod, tym wi(cid:218)cej si(cid:218) nauczysz. Tworzenie szkiców otworzy przed Tob(cid:200) ca(cid:239)e pole mo(cid:285)liwo(cid:258)ci, je(cid:258)li chodzi o uk(cid:239)ady elektroniczne. Najwy(cid:285)sza pora co(cid:258) zbudowa(cid:202)! Je(cid:258)li po raz pierwszy korzystasz z Arduino, zapoznaj si(cid:218) z dodatkiem B — dowiesz si(cid:218) stamt(cid:200)d, w jaki spo- sób zainstalowa(cid:202) potrzebne do pracy sterowniki i zintegrowane (cid:258)rodowisko programistyczne (IDE). Dobrym pomys(cid:239)em jest tak(cid:285)e uruchomienie prostego programu (w rodzaju „Hello, world”) w celu przetestowania Twojego uk(cid:239)adu. Tak d(cid:286)ugo, jak u(cid:344)ywasz czujników i innych elementów elektronicznych zgodnie z ich specyfikacj(cid:226), korzystanie z Arduino i innych uk(cid:286)adów opartych na mikrokontrole- rach upro(cid:311)ci i zwi(cid:246)kszy elastyczno(cid:311)(cid:228) Twoich projektów. Jednak(cid:344)e u(cid:344)ycie ich nie- zgodnie ze specyfikacj(cid:226) — np. zasilenie diody LED zbyt du(cid:344)ym napi(cid:246)ciem — mo(cid:344)e doprowadzi(cid:228) do ich uszkodzenia, a nawet uszkodzenia Twojego uk(cid:286)adu Arduino. Projekt 6. Przycisk monostabilny1 i rezystor podci(cid:200)gaj(cid:200)cy Przyciski nie s(cid:200) mo(cid:285)e najbardziej wyrafinowanymi elementami, ale z ca(cid:239)(cid:200) pewno(cid:258)ci(cid:200) nale(cid:285)(cid:200) do grupy naj- cz(cid:218)(cid:258)ciej u(cid:285)ywanych czujników. W odró(cid:285)nieniu od wielu sposobów pod(cid:239)(cid:200)czenia przycisku do uk(cid:239)adu Arduino w tym projekcie nie jest wymagane wykorzystanie rezystora pomocniczego. A to z tego powodu, (cid:285)e u(cid:285)y- wasz rezystorów podci(cid:200)gaj(cid:200)cych (ang. pull-up) wbudowanych w uk(cid:239)ad wej(cid:258)cia – wyj(cid:258)cia ogólnego przeznaczenia (GPIO), które mog(cid:200) zosta(cid:202) w(cid:239)(cid:200)czone za pomoc(cid:200) jednej linii kodu. Chyba wi(cid:218)kszej kontroli nad sprz(cid:218)tem z poziomu oprogramowania nie mo(cid:285)na sobie wyobrazi(cid:202). Elementy Do tego projektu b(cid:218)dziesz potrzebowa(cid:239) nast(cid:218)puj(cid:200)cych elementów: (cid:120) przycisku monostabilnego (mikrostyku); (cid:120) Arduino Uno; (cid:120) kabelków po(cid:239)(cid:200)czeniowych; (cid:120) p(cid:239)ytki stykowej. 1 Inna nazwa to prze(cid:239)(cid:200)cznik chwilowy — przyp. t(cid:239)um. 40 3. Czujniki i Arduino Kup książkęPoleć książkę Budowa Oto poszczególne kroki budowy projektu: 1. Ustaw poziomo p(cid:239)ytk(cid:218) stykow(cid:200) — tak jak pokazano na rysunku 3.2. Rysunek 3.2. Przycisk monostabilny pod(cid:239)(cid:200)czony do Arduino Uno 2. Umie(cid:258)(cid:202) przycisk w dowolnym miejscu na p(cid:239)ytce stykowej. 3. Pod(cid:239)(cid:200)cz kabelek do tej samej kolumny na p(cid:239)ytce stykowej, w której znajduje si(cid:218) wyprowadzenie przyci- sku, a drugi koniec kabelka pod(cid:239)(cid:200)cz do wyprowadzenia oznaczonego GND na p(cid:239)ytce Arduino. 4. Drugi kabelek podepnij w tym samym rz(cid:218)dzie co kabelek pierwszy, ale w kolumnie, w której znajduje si(cid:218) druga para wyprowadze(cid:241) przycisku. Drugi koniec kabelka podepnij do wyprowadzenia 2 na p(cid:239)ytce Arduino. Uruchom kod Po po(cid:239)(cid:200)czeniu wszystkich potrzebnych elementów uruchom kod z listingu 3.1. Po naci(cid:258)ni(cid:218)ciu przycisku za- (cid:258)wieci si(cid:218) wbudowana w Arduino dioda LED. Listing 3.1. Szkic Arduino do wykrywania naci(cid:258)ni(cid:218)cia przycisku // button.ino — zapalenie diody LED poprzez naci(cid:286)ni(cid:266)cie przycisku // (c) BotBook.com — Karvinen, Karvinen, Valtokari int buttonPin=2; // int ledPin=13; // int buttonStatus=LOW; // void setup() // { pinMode(ledPin, OUTPUT); // pinMode(buttonPin, INPUT); // digitalWrite(buttonPin, HIGH); // wewn(cid:266)trzny rezystor podci(cid:261)gaj(cid:261)cy // } void loop() // { buttonStatus=digitalRead(buttonPin); // if (LOW==buttonStatus) { // digitalWrite(ledPin, HIGH); // } else { // Projekt 6. Przycisk monostabilny i rezystor podci(cid:200)gaj(cid:200)cy 41 Kup książkęPoleć książkę digitalWrite(ledPin, LOW); // } } // Zainicjalizowanie kilku zmiennych. Od tego miejsca gdy pos(cid:239)u(cid:285)ysz si(cid:218) zmienn(cid:200) buttonPin, Arduino wstawi w jej miejsce liczb(cid:218) 2. Zmienne sprawiaj(cid:200), (cid:285)e kod jest znacznie czytelniejszy i prostszy w edycji, poniewa(cid:285) wystarczy dokona(cid:202) zmiany tylko w jednym miejscu. Wszystkie zmienne w tym szkicu s(cid:200) zmienny- mi typu ca(cid:239)kowitego (ang. integer), np.: 1, 2, 3 lub -500. Utworzenie nowej zmiennej do obs(cid:239)ugi diody LED. Wbudowana dioda LED b(cid:218)dzie sterowana za pomoc(cid:200) wyprowadzenia cyfrowego 13 (D13). Mimo (cid:285)e warto(cid:258)(cid:202) zmiennej buttonStatus jest modyfikowana w innej cz(cid:218)(cid:258)ci programu, dobrym pomys(cid:239)em jest zainicjalizowanie jej do jakiejkolwiek warto(cid:258)ci. Funkcja setup() jest uruchamiana jednokrotnie podczas rozruchu Arduino. Ustawienie wyprowadzenia jako OUTPUT (wyj(cid:258)cie) pozwoli Ci na sterowanie nim za pomoc(cid:200) funkcji digitalWrite(). Ustawienie wyprowadzenia buttonPin jako INPUT (wej(cid:258)cie) — aby(cid:258) pó(cid:283)niej móg(cid:239) odczyta(cid:202) jego warto(cid:258)(cid:202) za pomoc(cid:200) funkcji digitalRead(). W(cid:239)(cid:200)czenie wbudowanego rezystora podci(cid:200)gaj(cid:200)cego. To tutaj dzieje si(cid:218) ca(cid:239)a magia (programowa kontrola nad sprz(cid:218)tem). Teori(cid:218) dotycz(cid:200)c(cid:200) rezystorów podci(cid:200)gaj(cid:200)cych poznasz w punkcie „Rezystory podci(cid:200)ga- j(cid:200)ce i Arduino”. Zauwa(cid:285), (cid:285)e tego samego mo(cid:285)esz dokona(cid:202), usuwaj(cid:200)c t(cid:218) lini(cid:218) kodu i modyfikuj(cid:200)c poprzed- ni(cid:200) do postaci: pinMode(buttonPin, INPUT_PULLUP);. Jednak ten sposób zadzia(cid:239)a tylko z nowszymi wersjami oprogramowania Arduino — nie jest obs(cid:239)ugiwany w starszych wersjach. Arduino uruchamia funkcj(cid:218) loop() zaraz po zako(cid:241)czeniu dzia(cid:239)ania funkcji setup(). Jak sama nazwa wskazuje2, ta funkcja jest uruchamiana raz za razem — a(cid:285) do wy(cid:239)(cid:200)czenia Arduino. W tym miejscu odczytywana jest warto(cid:258)(cid:202) z wyprowadzenia buttonPin (wcze(cid:258)niej zosta(cid:239)o zdefiniowa- ne, (cid:285)e jest to wyprowadzenie 2). Nast(cid:218)pnie ta warto(cid:258)(cid:202) jest zapisywana w zmiennej buttonStatus. Je(cid:258)li przycisk jest wci(cid:258)ni(cid:218)ty, wyprowadzenie 2 zostanie zwarte do masy i funkcja digitalRead() zwróci warto(cid:258)(cid:202) LOW. Je(cid:258)li przycisk nie jest wci(cid:258)ni(cid:218)ty, wyprowadzenie 2 nie zostanie zwarte do masy, wi(cid:218)c wbudowany rezystor podci(cid:200)gaj(cid:200)cy wymusi na nim napi(cid:218)cie +5 V i funkcja zwróci warto(cid:258)(cid:202) HIGH. Dwa znaki równo(cid:258)ci (==) oznaczaj(cid:200) porównanie z sob(cid:200) dwóch wyra(cid:285)e(cid:241). Zauwa(cid:285), (cid:285)e maj(cid:200) zupe(cid:239)nie inne znaczenie ni(cid:285) pojedynczy znak równo(cid:258)ci (=), który s(cid:239)u(cid:285)y do przypisywania warto(cid:258)ci zmiennym. W in- strukcji if — gdy chcesz dokona(cid:202) porównania — zawsze korzystaj z podwójnego znaku równo(cid:258)ci. Aby unikn(cid:200)(cid:202) pope(cid:239)nienia b(cid:239)(cid:218)du, z lewej strony operatora porównania wpisz wyra(cid:285)enie LOW — jest to sta(cid:239)a, wi(cid:218)c nie mo(cid:285)na do niej przypisa(cid:202) warto(cid:258)ci. Je(cid:258)li si(cid:218) pomylisz i u(cid:285)yjesz pojedynczego znaku rów- no(cid:258)ci, Arduino zg(cid:239)osi b(cid:239)(cid:200)d podczas kompilacji i próby za(cid:239)adowania szkicu. W tym miejscu jest zapalana dioda LED. Instrukcja else ma za zadanie obs(cid:239)u(cid:285)y(cid:202) sytuacj(cid:218), gdy warunek w instrukcji if nie zostanie spe(cid:239)niony. Blok kodu ({}), który znajduje si(cid:218) zaraz za instrukcj(cid:200) else, zostanie wykonany, gdy b(cid:218)dzie spe(cid:239)niony warunek LOW != buttonStatus (co oznacza to samo co buttonStatus != LOW — czyli warto(cid:258)(cid:202) buttonStatus jest ró(cid:285)na od LOW). 2 S(cid:239)owo loop w j(cid:218)zyku angielskim oznacza p(cid:218)tla — przyp. t(cid:239)um. 42 3. Czujniki i Arduino Kup książkęPoleć książkę Wy(cid:239)(cid:200)czenie diody LED. Gdy tylko funkcja loop() zako(cid:241)czy dzia(cid:239)anie, Arduino uruchomi j(cid:200) ponownie od samego pocz(cid:200)tku. Kody (cid:342)ród(cid:286)owe do przyk(cid:286)adów zawartych w tej ksi(cid:226)(cid:344)ce znajdziesz pod adresem ftp://ftp.helion.pl/przyklady/czujpo.zip Rezystory podci(cid:200)gaj(cid:200)ce i Arduino Przycisk monostabilny dzia(cid:239)a poprawnie, poniewa(cid:285) wykorzysta(cid:239)e(cid:258) rezystor podci(cid:200)gaj(cid:200)cy wbudowany w Ar- duino. Pewnie zastanawiasz si(cid:218), co podci(cid:200)ga rezystor podci(cid:200)gaj(cid:200)cy — otó(cid:285) podci(cid:200)ga on dane wyprowa- dzenie do napi(cid:218)cia zasilaj(cid:200)cego 5 V. Uwa(cid:285)aj na „wisz(cid:200)ce” wyprowadzenia. Odczyt z wyprowadzenia, które nie jest do niczego pod(cid:239)(cid:200)czone („wi- sz(cid:200)ce”), jest nieprzewidywalny. Na przyk(cid:239)ad je(cid:258)li nie pod(cid:239)(cid:200)czysz niczego do wej(cid:258)cia cyfrowego D2 i doko- nasz odczytu za pomoc(cid:200) funkcji digitalRead(), nie masz (cid:285)adnej gwarancji, (cid:285)e odczyt b(cid:218)dzie poprawny. Mo(cid:285)e to by(cid:202) warto(cid:258)(cid:202) HIGH, ale równie dobrze mo(cid:285)e to by(cid:202) warto(cid:258)(cid:202) LOW, która na dodatek zmieni si(cid:218) dzie- si(cid:218)(cid:202) razy w ci(cid:200)gu jednej sekundy — „wisz(cid:200)ce” wyprowadzenie daje wi(cid:218)c w rezultacie bezu(cid:285)yteczn(cid:200) war- to(cid:258)(cid:202) (rysunek 3.3). Rysunek 3.3. Odczyt „wisz(cid:200)cego” wyprowadzenia nie ma sensu — dodaj rezystor podci(cid:200)gaj(cid:200)cy Zintegrowane (cid:311)rodowisko programistyczne (IDE) Arduino jest dystrybuowane z wieloma przydatnymi przyk(cid:286)adowymi szkicami. Je(cid:311)li przyjrzysz si(cid:246) dobrze szkicowi do obs(cid:286)ugi przycisku (menu Plik/Przyk(cid:286)ady/02.Digital/Button), oka(cid:344)e si(cid:246), (cid:344)e ten szkic wymaga dodatkowego rezystora podci(cid:226)gaj(cid:226)cego i nasz przyk(cid:286)adowy program nie zadzia(cid:286)a poprawnie. Wynika to z faktu, (cid:344)e ten szkic wykorzystuje rezystor (cid:311)ci(cid:226)gaj(cid:226)cy (ang. pull-down) tak, aby stan wysoki HIGH oznacza(cid:286), (cid:344)e przycisk zosta(cid:286) na- ci(cid:311)ni(cid:246)ty, a stan niski LOW oznacza(cid:286), (cid:344)e przycisk zosta(cid:286) zwolniony. Je(cid:258)li pod(cid:239)(cid:200)czysz to samo wej(cid:258)cie D2 do masy (GND) — funkcja digitalRead() z ca(cid:239)(cid:200) pewno(cid:258)ci(cid:200) zwróci warto(cid:258)(cid:202) LOW (rysunek 3.4). Odpowiada to sytuacji, gdy przycisk zosta(cid:239) naci(cid:258)ni(cid:218)ty. Projekt 6. Przycisk monostabilny i rezystor podci(cid:200)gaj(cid:200)cy 43 Kup książkęPoleć książkę Rysunek 3.4. Stan niski (LOW). Naci(cid:258)ni(cid:218)cie przycisku pod(cid:239)(cid:200)czonego mi(cid:218)dzy wyprowadzenie D2 i mas(cid:218) (GND) jest równoznaczne ze zwarciem wyprowadzenia D2 do masy A co w przypadku, gdy przycisk nie zosta(cid:239) naci(cid:258)ni(cid:218)ty? Wiadomo ju(cid:285), (cid:285)e aby odczyta(cid:202) z wej(cid:258)cia jak(cid:200)(cid:258) warto(cid:258)(cid:202), trzeba je do czego(cid:258) pod(cid:239)(cid:200)czy(cid:202). Nawet je(cid:258)li pod(cid:239)(cid:200)czysz do niego przycisk, to tak naprawd(cid:218) — dopóki go nie naci(cid:258)niesz — nie jest on do niczego pod(cid:239)(cid:200)czony. Wybawieniem z tej sytuacji jest w(cid:239)a(cid:258)nie rezystor podci(cid:200)gaj(cid:200)cy! Rezystor podci(cid:200)gaj(cid:200)cy (cid:239)(cid:200)czy wyprowadzenie D2 z napi(cid:218)ciem +5 V. Pr(cid:200)d p(cid:239)yn(cid:200)cy przez rezystor jest bardzo ma(cid:239)y — niemniej po(cid:239)(cid:200)czenie istnieje. Je(cid:258)li nic innego nie zostanie pod(cid:239)(cid:200)czone do wyprowadzenia D2, rezy- stor podci(cid:200)gnie je do stanu wysokiego HIGH. Tak wi(cid:218)c gdy przycisk nie jest naci(cid:258)ni(cid:218)ty, wyprowadzenie D2 nie jest zwarte do masy — czyli jest pod(cid:239)(cid:200)czone do +5 V poprzez rezystor podci(cid:200)gaj(cid:200)cy. Oznacza to, (cid:285)e na wyprowadzeniu D2 b(cid:218)dzie si(cid:218) utrzymywa(cid:239) stan wysoki do momentu naci(cid:258)ni(cid:218)cia przycisku (rysunek 3.5). Rysunek 3.5. Stan wysoki (HIGH). Wyprowadzenie D2 jest pod(cid:239)(cid:200)czone poprzez rezystor podci(cid:200)gaj(cid:200)cy do +5 V Ale co si(cid:218) stanie, gdy naci(cid:258)niesz przycisk? Oczywi(cid:258)cie wyprowadzenie D2 zostanie zwarte do masy, ale jednocze- (cid:258)nie jest pod(cid:239)(cid:200)czone do +5 V, czy(cid:285) nie? Mo(cid:285)esz pomy(cid:258)le(cid:202): „Chyba nie ka(cid:285)ecie mi (cid:239)(cid:200)czy(cid:202) z sob(cid:200) masy i +5 V? Przecie(cid:285) to zwarcie!”. Mimo (cid:285)e zarówno wyprowadzenie GND, jak i D2 s(cid:200) pod(cid:239)(cid:200)czone do +5 V, to jest to po(cid:239)(cid:200)czenie za pomoc(cid:200) rezy- stora. A poniewa(cid:285) po(cid:239)(cid:200)czenie mi(cid:218)dzy GND i D2 charakteryzuje si(cid:218) o wiele mniejsz(cid:200) rezystancj(cid:200) ni(cid:285) po(cid:239)(cid:200)czenie do +5 V, to pr(cid:200)d p(cid:239)ynie w(cid:239)a(cid:258)nie przez GND i D2. Inaczej mówi(cid:200)c: rezystor podci(cid:200)gaj(cid:200)cy wymusza na wyprowa- dzeniu D2 stan wysoki, gdy nie jest ono zwarte do masy. Typowy rezystor podci(cid:200)gaj(cid:200)cy ma rezystancj(cid:218) w zakresie od kilkudziesi(cid:218)ciu tysi(cid:218)cy omów do kilku milionów omów (np. od 20 k(cid:159) do 2 M(cid:159)). Oto jak dzia(cid:239)a Twój uk(cid:239)ad — naci(cid:258)nij przycisk, a na wyprowadzeniu D2 pojawi si(cid:218) stan niski (LOW). Zwolnij przycisk, a rezystor podci(cid:200)gaj(cid:200)cy wymusi na wej(cid:258)ciu stan wysoki (HIGH). Jak si(cid:218) zorientowa(cid:202), (cid:285)e w uk(cid:239)adzie jest „wisz(cid:200)ce” wyprowadzenie? Je(cid:258)li chcesz pod(cid:239)(cid:200)czy(cid:202) do Arduino jakikolwiek czujnik, który ma dwa wyprowa- dzenia, zastanów si(cid:218), czy istnieje taki stan, w którym nast(cid:200)pi jego roz(cid:239)(cid:200)czenie (w przypadku przycisku jest 44 3. Czujniki i Arduino Kup książkęPoleć książkę to stan, gdy przycisk nie jest naci(cid:258)ni(cid:218)ty). Je(cid:258)li tak, to prawdopodobnie b(cid:218)dziesz musia(cid:239) zastosowa(cid:202) rezystor podci(cid:200)gaj(cid:200)cy, co pozwoli na wymuszenie stanu wysokiego na wej(cid:258)ciu (rysunek 3.6). Rysunek 3.6. Wbudowany rezystor podci(cid:200)gaj(cid:200)cy. W(cid:239)(cid:200)czysz go poprzez pinMode(pin, INPUT), a nast(cid:218)pnie digitalWrite(pin, HIGH) lub tylko poprzez pinMode(pin, INPUT_PULLUP) Je(cid:311)li wolisz jednak wykorzysta(cid:228) zewn(cid:246)trzny rezystor pomocniczy, to popularniejsze jest zastosowanie go w funkcji rezystora (cid:311)ci(cid:226)gaj(cid:226)cego — aby wymusi(cid:228) na wyprowa- dzeniu stan niski LOW. Pami(cid:246)taj, aby w takim przypadku odwróci(cid:228) logik(cid:246) w Twoim programie (stan wysoki HIGH b(cid:246)dzie sygnalizowa(cid:286) naci(cid:311)ni(cid:246)cie przycisku, a stan niski LOW — zwolnienie przycisku). To tyle, je(cid:258)li chodzi o teori(cid:218). Jak widzisz, zbudowanie nawet takiego przyk(cid:239)adowego prostego prze(cid:239)(cid:200)cznika niesie z sob(cid:200) sporo wiedzy o tym, w jaki sposób pod(cid:239)(cid:200)cza si(cid:218) czujniki do uk(cid:239)adu. Teraz nadesz(cid:239)a pora, aby po- bawi(cid:202) si(cid:218) czym(cid:258) bardziej praktycznym. Projekt 7. Wykrywanie przedmiotów za pomoc(cid:200) czujnika zbli(cid:285)eniowego na podczerwie(cid:241) Czujniki podczerwieni (takie jak prze(cid:239)(cid:200)cznik pokazany na rysunku 3.7) sk(cid:239)adaj(cid:200) si(cid:218) z dwóch cz(cid:218)(cid:258)ci: nadajni- ka podczerwieni i odbiornika. Nadajnik to po prostu dioda LED, która emituje (cid:258)wiat(cid:239)o niewidoczne dla ludzkiego oka — d(cid:239)ugo(cid:258)(cid:202) fali takiego (cid:258)wiat(cid:239)a jest d(cid:239)u(cid:285)sza od fal wchodz(cid:200)cych w zakres pasma widzialnego. Diody podczerwieni znajduj(cid:200) si(cid:218) np. w pilotach do telewizorów. Rysunek 3.7. Prze(cid:239)(cid:200)cznik na podczerwie(cid:241) Projekt 7. Wykrywanie przedmiotów za pomoc(cid:200) czujnika zbli(cid:285)eniowego na podczerwie(cid:241) 45 Kup książkęPoleć książkę Zadaniem odbiornika podczerwieni jest — jak sama nazwa wskazuje — odebranie odbitego promienia (cid:258)wiat(cid:239)a. Ka(cid:285)da przeszkoda ustawiona na drodze powoduje, (cid:285)e odbije si(cid:218) od niej wi(cid:218)ksza ilo(cid:258)(cid:202) (cid:258)wiat(cid:239)a ni(cid:285) normalnie, a to z kolei informuje, (cid:285)e przed czujnikiem znajduje si(cid:218) jaki(cid:258) przedmiot. Tego typu czujnik mo(cid:344)e dzia(cid:286)a(cid:228) nieprawid(cid:286)owo w otoczeniu silnego (cid:311)wiat(cid:286)a s(cid:286)onecznego lub gdy obiekt b(cid:246)d(cid:226)cy celem detekcji jest wykonany z bardzo ciemnego materia(cid:286)u. Prze(cid:239)(cid:200)cznik tego typu mo(cid:285)na naby(cid:202) w sklepach internetowych pod nazw(cid:200) „cyfrowy czujnik odleg(cid:239)o(cid:258)ci” lub „czujnik zbli(cid:285)eniowy”. Oznaczony jest symbolem E18-D50NK lub E18-D80NK. Czujnik zbli(cid:285)eniowy mo(cid:285)e by(cid:202) przydatny w wielu projektach. Szczególnie pomocny oka(cid:285)e si(cid:218) w sytuacji, gdy trzeba okre(cid:258)li(cid:202), czy w pobli(cid:285)u znajduje si(cid:218) jaki(cid:258) przedmiot, ale dok(cid:239)adna informacja o jego odleg(cid:239)o(cid:258)ci jest niepotrzebna. Zasi(cid:218)g detekcji czujnika ustawia si(cid:218) na pomoc(cid:200) ma(cid:239)ego potencjometru z ty(cid:239)u czujnika — tak jak pokazano to na rysunku 3.8. Rysunek 3.8. Regulacja czujnika zbli(cid:285)eniowego Elementy Do tego projektu b(cid:218)dziesz potrzebowa(cid:239) nast(cid:218)puj(cid:200)cych elementów: (cid:120) czujnika zbli(cid:285)eniowego na podczerwie(cid:241); (cid:120) Arduino Uno; (cid:120) kabelków po(cid:239)(cid:200)czeniowych. Je(cid:311)li Twój czujnik zako(cid:288)czony jest z(cid:286)(cid:226)czem z wyprowadzeniami (cid:344)e(cid:288)skimi, b(cid:246)dziesz potrzebowa(cid:286) kabelków po(cid:286)(cid:226)czeniowych, aby pod(cid:286)(cid:226)czy(cid:228) go do Arduino. Je(cid:311)li natomiast zako(cid:288)czony jest z(cid:286)(cid:226)czem z wyprowadzeniami m(cid:246)skimi, b(cid:246)dziesz potrzebowa(cid:286) ka- belków oraz p(cid:286)ytki stykowej. Je(cid:311)li masz czujnik z osobnymi wyprowadzeniami dla masy, 5 V i sygna(cid:286)u, ten diagram sprawdzi si(cid:246) w Twoim przypadku. My u(cid:344)yli(cid:311)my czujnika z rozdzielonymi wyprowa- dzeniami, wi(cid:246)c mogli(cid:311)my je pod(cid:286)(cid:226)czy(cid:228) bezpo(cid:311)rednio do uk(cid:286)adu Arduino. 46 3. Czujniki i Arduino Kup książkęPoleć książkę Budowa Upewnij si(cid:218), (cid:285)e Arduino jest wy(cid:239)(cid:200)czone. Pod(cid:239)(cid:200)cz uk(cid:239)ad w sposób przedstawiony na rysunku 3.9, a nast(cid:218)pnie uruchom szkic z listingu 3.2. Gdy umie(cid:258)cisz jakikolwiek przedmiot bezpo(cid:258)rednio przed czujnikiem, zapali si(cid:218) wbudowana w Arduino dioda LED. Rysunek 3.9. Pod(cid:239)(cid:200)czenie czujnika zbli(cid:285)eniowego do Arduino Pod(cid:239)(cid:200)cz czujnik zgodnie z poni(cid:285)sz(cid:200) instrukcj(cid:200). 1. Kabelek (cid:285)ó(cid:239)ty (sygna(cid:239)owy) pod(cid:239)(cid:200)cz do wyprowadzenia cyfrowego 8 na p(cid:239)ytce Arduino. 2. Kabelek czerwony (plus zasilania) pod(cid:239)(cid:200)cz do wyprowadzenia +5 V na p(cid:239)ytce Arduino. 3. Kabelek zielony (masa) pod(cid:239)(cid:200)cz do wyprowadzenia GND na p(cid:239)ytce Arduino. Uruchom kod Listing 3.2. Szkic Arduino do detekcji obiektów // infrared_proximity.ino — dioda LED zapali si(cid:266), gdy w pobli(cid:298)u czujnika // znajdzie si(cid:266) jaki(cid:286) obiekt // (c) BotBook.com — Karvinen, Karvinen, Valtokari int irPin=8; // int ledPin=13; int objectDetected=LOW; // void setup() { pinMode(ledPin, OUTPUT); pinMode(irPin, INPUT); digitalWrite(irPin, HIGH); // wewn(cid:266)trzny rezystor podci(cid:261)gaj(cid:261)cy } void loop() { objectDetected=digitalRead(irPin); if (LOW==objectDetected) { digitalWrite(ledPin, HIGH); } else { digitalWrite(ledPin, LOW); } } Projekt 7. Wykrywanie przedmiotów za pomoc(cid:200) czujnika zbli(cid:285)eniowego na podczerwie(cid:241) 47 Kup książkęPoleć książkę Podobnie jak w programie z listingu 3.1 — z t(cid:200) ró(cid:285)nic(cid:200), (cid:285)e nazwa zmiennej buttonPin zosta(cid:239)a zmie- niona na irPin. Podobnie — nazwa zmiennej buttonStatus zosta(cid:239)a zmieniona na objectDetected. Powiniene(cid:258) rozpozna(cid:202) ten kod. Gdy si(cid:218) mu przyjrzysz, zauwa(cid:285)ysz, (cid:285)e to ten sam kod, z którego korzysta(cid:239)e(cid:258) w listingu 3.1. Zmieni(cid:239)y si(cid:218) dwie zmienne — ale s(cid:200) to w(cid:239)a(cid:258)ciwie tylko kosmetyczne zmiany. Spróbuj poekspe- rymentowa(cid:202): czy uda Ci si(cid:218) tak zmodyfikowa(cid:202) uk(cid:239)ad z czujnikiem podczerwieni, aby zadzia(cid:239)a(cid:239) z programem z li- stingu 3.1? Czy uda Ci si(cid:218) tak zmodyfikowa(cid:202) uk(cid:239)ad z przyciskiem, aby zadzia(cid:239)a(cid:239) z programem z listingu 3.2? Wiele czujników ma taki sam interfejs. Teraz, gdy ju(cid:285) potrafisz korzysta(cid:202) z dwóch podobnych prze(cid:239)(cid:200)czników (nazywamy je cyfrowymi czujnikami rezystancyjnymi), mo(cid:285)esz spo(cid:285)ytkowa(cid:202) t(cid:218) wiedz(cid:218) podczas pracy z in- nymi czujnikami tego samego rodzaju. Analogowe czujniki rezystancyjne a dzielniki napi(cid:218)cia Wi(cid:218)kszo(cid:258)(cid:202) czujników, z których b(cid:218)dziesz korzysta(cid:239), to analogowe czujniki rezystancyjne. Odpowiedzi(cid:200) czuj- nika jest stopniowa zmiana rezystancji. Na przyk(cid:239)ad: im wi(cid:218)ksza b(cid:218)dzie si(cid:239)a wywierana na czujnik naci- sku, tym mniejsza b(cid:218)dzie rezystancja czujnika. Jako (cid:285)e Arduino (podobnie jak Raspberry Pi) nie jest w stanie bezpo(cid:258)rednio mierzy(cid:202) rezystancji, warto dowiedzie(cid:202) si(cid:218), w jaki sposób wykorzysta(cid:202) do tego celu dzielniki napi(cid:218)cia. Zasada dzia(cid:239)ania dzielnika napi(cid:218)cia jest zbli(cid:285)ona do dzia(cid:239)ania rezystorów podci(cid:200)- gaj(cid:200)cych i (cid:258)ci(cid:200)gaj(cid:200)cych — zamiast jednego rezystora u(cid:285)ywa si(cid:218) dwóch szeregowo po(cid:239)(cid:200)czonych rezystancji, wpi(cid:218)tych mi(cid:218)dzy +5 V a GND (mas(cid:218)): • rezystor pomocniczy; • czujnik, którego rezystancja si(cid:218) zmienia w za- le(cid:285)no(cid:258)ci od stanu, w jakim si(cid:218) znajduje. Do pomiaru napi(cid:218)cia, które si(cid:218) pojawi mi(cid:218)dzy tymi dwiema rezystancjami, mo(cid:285)na wykorzysta(cid:202) wej(cid:258)cie analogowe. Warto(cid:258)(cid:202) napi(cid:218)cia b(cid:218)dzie si(cid:218) zmienia(cid:239)a proporcjonalnie do stanu czujnika. Projekt 8. Pomiar obrotu z wykorzystaniem potencjometru Potencjometr (przedstawiony na rysunku 3.10) jest rezystorem nastawnym. Do zmiany rezystancji s(cid:239)u(cid:285)y pokr(cid:218)t(cid:239)o lub suwak. Potencjometry s(cid:200) elementami urz(cid:200)dze(cid:241), które wykorzystujemy w (cid:285)yciu codziennym — np. w odbiorni- ku radiowym b(cid:200)d(cid:283) (cid:285)elazku. W sterowanych zdalnie samolotach serwomechanizmy okre(cid:258)laj(cid:200) swoje po(cid:239)o(cid:285)enie k(cid:200)towe w(cid:239)a(cid:258)nie za pomoc(cid:200) potencjometrów. W pewnym stopniu analogowe czujniki rezystancyjne mog(cid:200) si(cid:218) zachowywa(cid:202) jak czujniki cyfrowe — przy za(cid:239)o(cid:285)eniu sk(cid:239)adaj(cid:200)cym si(cid:218) z dwóch warunków: (cid:120) przy ustawieniu najmniejszej rezystancji powinny przewodzi(cid:202) tak(cid:200) ilo(cid:258)(cid:202) pr(cid:200)du, aby poziom napi(cid:218)cia zosta(cid:239) zinterpretowany jako wysoki — HIGH; (cid:120) przy ustawieniu najwi(cid:218)kszej rezystancji powinny stawia(cid:202) taki opór, aby poziom napi(cid:218)cia zosta(cid:239) zinterpreto- wany jako niski — LOW. Sprawd(cid:283) to sam! Powró(cid:202) na chwil(cid:218) do projektu 6. „Przycisk monostabilny i rezystor podci(cid:200)gaj(cid:200)cy” — zbu- duj ten uk(cid:239)ad i uruchom program. Nast(cid:218)pnie zast(cid:200)p przycisk monostabilny potencjometrem — pod(cid:239)(cid:200)cz jedn(cid:200) 48 3. Czujniki i Arduino Kup książkęPoleć książkę Rysunek 3.10. Potencjometry mog(cid:200) pos(cid:239)u(cid:285)y(cid:202) do pomiaru obrotu skrajn(cid:200) nó(cid:285)k(cid:218) potencjometru do wyprowadzenia +5 V, drug(cid:200) skrajn(cid:200) nó(cid:285)k(cid:218) do wyprowadzenia GND, a (cid:258)rodkow(cid:200) nó(cid:285)k(cid:218) do cyfrowego wyprowadzenia 2. Teraz pokr(cid:218)(cid:202) potencjometrem w zakresie minimum – maksimum. Je(cid:258)li rezystancja potencjometru jest wystarczaj(cid:200)co du(cid:285)a, dioda LED powinna si(cid:218) w(cid:239)(cid:200)cza(cid:202) i wy(cid:239)(cid:200)cza(cid:202). Poniewa(cid:285) ten program utworzyli(cid:258)my z my(cid:258)l(cid:200) o pokazaniu sposobu u(cid:285)ycia prze(cid:239)(cid:200)cznika, jego funkcjonalno(cid:258)(cid:202) ogranicza si(cid:218) do w(cid:239)(cid:200)czania albo wy(cid:239)(cid:200)czania diody. Aby wykorzysta(cid:202) w pe(cid:239)ni w(cid:239)a(cid:258)ciwo(cid:258)ci potencjometru do p(cid:239)ynnej zmiany napi(cid:218)cia, nale(cid:285)y si(cid:218)gn(cid:200)(cid:202) po funkcj(cid:218) analogRead(). W przypadku czujników analogowych ta funkcja zwraca warto(cid:258)ci z zakresu 0 – 1023 (w przeciwie(cid:241)stwie do warto(cid:258)ci HIGH – LOW). Ten projekt pos(cid:239)u(cid:285)y Ci do nauczenia si(cid:218) sposobu kontrolowania pr(cid:218)dko(cid:258)ci migania diody LED za pomoc(cid:200) potencjometru. Po pokr(cid:218)ceniu potencjometrem w jedn(cid:200) stron(cid:218) dioda b(cid:218)dzie miga(cid:239)a powoli. Natomiast je(cid:258)li nim pokr(cid:218)cisz w przeciwn(cid:200) stron(cid:218), b(cid:218)dzie miga(cid:239)a szybciej. Na rysunku 3.11 przedstawiono diagram uk(cid:239)adu. Rysunek 3.11. Pod(cid:239)(cid:200)czenie potencjometru do wyprowadze(cid:241) +5 V,GND i A0 na p(cid:239)ytce Arduino Uno Potencjometr odgrywa tutaj rol(cid:218) dzielnika napi(cid:218)cia. Jedno skrajne wyprowadzenie jest pod(cid:239)(cid:200)czone do +5 V, drugie skrajne wyprowadzenie do GND. Wyprowadzenie (cid:258)rodkowe jest pod(cid:239)(cid:200)czone do wej(cid:258)cia analogowego A0. W miar(cid:218) jak kr(cid:218)cisz potencjometrem, rezystancja po obu stronach wyprowadzenia (cid:258)rodkowego si(cid:218) zmienia. W przypadku potencjometru 10 k(cid:159) (podane tutaj warto(cid:258)ci s(cid:200) przybli(cid:285)one, poniewa(cid:285) dok(cid:239)adno(cid:258)(cid:202) tanich po- tencjometrów jest ograniczona) mo(cid:285)emy okre(cid:258)li(cid:202) trzy przyk(cid:239)adowe stany. Projekt 8. Pomiar obrotu z wykorzystaniem potencjometru 49 Kup książkęPoleć książkę Je(cid:258)li pokr(cid:218)t(cid:239)o jest skr(cid:218)cone maksymalnie w jedn(cid:200) stron(cid:218)3: (cid:120) rezystancja pomi(cid:218)dzy plusem napi(cid:218)cia a wyprowadzeniem (cid:258)rodkowym jest zerowa; (cid:120) rezystancja pomi(cid:218)dzy minusem napi(cid:218)cia a wyprowadzeniem (cid:258)rodkowym jest równa 10 k(cid:159); (cid:120) na wej(cid:258)ciu A0 pojawia si(cid:218) napi(cid:218)cie +5 V; (cid:120) funkcja analogRead(potPin) zwraca warto(cid:258)(cid:202) 1023. Je(cid:258)li pokr(cid:218)t(cid:239)o jest skr(cid:218)cone w przeciwn(cid:200) stron(cid:218): (cid:120) rezystancja pomi(cid:218)dzy plusem napi(cid:218)cia a wyprowadzeniem (cid:258)rodkowym jest równa 10 k(cid:159); (cid:120) rezystancja pomi(cid:218)dzy minusem napi(cid:218)cia a wyprowadzeniem (cid:258)rodkowym jest zerowa; (cid:120) na wej(cid:258)ciu A0 pojawia si(cid:218) napi(cid:218)cie 0 V; (cid:120) funkcja analogRead(potPin) zwraca warto(cid:258)(cid:202) 0. Je(cid:258)li pokr(cid:218)t(cid:239)o jest wypo(cid:258)rodkowane: (cid:120) rezystancja pomi(cid:218)dzy plusem napi(cid:218)cia a wyprowadzeniem (cid:258)rodkowym jest równa 5 k(cid:159); (cid:120) rezystancja pomi(cid:218)dzy minusem napi(cid:218)cia a wyprowadzeniem (cid:258)rodkowym jest równa 5 k(cid:159); (cid:120) na wej(cid:258)ciu A0 pojawia si(cid:218) napi(cid:218)cie 2,5 V; (cid:120) funkcja analogRead(potPin) zwraca warto(cid:258)(cid:202) ok. 512. Elementy Do tego projektu b(cid:218)dziesz potrzebowa(cid:239) nast(cid:218)puj(cid:200)cych elementów: (cid:120) potencjometru (zalecamy taki o rezystancji ok.10 k(cid:159)); (cid:120) Arduino Uno; (cid:120) kabelków po(cid:239)(cid:200)czeniowych; (cid:120) p(cid:239)ytki stykowej. Budowa Po(cid:239)(cid:200)cz elementy w sposób przedstawiony na rysunku 3.11. Uruchom kod Uruchom kod z listingu 3.3. Listing 3.3. Szkic Arduino do odczytu obrotu potencjometru // pot.ino — kontroluje szybko(cid:286)(cid:252) migania diody LED za pomoc(cid:261) potencjometru // (c) BotBook.com — Karvinen, Karvinen, Valtokari int potPin=A0; // int ledPin=13; // int x=0; // 0..1023 // 3 To, która to jest strona, zale(cid:285)y od sposobu podpi(cid:218)cia potencjometru do p(cid:239)ytki — wypróbuj pod(cid:239)(cid:200)czenie w obie strony. 50 3. Czujniki i Arduino Kup książkęPoleć książkę void setup() { // pinMode(ledPin, OUTPUT); // } void loop() { // x=analogRead(potPin); // digitalWrite(ledPin, HIGH); // delay(x/10); // digitalWrite(ledPin, LOW); // delay(x/10); // } // W poprzednich projektach korzysta(cid:239)e(cid:258) tylko z wej(cid:258)(cid:202) – wyj(cid:258)(cid:202) cyfrowych. Odwo(cid:239)ywa(cid:239)e(cid:258) si(cid:218) do nich poprzez numer (np. 13 to wyprowadzenie cyfrowe numer 13). Analogowe wej(cid:258)cia s(cid:200) tak(cid:285)e ponumerowane, ale dodatkowo przed numerem dodaje si(cid:218) literk(cid:218) A (np. A0, A1 itd.). Wej(cid:258)cia analogowe znajduj(cid:200) si(cid:218) na p(cid:239)ytce Arduino po przeciwnej stronie ni(cid:285) wyprowadzenia cyfrowe. Pin 13 jest po(cid:239)(cid:200)czony z wbudowan(cid:200) w Arduino diod(cid:200) LED. Zmienna x przechowuje warto(cid:258)(cid:202) odczytan(cid:200) przez funkcj(cid:218) analogRead(). Zauwa(cid:285), (cid:285)e w komentarzu wskaza- li(cid:258)my zakres zwracany przez funkcj(cid:218). T(cid:218) informacj(cid:218) mo(cid:285)na znale(cid:283)(cid:202) tak(cid:285)e w dokumentacji Arduino, ale dobrze jest mie(cid:202) j(cid:200) pod r(cid:218)k(cid:200). Funkcja setup() s(cid:239)u(cid:285)y do jednorazowej inicjalizacji. Ustawienie wyprowadzenia D13 jako wyj(cid:258)cie (OUTPUT), co pozwoli pó(cid:283)niej na sterowanie nim za pomoc(cid:200) funkcji digitalWrite(). Zauwa(cid:285), (cid:285)e mimo i(cid:285) do odczytu wykorzystane zostanie wyprowadzenie A0, nie ma konieczno(cid:258)ci konfigurowania go jawnie jako wej(cid:258)cia, poniewa(cid:285) funkcja analogRead() dzia(cid:239)a w inny sposób ni(cid:285) funkcja digitalRead(). Funkcja loop() jest wywo(cid:239)ywana automatycznie po zako(cid:241)czeniu dzia(cid:239)ania funkcji setup(). Odczytanie napi(cid:218)cia z wej(cid:258)cia potPin (A0) za pomoc(cid:200) funkcji analogRead(). W wyniku otrzymasz warto(cid:258)(cid:202) z przedzia(cid:239)u pomi(cid:218)dzy 0 (0 V — stan niski LOW) a 1023 (+5 V — stan wysoki HIGH). Ta warto(cid:258)(cid:202) zapisy- wana jest w zmiennej x. W(cid:239)(cid:200)czenie wbudowanej diody LED. Odczekanie x/10 milisekund. Oznacza to, (cid:285)e przy skr(cid:218)conym do maksimum potencjometrze b(cid:218)dzie to 0 ms (A0 odczyta 0 V), a przy skr(cid:218)conym potencjometrze w przeciwn(cid:200) stron(cid:218) b(cid:218)dzie to 0,1 ms (1023/10 ms). Wy(cid:239)(cid:200)czenie wbudowanej diody LED. Ponownie odczekanie, aby dioda LED zosta(cid:239)a przez moment wy(cid:239)(cid:200)czona. Po zako(cid:241)czeniu dzia(cid:239)ania funkcji loop() jest ona wywo(cid:239)ywana ponownie. Projekt 9. Pomiar jasno(cid:258)ci (cid:258)wiat(cid:239)a za pomoc(cid:200) fotorezystora Jest jasno czy ciemno? Fotorezystor stawia mniejszy opór przep(cid:239)ywaj(cid:200)cemu przez niego pr(cid:200)dowi, gdy zostanie o(cid:258)wietlony silnym (cid:258)wiat(cid:239)em (rysunek 3.12). Nasi uczniowie wykorzystuj(cid:200) fotorezystory przy konstruowaniu robotów, które „lubi(cid:200)” (cid:258)wiat(cid:239)o (b(cid:200)d(cid:283) go „nie lubi(cid:200)”), uk(cid:239)adów, które automatycznie zapalaj(cid:200) (cid:258)wiat(cid:239)a po zmroku, lub do budowy alarmów w(cid:239)amaniowych. Projekt 9. Pomiar jasno(cid:258)ci (cid:258)wiat(cid:239)a za pomoc(cid:200) fotorezystora 51 Kup książkęPoleć książkę Rysunek 3.12. Fotorezystor lepiej przewodzi pr(cid:200)d, je(cid:258)li zostanie o(cid:258)wietlony jasnym (cid:258)wiat(cid:239)em Elementy Do tego projektu b(cid:218)dziesz potrzebowa(cid:239) nast(cid:218)puj(cid:200)cych elementów: (cid:120) fotorezystora (zalecany 10 k(cid:159)); (cid:120) rezystora 10 k(cid:159) (kod czteropaskowy — br(cid:200)zowy, czarny, pomara(cid:241)czowy; kod pi(cid:218)ciopaskowy — br(cid:200)zo- wy, czarny, czarny, czerwony; odpowiednio: czwarty i pi(cid:200)ty pasek jest zale(cid:285)ny od tolerancji rezystora); (cid:120) Arduino Uno; (cid:120) kabelków po(cid:239)(cid:200)czeniowych; (cid:120) p(cid:239)ytki stykowej. Budowa Rysunek 3.13 przedstawia diagram uk(cid:239)adu, który zbudujesz w tym projekcie. Z(cid:239)ó(cid:285) uk(cid:239)ad zgodnie z diagramem oraz uruchom szkic z listingu 3.4. Zwró(cid:202) uwag(cid:218) na obecno(cid:258)(cid:202) rezystora 10 k(cid:159) — wchodzi on w sk(cid:239)ad dzielnika napi(cid:218)cia. W projekcie 8. „Pomiar obrotu z wykorzystaniem potencjometru” nie by(cid:239)o potrzeby u(cid:285)ywania ze- wn(cid:218)trznego rezystora, poniewa(cid:285) ju(cid:285) sam potencjometr pe(cid:239)ni funkcj(cid:218) dzielnika napi(cid:218)cia. Rysunek 3.13. Diagram uk(cid:239)adu z fotorezystorem 52 3. Czujniki i Arduino Kup książkęPoleć książkę Aby wytworzy(cid:202) zmian(cid:218) napi(cid:218)cia zale(cid:285)n(cid:200) od zmiany rezystancji fotorezystora, musisz wykorzysta(cid:202) dzielnik napi(cid:218)cia z(cid:239)o(cid:285)ony z dwóch rezystancji (opornik 10 k(cid:159) i fotorezystor) oraz zmierzy(cid:202) warto(cid:258)(cid:202) napi(cid:218)cia, które pojawi si(cid:218) mi(cid:218)dzy nimi. Na tej podstawie b(cid:218)dzie mo(cid:285)na okre(cid:258)li(cid:202), czy w otoczeniu jest ciemno, czy te(cid:285) jasno. Uruchom kod Listing 3.4. Szkic Arduino korzystaj(cid:200)cy z fotorezystora // photoresistor.ino — szybsze miganie diody w ciemno(cid:286)ci, wolniejsze w (cid:286)wietle // (c) BotBook.com — Karvinen, Karvinen, Valtokari int photoPin=A0; int ledPin=13; int x=-1; // 0..1023 void setup() { pinMode(ledPin, OUTPUT); } void loop() { x=analogRead(photoPin); digitalWrite(ledPin, HIGH); delay(x/10); // digitalWrite(ledPin, LOW); delay(x/10); } Jeste(cid:258)my pewni, (cid:285)e zauwa(cid:285)y(cid:239)e(cid:258), (cid:285)e powy(cid:285)szy kod wygl(cid:200)da podobnie jak listing 3.3! To ten sam kod — zmienili(cid:258)my jedynie nazw(cid:218) zmiennej potPin na photoPin oraz komentarz w pierwszej linii. Uruchom pro- gram i sprawd(cid:283) go. Co si(cid:218) dzieje, gdy umie(cid:258)cisz fotorezystor w cieniu b(cid:200)d(cid:283) go ca(cid:239)kowicie zas(cid:239)onisz? Wi(cid:218)kszo(cid:258)(cid:202) popularnych czujników to analogowe czujniki rezystancyjne, wi(cid:218)c ich pod(cid:239)(cid:200)czenie do uk(cid:239)adu wygl(cid:200)da podobnie. W przysz(cid:239)o(cid:258)ci — gdy b(cid:218)dziesz mia(cid:239) do czynienia z innymi czujnikami — mo(cid:285)esz sko- rzysta(cid:202) z tego samego podej(cid:258)cia. Projekt 10. Pomiar si(cid:239)y nacisku za pomoc(cid:200) czujnika FlexiForce4 Rezystancyjny czujnik si(cid:239)y nacisku, taki jak FlexiForce (rysunek 3.14), ma najcz(cid:218)(cid:258)ciej posta(cid:202) p(cid:239)askiej folii zako(cid:241)- czonej obszarem aktywnym i mo(cid:285)e zosta(cid:202) wykorzystany do badania dzia(cid:239)aj(cid:200)cej na niego si(cid:239)y. W stanie spo- czynku charakteryzuje si(cid:218) on bardzo du(cid:285)(cid:200) rezystancj(cid:200), natomiast po przy(cid:239)o(cid:285)eniu si(cid:239)y do obszaru aktywnego czujnika jego rezystancja maleje. 4 Podobne czujniki mo(cid:285)na naby(cid:202) w sklepach internetowych pod symbolem CZN-CP1 — przyp. t(cid:239)um. Projekt 10. Pomiar si(cid:239)y nacisku za pomoc(cid:200) czujnika FlexiForce 53 Kup książkęPoleć książkę Rysunek 3.14. Rezystancyjny czujnik si(cid:239)y nacisku mierzy wywieran(cid:200) na niego si(cid:239)(cid:218) Elementy Do tego projektu b(cid:218)dziesz potrzebowa(cid:239) nast(cid:218)puj(cid:200)cych elementów: (cid:120) rezystancyjnego czujnika si(cid:239)y; (cid:120) rezystora 1 M(cid:159) (kod czteropaskowy — br(cid:200)zowy, czarny, zielony; kod pi(cid:218)ciopaskowy — br(cid:200)zowy, czarny, czarny, (cid:285)ó(cid:239)ty; odpowiednio czwarty i pi(cid:200)ty pasek jest zale(cid:285)ny od tolerancji rezystora); (cid:120) Arduino Uno; (cid:120) kabelków po(cid:239)(cid:200)czeniowych; (cid:120) p(cid:239)ytki stykowej. Budowa Podobnie jak by(cid:239)o w projekcie 9. „Pomiar jasno(cid:258)ci (cid:258)wiat(cid:239)a za pomoc(cid:200) fotorezystora”, wykorzystasz tutaj dzielnik napi(cid:218)cia. Równie(cid:285) w tym przypadku musisz u(cid:285)y(cid:202) rezystora o warto(cid:258)ci zbli(cid:285)onej do rezystancji czujnika. W naszym czujniku odpowiedni okaza(cid:239) si(cid:218) opornik 1 M(cid:159). Zadaniem wyprowadzenia A0 b(cid:218)dzie pomiar napi(cid:218)cia z naszego dzielnika (zob. ramka „Analogowe czujniki rezystancyjne a dzielniki napi(cid:218)cia”). To napi(cid:218)cie b(cid:218)dzie si(cid:218) zmienia(cid:202) w odpowiedzi na przy(cid:239)o(cid:285)on(cid:200) do czujnika si(cid:239)(cid:218). W efekcie pojawi si(cid:218) warto(cid:258)(cid:202) pomi(cid:218)dzy 0 (napi(cid:218)cie bliskie 0 V) a 1023 (napi(cid:218)cie bliskie +5 V). Zbuduj uk(cid:239)ad przedstawiony na rysunku 3.15 i za(cid:239)aduj szkic z listingu 3.5. Rysunek 3.15. Diagram uk(cid:239)adu z czujnikiem FlexiForce 54 3. Czujniki i Arduino Kup książkęPoleć książkę Nas(cid:239)uch na porcie szeregowym Nie musisz si(cid:218) domy(cid:258)la(cid:202) tego, co dzieje si(cid:218) wewn(cid:200)trz Arduino. Uk(cid:239)ad Arduino potrafi komunikowa(cid:202) si(cid:218) z Twoim komputerem poprzez wbudowany port szeregowy i przesy(cid:239)a(cid:202) do niego informacje (istnieje tak(cid:285)e mo(cid:285)liwo(cid:258)(cid:202) przesy(cid:239)ania informacji w drug(cid:200) stron(cid:218) — z komputera do Arduino), co przedstawiono na ry- sunku 3.16. Transmisja nast(cid:218)puje poprzez port USB wbudowany w Arduino. Rysunek 3.16. Monitor portu szeregowego Systemy wbudowane bardzo cz(cid:218)sto wykorzystuj(cid:200) do komunikacji porty szeregowe. W naszej ksi(cid:200)(cid:285)ce na te- mat sterowania robotem za pomoc(cid:200) fal mózgowych (Make a Mind-Controlled Arduino Robot) opisali(cid:258)my, w jaki sposób pos(cid:239)u(cid:285)yli(cid:258)my si(cid:218) portem szeregowym w celu zhakowania dost(cid:218)pnej na rynku opaski na g(cid:239)ow(cid:218) wykorzystywanej przy elektroencefalografii. Pozwoli(cid:239)o nam to na kontrolowanie robota zbudowa- nego na bazie Arduino za pomoc(cid:200) fal mózgowych! Kolejnym dobrym przyk(cid:239)adem jest sterowany przez telefon robot do gry w pi(cid:239)k(cid:218) no(cid:285)n(cid:200) — zosta(cid:239) opi- sany w innej naszej ksi(cid:200)(cid:285)ce Make: Arduino Bots and Gadgets. Tutaj z kolei do komunikacji z telefonem dzia(cid:239)aj(cid:200)cym pod kontrol(cid:200) systemu Android wy- korzystali(cid:258)my transmisj(cid:218) poprzez (cid:239)(cid:200)cze Bluetooth. Jednak port szeregowy s(cid:239)u(cid:285)y nie tylko do przeka- zywania urz(cid:200)dzeniom instrukcji. Podczas budowa- nia wczesnej wersji prototypu naszego satelity u(cid:285)yli- (cid:258)my portu szeregowego do debugowania projektu. I w(cid:239)a(cid:258)nie w ten sam sposób wykorzystamy go tutaj. Projekt 10. Pomiar si(cid:239)y nacisku za pomoc(cid:200) czujnika FlexiForce 55 Kup książkęPoleć książkę Uruchom kod Listing 3.5. Szkic Arduino do odczytu czujnika si(cid:239)y // squeeze_serial.ino — transmisja szeregowa si(cid:225)y nacisku // (c) BotBook.com — Karvinen, Karvinen, Valtokari int squeezePin=A0; // int x=-1; // 0..1023 // void setup() { // Serial.begin(9600); // bity/s // } void loop() { // x=analogRead(squeezePin); // Serial.println(x); // delay(500); // ms // } To wyprowadzenie odpowiada za odczyt czujnika (wej(cid:258)cie analogowe A0). Zmienna globalna x zadeklarowana zosta(cid:239)a w ten sposób, aby umo(cid:285)liwi(cid:202) dost(cid:218)p do niej wewn(cid:200)trz innych funkcji w szkicu. Zainicjalizowana zosta(cid:239)a warto(cid:258)ci(cid:200) –1 (której funkcja analogRead() nie zwraca), aby u(cid:239)atwi(cid:202) debugowanie — je(cid:258)li zauwa(cid:285)ysz t(cid:218) warto(cid:258)(cid:202) jako wynik odczytu, najprawdopodobniej w pro- gramie jest b(cid:239)(cid:200)d. Funkcja setup() jest wywo(cid:239)ywana automatycznie; s(cid:239)u(cid:285)y do inicjalizacji. Pr(cid:218)dko(cid:258)(cid:202) transmisji portu szeregowego (wybrali(cid:258)my pr(cid:218)dko(cid:258)(cid:202) 9600, poniewa(cid:285) jest to domy(cid:258)lna warto(cid:258)(cid:202) u(cid:285)ywana przez monitor portu szeregowego). Funkcja loop() jest wykonywana automatycznie (i wielokrotnie) po zako(cid:241)czeniu dzia(cid:239)ania funkcji setup(). Funkcja analogRead() zwraca warto(cid:258)(cid:202) pomi(cid:218)dzy 0 (poziom niski — LOW, 0 V) a 1023 (poziom wy- soki — HIGH, +5 V). Ta warto(cid:258)(cid:202) jest zapisywana w zmiennej x. Przes(cid:239)anie warto(cid:258)ci zmiennej x do portu szeregowego — ta warto(cid:258)(cid:202) pojawi si(cid:218) w oknie monitora portu szeregowego. Funkcja Serial.println() przesy(cid:239)a ka(cid:285)d(cid:200) warto(cid:258)(cid:202) w nowej linii — w efekcie w oknie monitora zobaczysz szereg przewijaj(cid:200)cych si(cid:218) warto(cid:258)ci. Odczekanie 500 ms — zapewni Ci to wystarczaj(cid:200)c(cid:200) ilo(cid:258)(cid:202) czasu, aby(cid:258) móg(cid:239) odczyta(cid:202) poszczególne warto(cid:258)ci w oknie monitora portu szeregowego; zapobiega tak(cid:285)e zbyt du(cid:285)emu obci(cid:200)(cid:285)eniu procesora Arduino przez Twój program. Poeksperymentuj: czy potrafisz pod(cid:239)(cid:200)czy(cid:202) do uk(cid:239)adu potencjometr i odczyta(cid:202) jego warto(cid:258)(cid:202) poprzez port szeregowy? Je(cid:258)li jeste(cid:258) gotowy na kolejne wyzwanie, spróbuj przekonwertowa(cid:202) zwracan(cid:200) warto(cid:258)(cid:202) na k(cid:200)t obrotu potencjometru lub jako procent maksymalnego obrotu. Czujesz si(cid:218) na si(cid:239)ach, aby spróbowa(cid:202) czego(cid:258) w
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Czujniki dla początkujących. Poznaj otaczający Cię świat za pomocą elektroniki, Arduino i Raspberry Pi
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: