Raspberry Pi

czwartek, 15 października 2015

Czujnik ruchu - czyli jak zrobić prosty alarm

Po drobnej modyfikacji kodu i układu z posta "Przycisk start/stop..." zrobiłem prosty alarm.
Do układu dodałem buzzer 5V w obwód migającej diody.  W obsłudze klawisza start stop pozostawiłem jedynie funkcjonalność stop do wyłączania alarmu. Jako inicjator start (wzbudzenie alarmu) dołączyłem do GPIO 23. Czujnik ruchu podłączyłem do zasilania 5V i masy, pin sygnałowy wystawia przez chwilę wysoki stan 3,3V po wykryciu ruchu.


  • czujnik ruchu

Czujnik ruchu.
  • kod programu wraz z opisem


  • efekt działania





Oko dla maliny 2 - wreszcie działa

Wracam do tematu opisanego w jednym z poprzednich postów, dotyczącego kamery USB dla RasPi.
Dziś robiłem zakupy w jednym z marketów i trafiłem na wyprzedaż sprzętu elektronicznego. Wśród masy gadżetów znalazłem kamerkę Logitech-a C170. Szybko sprawdziłem w necie czy jest kompatybilna z maliną. Okazało się, że jest więc ją nabyłem za jedyne 50 zł. Cała konfiguracja aplikacji motion ograniczyłem do wpisania odpowiedniej nazwy urządzenia(video0) i wszystko ruszyło :-). Jakość i prędkość pozostawiają wiele do życzenia, ale działa.


  • kamerka USB


Nowe oko maliny.



  • efekt działania


  • czwartek, 8 października 2015

    Przycisk start/stop - czyli o prostych danych wejściowych

    Teraz troszkę wstępu w temacie obsługi wejść.
    Zacznę skromnie od 1 przycisku i w miarę bezpiecznie - ze względu na brak buforów wejściowych.
    W dzisiejszym zadaniu wykonałem przycisk start stop uruchamiający program migotania diody, do tego celu użyłem metody event_detected, która wykrywa zmianę stanu logicznego danego pinu. Ta metoda idealnie nadaje się do obsługi funkcji start/stop.
    Przycisk połączony jest z jednej strony z masą a z drugiej z pine GPIO.12, który jest ustawiony w tryb INPUT i stan natywny wysoki (3,3V).
    Wciśniecie przycisku powoduje zwarcie pinu 12 z masą i zmianę stanu z wysokiego na niski.
    Inne metody dotyczące obsługi wejść opiszę na końcu tego postu.
    Szczegóły działania programu opisane w kodzie.


    • kod programu startstopdiody.py:
    #!/usr/bin/python
    #program start-stop diody
    #steruje steruje startem i zatrzymaniem pulsowania diody
    #biblioteka time
    import time 
    #biblioteka random
    import random
    #biblioteka GPIO
    import RPi.GPIO as GPIO 
    #wyłączenie ostrzeżeń GPIO
    GPIO.setwarnings(False)
    #ustawienie typu interpretacji pinów GPIO
    GPIO.setmode(GPIO.BCM)
    #czyszczenie rejestrów GPIO
    GPIO.cleanup()
    #ustawienie wybranych pinów w trym OUT
    GPIO.setup(21,GPIO.OUT)
    #ustawienie wybranych pinów w tryb IN i ustawienie domyślnego stanu wejścia 
    #na stan#wysoki 3,3V
    GPIO.setup(12,GPIO.IN, pull_up_down=GPIO.PUD_UP)
    #dodanie obslugi zdazenia na pinie 12 GPIO
    GPIO.add_event_detect(12, GPIO.RISING)
    #główna pętla programu
    while True:
    #jesli zostanie wykryte przyciśnięcie klawisza (zwarcie do masy) 
         #wyświetlonyzostanie komunikat i uruchomiona kolejna pętla 
    if GPIO.event_detected(12):
    print "start"
    #wykonuje pętle do kolejnego wykrycia przyciśnięcia klawisza
    while not GPIO.event_detected(12):
    #stan wysoki na pinie diody 1
    GPIO.output(21,GPIO.HIGH)
    #wstrzymanie programu na 1s
    time.sleep(0.5)
    #stan niski na pinie diody 1
    GPIO.output(21,GPIO.LOW)
    time.sleep(0.5)

    • schemat:

    schemat ukladu




    • płytka prototypowa:
    Płytka układu


    • efekt działania:



    wtorek, 6 października 2015

    ULN2803A - układ zabezpieczający wyjścia

    Zagłębiając się w arkana elektroniki cyfrowej zdałem sobie sprawę, że podłączanie bezpośrednio do pinów GPIO odbiorników, mogę narazić swoją malinkę na poważne uszkodzenia. Żeby zabezpieczyć piny GPIO należy stosować bufory. Na początek wziąłem na tapetę układ ULN2803A i zaimplementowałem go do mojego testowego sterowania diodami LED. Przedmiotowy scalak jest macierzą tranzystorów w układzie Darlingtona. 
    ULN2803A
    Do dyspozycji mamy osiem kanałów, które sterowane są poprzez stany logiczne 3,3V w naszym wypadku z Raspberki. Układ pozwala na sterowanie napięciem wyjściowym do 50V i umożliwia podłączanie odbiorników o większym zapotrzebowaniu na prąd (do 0,5A). Układ jednocześnie zabezpiecza wyjścia GPIO przed przeciążeniami i uszkodzeniami. Można go wykorzystać jako prosty bufor dla napięć 3,3V, jako bufor konwertujący napięcie 3,3V na 5V, jako układ sterujący małymi odbiornikami o wyższych napięciach (małe przekaźniki, mikro silniczki i serwa). Wadą układu jest jego jednokierunkowość, więc możemy zabezpieczać nim jedynie wyjścia.
    Nowa bezpieczniejsza implementacja układu sterowania diodami.
    Rozmieszczenie na płytce prototypowej.




    niedziela, 4 października 2015

    Sterowanie diodami LED - pierwszy program sterujący

    Mam Rasperkę, mam płytkę prototypową i trochę podzespołów, czas więc zrobić coś "efektownego".
    Na początek sterowanie diodami LED.

    • 1 dioda (czerwona) aktywowana jest poprzez zmianę stanu pinu GPIO naprzemiennie co 1s z niskiego na wysoki (0 na 1). 
    • 2 dioda (zielona) aktywowana jest funkcją PWM (wypełnieniem mocą) 
    • 3 dioda RGB sterowana jest również przez PWM na 3 pina GPIO z tą różnicą, że stopień wypełnienia mocą dla każdego pinu RGB jest losowany cyklicznie w każdym kroku głównej pętli programu co skutkuje cyklicznymi i losowymi zmianami koloru i natężenia tej diody.
    Więcej wyjaśnień w kodzie programu poniżej.

    Schemat połączeń dla tego zadania:


    Schemat połączeń z programu Fritzing



    Kod programu diody.py:

    #!/usr/bin/python
    #program diody
    #steruje 3 diodami
    #1 poprzez ustawianie naprzemiennie stan wysoki iniski
    #2 porzez jednorazowe ustawienie funkcji PWM na jednym z pnow
    #3 dioda RGB sterowana poprzez losowanie wypelnienia funkcji PWM na kazdy z 3 pinow
    #biblioteka time
    import time
    #biblioteka random
    import random
    #biblioteka GPIO
    import RPi.GPIO as GPIO
    #wylaczenie ostrzezen GPIO
    GPIO.setwarnings(False)
    #ustawienie typu interpretacji pinow GPIO
    GPIO.setmode(GPIO.BCM)
    #czyszczenie rejestrow GPIO
    GPIO.cleanup()
    #ustawienie wybranych pinow w trym OUT
    GPIO.setup(21,GPIO.OUT)
    GPIO.setup(20,GPIO.OUT)
    GPIO.setup(26,GPIO.OUT)
    GPIO.setup(19,GPIO.OUT)
    GPIO.setup(13,GPIO.OUT)
    #ustalenie stalych parametrow PWM dla 20 GPIO na 10Hz i wypelnienie 30% do sterowania dioda 2
    pwm = GPIO.PWM(20, 10)
    #start funkcji PWM
    pwm.start(30)
    #zerowanie zmiennych rgb
    r=0
    g=0
    b=0
    #ustawienia wartosci poczatkowych PWM dla pinow diody 3 RGB i start funkcji PWM
    rpwm = GPIO.PWM(26,50)
    rpwm.start(10)
    gpwm = GPIO.PWM(19,50)
    gpwm.start(10)
    bpwm = GPIO.PWM(13,50)
    bpwm.start(10)
    #glowna petla programu
    while True:
       #losowanie wartosci rgm dla diody 3 wielo kolorowej
       r=random.randint(1,100)
    g=random.randint(1,100)
    b=random.randint(1,100)
    #zmiana wartosci RGB (wypenienia PWM)na wylosowane powyzej
    rpwm.ChangeDutyCycle(r)
    gpwm.ChangeDutyCycle(g)
    bpwm.ChangeDutyCycle(b)
    #stan wysoki na pinie diody 1
       GPIO.output(21,GPIO.HIGH)
    #wstrzymanie programu na 1s
    time.sleep(1)
    #stan niski na pinie diody 1
    GPIO.output(21,GPIO.LOW)
    time.sleep(1)


    Efekt działania:



    Przystawka oscyloskopowa

    W celu zwiększenia zakresu pomiarowego mojego prostego oscyloskopu i zabezpieczenia karty dźwiękowej lapka przed uszkodzeniem, postanowiłem poszperać w sieci w poszukiwaniu jakiegoś fajnego rozwiązania. Początkowo chciałem zrobić jakiś prosty dzielnik napięcia ale na  tej stronie, znalazłem fajne i proste rozwiązanie problemu.





    Schemat oscyloskopu
    Schemat ideowy przystawki oscyloskopowej



    Schemat układu TL082
    Układ TL082
    Łopatologiczny schemat oscyloskopu
    Podłączenie elementów
    A to moja implementacja przystawki zrezygnowałem z zasilania przez port RS bo zwyczajnie mój lapek go nie posiada i do tego celu wykorzystam zewnętrzny zasilacz 12V.


    brakuje jeszcze gniazda zasilacza 

    Wewnętrzna pajęczynka

    prosta obudowa kupiona w Castoramie za 4 zł nadała siermiężnemu wnętrzu profesjonalny wygląd

    widok wyjścia do karty dźwiękowej
    Całość projektu zamyka się kwotą ok 30 zł.




    sobota, 3 października 2015

    Pierwsze elementy - zestaw prototypowy

    Kilka dni temu w końcu dotarł zestaw prototypowy który zamówiłem tu. Nie pisałem o tym wcześniej bo ze względu na chroniczny brak czasu wolałem się nim nacieszyć i nie trwonić czasu na pisanie ;-).

    Paczka z zestawem podstawowych podzespołów do prac prototypowych.

    Najważniejszy element - stykowa płytka prototypowa z interfejsem do GPIO i dodatkowym zasilaczem

    Reszta elementów - całkiem sporo
    To co dotarło w paczce nie jest jeszcze kompletem elementów potrzebnych do budowy robota. Jest to raczej zestaw edukacyjno-wdrożeniowy na którym będę ćwiczył zasady obsługi elementów wykonawczych i sensorów.

    Cały zestaw składa się z:
    • Płytka stykowa 830 pól - duża płytka z osobnymi liniami zasilania umożliwiająca tworzenie układów elektronicznych.
     



    • Moduł ProtoPi Plus z taśmą 40 pin - umożliwia proste połączenie wszystkich wyprowadzeń GPIO minikomputera Raspberry w wersji B+ z dowolną płytką stykową bez potrzeby lutowania.

     
     

    • Zestaw rezystorów THT 1/4 W 200 szt. - po 20 szt. najpopularniejszych wartości, umożliwiających np. podłączenie diod LED. Poszczególne wartości znajdują się w podpisanych woreczkach strunowych.





    • Przekaźnik HLS8L-DC5V-S-C - stycznik z cewką zasilaną napięciem 5 V, mogący sterować napięciem do 120 V i prądem do 15 A.
     










     

    wtorek, 29 września 2015

    Literatura Pi-ękna

    Trzymając się mocnego postanowienia, co do metodycznego podejścia do problemu, za niecałe 35 zł kupiłem sobie książkę o programowaniu RPi. "Raspberry Pi Przewodnik dla programistów Pythona" z Heliona autorstwa Simon Monk, wydawała się kompendium wiedzy a okazała się jedynie preludium. To skromna prawie 150 stronicowa pozycja w wielkim skrócie opisująca zasady pythona, opisująca RPi i kilka kart rozszerzeń, oraz skrótowo projekt autonomicznego robota. Niestety świat idzie do przodu i niektóre rozwiązania sprzętowe są już przestarzałe. Niemniej jednak przeczytam ją w celu usystematyzowania chaosu wiedzy jaki w ostatnich dniach wyssałem z netu.

    Lektura to lektura

    niedziela, 27 września 2015

    Pierwsze kody za płoty - testowanie wyjść GPIO


    Dzisiaj zrobiłem pierwsze podejście do testowania phytona jako języka kodowania dla robota.
    Na początek sterowanie wyjściami. Korzystam ze standardowej biblioteki RPiGPIO.
    krótki kod + komentarze:


    • testout.py:


    #!/usr/bin/python
    #biblioteka time
    import time
    #biblioteka GPIO
    import RPi.GPIO as GPIO
    #wyłączenie ostrzeżeń 
    GPIO.setwarnings(False)
    #włączenie modu BCM w odróznieni od BOARD posługujemy się faktycznymi numerami wejść/wyjść a nie ich numerami wynikajacymi z rozmieszczenia na płycie
    GPIO.setmode(GPIO.BCM)
    #wyczyszczenia rejestrów GPIO
    GPIO.cleanup()
    #ustawienie GPIO2 i 3 w trybie OUT
    GPIO.setup(2,GPIO.OUT)
    GPIO.setup(3,GPIO.OUT)
    #ustawienie pinu GPIO.3 jako generatora "sterowania wypełnienia mocą" - PWM częstotliwoąć 2Hz wypełnienie 50%, przydatne do regulacji mocy i sterowania serwomechanizmami
    pwm = GPIO.PWM(3, 2)
    pwm.start(50)
    #pętla w której stale zmienia się stan pinu GPIO.2 z 1 na 0
    while True:
    GPIO.output(2,GPIO.HIGH)
    time.sleep(1)
    GPIO.output(2,GPIO.LOW)
    time.sleep(1)

    A to wynik działania programu z analizatora stanów logicznych:
    Wynik działania programu w analizatorze stanów logicznych.
    RPi.GPIO  jest proste ale wydaje mi się, że w sieci znajdę bardziej funkcjonalne biblioteki do obsługi GPIO.

    sobota, 26 września 2015

    Prosty oscyloskop - kolejne narzędzie pomiarowe.

    Oscyloskop zawsze może się przydać zwłaszcza do przeanalizowania sygnałów analogowych. Zakup profesjonalnej przestawki lub stacjonarnego oscyloskopu na tym etapie projektu nie wchodzi w grę. Ale prosty oscyloskop jest w zasięgu każdego posiadacza karty dźwiękowej z  wejściem mikrofonowym. W Ubuntu, którego używam w ramach tego projektu, dostępny jest pakiet Xscope, który do moich potrzeb jest wystarczający. Dzięki wbudowanej w mojego lapka karcie dźwiękowej mam dwa kanały pomiarowe.

    Xscope - z przykładowym przebiegiem pomiarowym.


    Zakres częstotliwości wejściowych to ok 44kHz, a zakres napięciowy to ok 0-1,2V. Ale, żeby zwiększyć zakres napięciowy zamierzam dobudować sobie prosty rezystorowy dzielnik napięcia  x2 x4 x10 x100.

    czwartek, 24 września 2015

    Analizator stanów logicznych - podstawowe narzędzie pomiarowe.


    Analizator stanów logicznych to pierwsze przydatne narzędzie, które postanowiłem zakupić przed rozpoczęciem prac nad robotem. Za 8 kanałową przystawkę USB do komputera zapłaciłem na allegro 38 zł.  Do wizualizacji pracy tej przystawki potrzebne jest oprogramowanie Saleae Logic które można pobrać tu.
    Soft jest w wersjach dla Mac Win i Lin.
    Instalacja jest prosta wystarczy rozpakować pobrany plik zip w dowolnym folderze następnie uruchomić plik Logic.
    Program powinien wykryć przystawkę o ile jest z nim zgodna.
    Na moim Ubuntu ruszył ale dopiero po odpaleniu go z linii poleceń
    sudo ./Logic. Inaczej wyrzucało błąd, że program wykrył przystawkę ale nie uprawnień do urządzenia.
    Saleae Logic i testowe stany GPIO

    Analizator stanów logicznych - przystawka USB
    Analizator i malina

    wtorek, 22 września 2015

    Z cyklu programy narzędziowe - niekoniecznie dla maliny - Fritzing

    W tym cyklu będę się starał zdawkowo opisywać programy narzędziowe przydatne w tego rodzaju projektach.

    Na początek petarda!


    • Fritzing - występuje w wersach dla wszystkich systemów, pobrać go można tu.
    Prosta w obsłudze aplikacja typu drag&drop pozwalająca wygodnie projektować prototypowe układy elektroniczne w oparciu o rózne mikrokomputery w tym rapberry pi.

    Na standardowej płytce prototypowej można po prostu porozmieszczać potrzebne elementy i swój mikrokomputer połączyć ja sobie życzymy. W kolejnej zakładce zobaczymy schemat ideowy naszej radosnej twórczości. Następna zakładka jest idealna gdy od prototypu chcemy przejść do wersji profesjonalnej program automatycznie wytrasuje nam płytkę do wyboru 1 lub 2 warstwową, a jak trzeba wyeksportuje swoje wypociny.
    Ilość dostępnych komponentów jest naprawdę imponująca.
    Poniżej kilka przykładowych screen-ów:

    Układ elementów na płytce prototypowej

    Schemat ideowy


    Router płytek
    Apka wydaje się idealna do dokumentowania swoich prototypów.


    sobota, 19 września 2015

    WEBIOPI-GPIO via www

    W oczekiwaniu na kamerę do maliny. Zainstalowałem dziś ciekawe narzędzie WEBOPI do zarządzania GPIO przez interfejs www.
    Instalację tego softu przeprowadziłem przez "sklep" w X-ach Pi Store (dostępny po aktualizacji Raspbiana do najnowszej wersji).

    Pi Store
    Narzędzie oprócz interfejsu do prostego sterowania GPIO jest też świetnym frameworkiem do budowania własnych aplikacji z interfejsem webowym.
    Start usługi: sudo service webopi start
    Dostęp do interfejsu www: http://adres_maliny/webopi:8000
    Domyślny login i hasło: webopi/raspberry

    Interfejs WEBOPI

    piątek, 18 września 2015

    Oko dla na maliny 1 - czyli kamera via USB

    Dziś trochę zabawy z kamerą na USB
    Lista kompatybilnych z maliną kamer USB można znaleźć tu.
    Niestety moja wygrzebana z otchłani jakiejś szuflady  kamerka Labtec nie znajduje się na tej liście. Mimo wszystko spróbuję.


    Poleceniem cat /proc/devices wyświetlamy listę aktywnych urządzeń ja po wpięciu mojej kamery znalazłem coś takiego video4linux. W poradach które gdzieś wyczytałem powinienem się spodziewać urządzenia video lub video0 ale nic takiego nie mam.

    Pierwszy program jaki zamierzam przetestować to motion który udostępnia w prosty sposób obraz z kamery poprzez stronę www.
    Instalacja:

    • sudo apt-get install motion

    Konfiguracja:
    • sudo nano /etc/motion/motion.conf edycja parametrów programu, kamery i obrazu
    • sudo nano /etc/default/motion - zmieniamy wpis start_motion_daemon=no na start_motion_daemon=yes. 
    • sudo service motion start - uruchamiamy interfejs web.
    • http://[Ares IP RPi]:8081 - wywołanie obrazu w przeglądarce
    Efekt:
    Widok jaki udało mi się uzyskać po uruchomieniu motion :-(
    Po kilku próbach ustawień konfiguracji motion na RPi i na moim lapku doszedłem do wniosku, że ta kamerka nie jest widziana przez linuxy. Urządzenie vide4linux, które widzę w malinie to prawdopodobnie moduł do podłączenia oryginalnej kamery RPi.
    Na dziś zawieszam działalność w tym temacie. Poszukam innej kamery i do niego wrócę.



    środa, 16 września 2015

    Interfejs WiFi dla maliny

    Aby zapewnić swojemu botowi swobodą (wolną od kabla) komunikację,  zainstalowałem w malinie mikro kartę WiFi, w standardzie 802.11n, z interfejsem USB, firmy TP-link. Karta nie chciała zadziałać z nie upgrate-owną wersją systemu. Po aktualizacji wszystko zadziałało na zasadzie plug&play.






















    Konfigurując jej ustawienia poszedłem na łatwiznę i odpaliłem X-sy gdzie klikając w ikonkę sieci na pasku zadań wybrałem odpowiednią sieć z otoczenia i wprowadziłem właściwe hasło. Banał, a tyle radości ;-).