Cykl poświęcony moim perypetiom przy nauce podstaw elektroniki. Tym razem opisuje swoją próbę zrobienia prowizorycznego koguta policyjnego przy użyciu 2 diód led oraz buzzera.
Przygotowania
Znajomość pythona będzie bardzo pomocna. Jeśli nie ogarniasz w ogóle tego języka programowania to bez obaw - kilkugodzinny kurs na Codecademy powinien być wystarczający nawet jeśli wcześniej nie miałeś/miełaś do czynienia z programowaniem. Zdecydowałem się skorzystać z wersji trzeciej (wersja druga odchodzi do lamusa) oraz paczki pythonowej RPi.GPIO do sterowania pinami. W tym celu najpierw zainstalowałem pythonowego menedżera pakietów pip na malince
sudo apt install python3-pip
a później doinstalowałem RPi.GPIO
sudo pip3 install RPi.GPIO
Dodatkowo zainstalowałem również ipythona - to interaktywny shell z możliwością autouzupełniania, sporo wygodniejszy od domyślnej powłoki w pythonie.
sudo pip3 install ipython
Test
Zanim przeszedłem do wykonania zaplanowanego zadania, postanowiłem przeprowadzić mały test by sprawdzić czy wszystko jest w porządku.
Podłączyłem płytkę do pinu piątego i uziemienie do pinu 6. Następnie przeszedłem do powłoki pythonowej
sudo ipython3
oraz wpisałem po kolei:
# import paczki do sterownia pinami
import RPi.GPIO as GPIO
'''
ustawienie sposobu dostępu do pinów:
BOARD - oznacza numeracje w odniesieniu do układu fizycznych pinów na płytce
BCM - oznacza numeracje w odniesieniu do "Broadcom SOC channel"
na przykład fizyczny pin o numerze 5 ma numer BCM równy 3
'''
GPIO.setmode(GPIO.BOARD)
# ustawinie trybu pinu - out (emisja) albo in (czytanie)
GPIO.setup(5, GPIO.OUT)
# emisja napięcia 3.3V na pinie 5
GPIO.output(5, GPIO.HIGH)
Jak widać działa, na końcu po sobie posprzątałem
GPIO.cleanup()
Policyjny kogut
By stworzyć policyjnego koguta wykorzystałem dwie diody led - jedną czerwoną a drugą niebieską. Pierwszą podłączyłem do pinu nr 5, a drugą do pinu nr 38. Obie diody posiadają wspólne uziemienie i zgodnie z zaleceniami w komentarzach dołączyłem ryzystory by zabezpieczyć piny w malince. Do realizacji zadania wyskrobałem również poniższy skrypt w pythonie 3.
from time import sleep
import RPi.GPIO as GPIO
blue_led_pin = 5
red_led_pin = 38
def setup(blue_led_pin, red_led_pin):
GPIO.setmode(GPIO.BOARD)
GPIO.setup(blue_led_pin, GPIO.OUT)
GPIO.setup(red_led_pin, GPIO.OUT)
def police_lights(blue_led_pin, red_led_pin, sleep_time):
GPIO.output(blue_led_pin, GPIO.HIGH)
GPIO.output(red_led_pin, GPIO.LOW)
sleep(sleep_time)
GPIO.output(red_led_pin, GPIO.HIGH)
GPIO.output(blue_led_pin, GPIO.LOW)
sleep(sleep_time)
setup(blue_led_pin, red_led_pin)
try:
while True:
police_lights(blue_led_pin, red_led_pin, 0.4)
except KeyboardInterrupt:
GPIO.cleanup()
- Funkcja
setupustawia tryb pinów oraz sposób interpretacji numeracji - Funkcja
police_lightsprzełącza stan pinów na niski bądź wysoki w zależności od kolejności i jest uruchomiona w nieskończonej pętli by wywołąć efekt zmieniających się świateł. Można zakończyć działanie skryptu kombinacją klawiszy CTRL+C - Funkcja
sleepz pakietutimesłuży do zatrzymywania wykonywania kodu na określony czas podany w sekundach
Dodatkowo dla bajeru dodałem efekty dźwiekowy wykorzystując buzzer podłączony do pinu 5v - uwaga na uszy :)