Junior i elektronika: Policyjny kogut

Words
276
Reading
2 min
Listen
Play
9y

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 setup ustawia tryb pinów oraz sposób interpretacji numeracji
  • Funkcja police_lights przełą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 sleep z pakietu time sł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 :)

Junior i elektronika: Policyjny kogut | Ecency