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.