Po zakupie Raspberry Pi Zero W i skonstruowaniu pierwszego drobnego projektu złożonego z gotowych elementów postanowiłem zainteresować się nieco elektroniką i budową własnych układów.
Długo zastanawiałem się nad tym co chciałbym zbudować. Projekt powinien składać się z różnych elementów współgrających ze sobą. Dodatkowo wszystko powinno być połączone logiką napisaną w Pythonie. Na koniec ważne jest, żeby nie kosztował mnie majątku.
W końcu wpadłem na pomysł zbudowania elektronicznej skarbonki. Projekt jest jeszcze w fazie planowania, jednak jednej rzeczy byłem pewien od samego początku: muszę w jakiś sposób wykryć ruch monety aby cała reszta zaczęła działać.
Wykrywanie ruchu na niewielkiej odległości
Istnieje wiele możliwości na wykrycie ruchu. Koniec końców wybór padł na niedrogi czujnik przerwania wiązki z diodą 3mm. Zasada jego działania jest bardzo prosta: nadajnik wysyła wiązkę podczerwieni w kierunku odbiornika, który za pomocą trzeciego kabla (białego) podaje wysoki lub niski stan w zależności od tego czy wiązka została przerwana czy nie.

Czujnik może być zasilany napięciem 3.3V lub 5V, więc nadaje się idealnie do projektów opartych o Raspberry Pi. Podłączając czujnik do wyższego napięcia można wykrywać przerwanie wiązki na dalszej odległości.
Podłączenie czujnika do Raspberry Pi
Nie mając zbyt dużego pojęcia o elektronice nieco obawiałem się pierwszego podejścia do własnoręcznego podpinania podzespołów. Dodatkowo w internecie nie mogłem znaleźć żadnego przykładu podłączenia do Raspberry Pi. Ostatecznie całość połączyłem w oparciu o poradnik do Arduino odpowiednio go dostosowując. Ku mojemu zaskoczeniu, wszystko zadziałało za pierwszym razem.


Przykładowy kod
#!/usr/bin/python
'''
Autor: Krzysztof Grabania
Źródło: https://grabania.pl/
Data: 2019-08-10
Przykładowy kod podłączenia czujnika przerwania wiązki do Raspberry Pi.
Biały kabel odbiornika należy podłączyć do pinu 12 w Raspberry Pi.
Zmienna STATE wskazuje na aktualny stan wiązki:
- True: wiązka jest połączona
- False: wiązka została przerwana
'''
import RPi.GPIO as GPIO
# Pin w Raspberry Pi służacy do odczytu danych
RECEIVER_PIN = 12
# Domyślny stan połączenia wiązki
STATE = True
GPIO.setmode(GPIO.BOARD)
# Ustaw pin odbiornika w trybie odczytu danych
GPIO.setup(RECEIVER_PIN, GPIO.IN)
while True:
# Odczytaj stan pinu odbiornika
NEW_STATE = GPIO.input(RECEIVER_PIN)
# Jeśli nowy stan różni się od poprzedniego
if (STATE != NEW_STATE):
# Zapisz nowy stan
STATE = NEW_STATE
# Wyświetl informacje o aktualnym stanie wiązki
if (STATE == False):
print('Przewanie wiazki')
else:
print('Polaczenie wiazki')
Prezentacja działania
Już wkrótce.
Autorem obrazka wyróżniającego jest Gerardo Barreto z serwisu Unsplash.