Jak podłączyć urządzenie przez moduł z przekaźnikami do Raspberry Pi lub płytki CM4 IO
Jak podłączyć urządzenie przez moduł z przekaźnikami do Raspberry Pi lub płytki CM4 IO
1 sierpnia 2023 · 7 min · 1303 słów · sysadmin
Spis treści
Przeprowadzę Cię przez kroki instalacji i konfiguracji w tym artykule, abyś mógł używać tego samego modułu z przekaźnikami do połączenia z Raspberry Pi lub płytą CM4 IO.
Oto film instruktażowy; kontynuuj czytanie, aby zobaczyć listę pisemnych instrukcji.
Zdecydowałem się połączyć pompę i wentylator za pomocą modułu z dwoma przekaźnikami, aby móc je kontrolować, ponieważ sterowanie pompą 5V nie jest możliwe, ponieważ nie jest to urządzenie PWM, a sterowanie wyłącznie wentylatorem Noctua 5V z PWM nie miało dla mnie większego sensu. Gdy temperatura wzrośnie powyżej ustalonego progu (na przykład 50 stopni Celsjusza), chciałem, aby oba urządzenia się włączyły, a chciałem, aby się wyłączyły, gdy temperatura spadnie poniżej ustalonego progu.
Z uwagi na to, że moje GND będzie stanem niskim (logicznym zerem) z PINów GPIO, nie podłączam GND z Raspberry Pi / CM4 IO.
Zasilanie obwodu jest tworzone przez jumper (zworę) łączącą JD-VCC z VCC oraz zasilanie optoizolatora z zasilaniem cewki przekaźnika. Możemy izolować obwód Raspberry Pi / CM4 od obwodu sterowania przekaźnikiem, jeśli usuniemy tę zworę. Należy wtedy podłączyć czerwony przewód z zewnętrznego źródła zasilania 5V do JD-VCC. Zwora powinna pozostać na miejscu, jeśli nie chcę używać zewnętrznego źródła zasilania dla przekaźników, ponieważ powoduje to zwiększenie obciążenia linii 5V Raspberry Pi / CM4 i powoduje (niewielkie
# pobieranie głównej biblioteki GPIOimportRPi.GPIOasGPIO# pobieranie biblioteki czasuimporttime# ustawienie aktualnego trybuGPIO.setmode(GPIO.BCM)# usunięcie ostrzeżeńGPIO.setwarnings(False)# utworzenie listy (tablicy) z numerami używanych GPIOpins=[12,13]# ustawienie trybu dla wszystkich pinów, aby wszystkie były włączoneGPIO.setup(pins,GPIO.OUT)# pętla for, gdzie pin = 12 następnie 13forpininpins:# ustawienie GPIO na HIGH lub 1 lub trueGPIO.output(pin,GPIO.HIGH)print("GPIO HIGH")# odczekaj 5 sekundtime.sleep(5)print("sleep")# ustawienie GPIO na LOW lub 0 lub falseGPIO.output(pin,GPIO.LOW)print("GPIO LOW")# odczekaj 5 sekundtime.sleep(5)print("sleep")# Sprawdzenie, czy aktualny przekaźnik działa i wyświetlenie tegoifnotGPIO.input(pin):print("Pin "+str(pin)+" działa")# to samo, ale różnica polega na tym, że mamy# pętlę for, gdzie pin = 12 następnie 13# w odwrotnej kolejnościprint("Wstecz")forpininreversed(pins):GPIO.output(pin,GPIO.HIGH)print("GPIO HIGH")time.sleep(5)print("sleep")GPIO.output(pin,GPIO.LOW)print("GPIO LOW")time.sleep(5)print("sleep")# oczyszczenie wszystkich GPIOGPIO.cleanup()print("Oczyszczenie GPIO")print("Zamknięcie wszystkich przekaźników")
Problemy opisane podczas procedury prototypowania.#
Problem niedonapięcia i przegrzewania pojawia się, gdy podłączamy więcej urządzeń - w moim przypadku wentylatory - do pinów GPIO Raspberry Pi / CM4, gdy mam podłączone dwa urządzenia przez moduł z przekaźnikami. Ekran podłączony przez HDMI staje się ciemny (obraz znika). Upewnij się, że jest odpowiednio zasilany i że to zachowanie jest normalne.
#!/usr/bin/python3# pobieranie biblioteki osimportos# pobieranie głównej biblioteki GPIOimportRPi.GPIOasGPIO# pobieranie biblioteki czasuimporttime# pobieranie biblioteki datetimeimportdatetime# pobieranie biblioteki sysimportsys# */1 * * * * cd /home/nazwa_użytkownika/ && sudo python3 relay.py# Co minutę, crontab będzie sprawdzać temperaturę.# Skrypt uruchomi wentylator i pompę, jeśli temperatura# wzrośnie powyżej 31 stopni Celsjusza i będzie to kontynuować,# aż spadnie poniżej 29 stopni Celsjusza. Skrypt następnie się zakończy,# wyłączając jednocześnie wentylator i pompę. Poprzedni skrypt zakończy się,# jeśli zostanie uruchomiony, podczas gdy nowy jest w trakcie działania,# pozostawiając Pi/CM4 w piekle i niezdolnym do zejścia poniżej liczby ACTION_END.# Zidentyfikuj piny obsługujące przekaźniki.FAN_PIN=12# GPIO dla wentylatoraPUMP_PIN=13# GPIO dla pompyPINS=[FAN_PIN,PUMP_PIN]# Tablica do obsługi wentylatora i pompy# Ustaw progi temperatury.ACTION_START=31ACTION_END=29# Pobierz jaką akcję. Jeśli ręcznie włączasz/wyłączasz wentylator i pompęaction=sys.argv.pop()defGPIOsetup():# usuwanie ostrzeżeńGPIO.setwarnings(False)# ustawianie aktualnego trybuGPIO.setmode(GPIO.BCM)# pętla for, gdzie pin = 12, następnie 13forpininPINS:# ustawianie trybu dla wszystkich pinów, więc wszystkie zostaną włączoneGPIO.setup(pin,GPIO.OUT)defdevicesON():GPIOsetup()forpininPINS:GPIO.output(pin,GPIO.LOW)#wentylator i pompa włączone. Ustawienie GPIO na LOW lub 0 lub falsereturn()defdevicesOFF():GPIOsetup()forpininPINS:GPIO.output(pin,GPIO.HIGH)#wentylator i pompa wyłączone. Ustawienie GPIO na HIGH lub 1 lub truereturn()# Pobierz temperaturę z systemudefget_temp_from_system():res=os.popen('vcgencmd measure_temp').readline()return(res.replace("temp=","").replace("'C\n",""))defcheck_devices():GPIOsetup()returnall(GPIO.input(pin)forpininPINS)defrun():current_date=datetime.datetime.now()temp=get_temp_from_system()iffloat(temp)>=ACTION_START:print(temp+' @ '+str(current_date))ifcheck_devices():print('Wentylator i pompa są wyłączone... Włączam je.')devicesON()else:print('Wentylator i pompa są włączone')eliffloat(temp)<=ACTION_END:print(temp+' @ '+str(current_date))ifnotcheck_devices():print('Wentylator i pompa są włączone... Wyłączam je.')devicesOFF()GPIO.cleanup()return1else:print('Wentylator i pompa są wyłączone')else:passifaction=="on":print('Włączam wentylator i pompę')devicesON()elifaction=="off":print('Wyłączam wentylator i pompę')devicesOFF()# najpierw sprawdź, czy skrypt już działaifnotcheck_devices():print('Wentylator i pompa są włączone, skrypt musi działać z innej instancji...')else:temp=get_temp_from_system()iffloat(temp)<ACTION_START:print('Pi/CM4 działa w normalnych temperaturach.')else:try:while(True):tmp=run()iftmp==1:breakexceptKeyboardInterrupt:devicesOFF()GPIO.cleanup()finally:devicesOFF()GPIO.cleanup()
Uruchamianie Skryptu Automatycznie Podczas Startu#
Teraz, kiedy skrypt działa, chcielibyśmy, aby robił to automatycznie, gdy komputer się uruchamia, ponieważ przestanie działać, jak tylko zamkniemy okno terminala. Użyjemy do tego crontab.
Wpisz następujące polecenie, aby uruchomić crontab:
1
crontab –e
Jeśli otwierasz crontab po raz pierwszy, zostaniesz poproszony o wybranie edytora; wybierz 1 i naciśnij enter.
Aby wykonać skrypt, dołącz następującą linię na końcu pliku:
Gdy skończysz, zapisz plik crontab, a następnie zrestartuj Pi/CM4, aby sprawdzić, czy wszystko działa jak należy.
Jeśli postępowałeś dokładnie według instrukcji, powinieneś teraz mieć funkcjonalny moduł z przekaźnikami, który uruchamia się za każdym razem, gdy Raspberry Pi / CM4 się uruchamia. Jeśli jeszcze tego nie zrobiłeś, możesz od razu umieścić go w swojej obudowie.
Proszę podziel się swoimi przemyśleniami na temat tego poradnika w przestrzeni poniżej. Proszę podziel się swoimi przemyśleniami i rekomendacjami ze mną.
Comments