Spisu treści:

Zbuduj lepszy przycisk zasilania Raspberry Pi: 4 kroki
Zbuduj lepszy przycisk zasilania Raspberry Pi: 4 kroki

Wideo: Zbuduj lepszy przycisk zasilania Raspberry Pi: 4 kroki

Wideo: Zbuduj lepszy przycisk zasilania Raspberry Pi: 4 kroki
Wideo: Zbuduj darmowy serwer NAS z OpenMediaVault - Instalacja na VM oraz nowym Raspberry Pi 5 2024, Grudzień
Anonim
Image
Image

Bardzo łatwo jest zrobić przycisk wyłączania lub wyłączania Raspberry. W Internecie jest wiele takich projektów, a kilka tutaj w Instructables, ale żaden z nich (który widzę) nie powie ci, kiedy Twoje Pi faktycznie się wyłączyło, a zatem można bezpiecznie wyciągnąć zasilanie. W rzeczywistości nawet nie przyznają, że naciśnięcie przycisku było widziane.

Istnieją również projekty ponownego uruchomienia Pi, które zostało zamknięte, ale nie dają one żadnej wizualnej informacji zwrotnej.

Ale kto potrzebuje takiego przycisku? Jeśli jesteś trochę frajerem jak ja, a nawet początkującym nerdem, zawsze możesz zalogować się do swojego Pi lokalnie lub przez sieć i wpisać sudo shutdown -h teraz. Ale jeśli tworzysz projekt dla nietechnicznych użytkowników, to po prostu nie wystarczy. To prawda, że prawie zawsze możesz uciec, po prostu ciągnąc za przewód zasilający, ale pamiętaj, że prawie zawsze mówiłem! Wszystkim prędzej czy później kończy się szczęście. Miałem przy sobie kartę SD tylko w zeszłym tygodniu, chociaż nigdy się nie dowiem, czy to naprawdę z powodu nagłej utraty zasilania.

W moim przypadku musiałem dodać przycisk zasilania do Pi, którego używamy jako sekwencer midi do nagrywania i odtwarzania hymnów i piosenek w kościele, gdy nie mamy dostępnego żywego pianisty. Zawsze mogę wpisać polecenie wyłączenia, ale muszę go oduczyć, gdy mnie tam nie ma.

Moim zamiarem tutaj nie jest danie Ci gotowego produktu, wraz z pięknie wydrukowanym w 3D etui, jak wiele innych Instruktażów. Każdy będzie miał dla niego inny użytek lub będzie chciał włączyć go do własnego projektu. Raczej skonfiguruję ci technologię, którą możesz dodać do swojego projektu, niezależnie od tego, czy będzie to centrum multimedialne, urządzenie IoT, czy cokolwiek innego.

(Na filmie demonstruję to z Pi Zero v1.2 i monitorem, który zrobiłem z przerobionego ekranu laptopa i kontrolera z Dalekiego Wschodu.)

Krok 1: Projekt

Jak to działa
Jak to działa

Oto, co zrobi dla ciebie mój przycisk zasilania:

  • Gdy Pi działa, dioda LED świeci się w sposób ciągły. Jeśli zostanie wyłączony ręcznie, dioda LED zgaśnie tylko wtedy, gdy można bezpiecznie odłączyć zasilanie.
  • Podczas pracy, jeśli naciśniesz przycisk przez co najmniej sekundę, zostanie zainicjowane wyłączenie, a dioda LED będzie migać przez ćwierć sekundy co sekundę, aż będzie można bezpiecznie odłączyć zasilanie.
  • Od stanu wyłączenia (jeśli zasilanie nie zostało odłączone), naciśnięcie przycisku uruchamia jego uruchamianie i miga diodę LED przez ćwierć sekundy co sekundę, aż do uruchomienia. (Może potrwać trochę dłużej, zanim wszystkie usługi, takie jak ssh i vnc, zostaną uruchomione).

Komponenty są bardzo tanie. Wszystko czego potrzebujesz to:

  • ATTiny85 (chip kompatybilny z Arduino)
  • 3 oporniki: 2 x 330Ω i 1 x 10kΩ
  • 1 LED - proponuję zielony lub niebieski, ale to Twój wybór
  • Płytka stykowa i przewody połączeniowe lub stripboard, lub jakkolwiek chcesz to zbudować.

Krok 2: Jak to działa

Podobnie jak w przypadku wszystkich przycisków zasilania Pi, ten przełącza pin GPIO do stanu niskiego, aby zasygnalizować żądanie wyłączenia programu pomocniczego działającego na Pi. Użyłem GPIO4 (pin 7) ale możesz użyć dowolnego innego pinu.

Jedynym sposobem na stwierdzenie, że Pi zakończyło zamknięcie, jest obserwacja pinu 8 TxD, który następnie spada. Zależy to od włączonej konsoli szeregowej, którą jest domyślnie. W rzeczywistości TxD będzie regularnie wznosić się i opadać, gdy jest używany jako konsola szeregowa, ale nigdy nie spadnie o więcej niż około 30 ms na raz, nawet przy najwolniejszej wspólnej szybkości transmisji. Nadal może być używany do konsoli szeregowej, ponieważ po prostu pasywnie go oglądamy.

Aby zrestartować, musimy na chwilę wyciągnąć SCL1 (pin 5) w dół. Ten pin jest używany przez dowolne urządzenia I2C (w tym mój interfejs midi), ale po zainicjowaniu bootowania zostawiamy go w spokoju.

Większość złożoności znajduje się w szkicu Arduino, który ładujemy do ATTiny85. Wprowadza to "maszynę stanów" - bardzo użyteczny i potężny sposób kodowania każdego problemu, który może być reprezentowany przez kilka "stanów". Pralka działa w ten sam sposób. Stany reprezentują etapy cyklu zmywania, a każdy z nich określa, co maszyna powinna robić w danym momencie (silniki lub pompy, które mają zostać uruchomione, zawory, które należy otworzyć lub zamknąć) oraz jakie wejścia czujników (temperatura, poziom wody, zegary) określić, kiedy przejść do następnego stanu i który następny stan wybrać.

Szkic dłoni jest moim pierwszym szkicem diagramu stanów, pokazującym wszystkie przejścia stanów. To jest tylko po to, aby pokazać, jak możesz wstępnie zaplanować swoje stany i przejścia między stanami - może to nie być całkowicie dokładne, jak to było przed rozpoczęciem debugowania.

W naszym przypadku mamy 6 stanów, które nazwałem OFF, BOOT REQUEST, BOOTING, RUNNING, SHUTDOWN REQUEST i SHUTTING DOWN. (Po WYŁĄCZENIU przełącza się z powrotem na WYŁ.) Są one identyfikowane przez komentarze w szkicu, a dla każdego kolejne komentarze mówią, co powinien robić i jakie zdarzenia przeniosą go do innego stanu.

Program pomocniczy działający na Pi jest nieco bardziej skomplikowany niż w przypadku większości przycisków zamykania. Reaguje na długi niski impuls na pinie GPIO, inicjując wyłączenie, ale sam reaguje również na krótki impuls, przez krótki czas obniżając pin GPIO. W ten sposób ATTiny85 może stwierdzić, że jest uruchomiony, a więc może przejść ze stanu URUCHAMIANIA do stanu PRACY.

Krok 3: Budowa prototypu demonstracyjnego

Budowanie prototypu demonstracyjnego
Budowanie prototypu demonstracyjnego
Budowanie prototypu demonstracyjnego
Budowanie prototypu demonstracyjnego
Budowanie prototypu demonstracyjnego
Budowanie prototypu demonstracyjnego

W celach demonstracyjnych możesz wykonać prototyp na płytce stykowej bez lutowania, jak pokazano, ale dałem ci również schemat, dzięki czemu możesz opracować własny układ za pomocą stripboardu lub niestandardowej płytki drukowanej, być może część szerszego projektu.

Krok 4: Programowanie ATTiny85

Do tego kroku dołączony jest szkic Arduino i program pomocniczy. W folderze szkiców Arduino utwórz folder o nazwie PiPwr i skopiuj do niego plik PiPwr.ino. Uruchamiając Arduino IDE, znajdziesz je teraz w swoim szkicowniku.

Istnieje kilka sposobów programowania ATTiny85. Jeśli masz zainstalowany bootloader, możesz użyć płytki rozwojowej ATTiny85 kosztującej tylko kilka funtów. To łączy się z komputerem przez port USB. Użyłem Hidiota, który jest zasadniczo taki sam, ale z obszarem prototypowania.

W Arduino IDE w menu Plik - Preferencje dodaj

digistump.com/package_digistump_index.json

do adresów URL menedżera tablic dodatkowych.

W menu Narzędzia - Tablica powinieneś teraz zobaczyć kilka opcji Digispark. Wybierz Digispark (domyślnie - 16,5 MHz).

Jeśli twój ATTiny85 nie ma bootloadera (lub nie wiesz), możesz dostać programator AVR ISP za kilka funtów. Lub możesz użyć Arduino Uno lub tańszego Pro Mini lub Nano jako programatora. Google dla "arduino as isp attiny85" (bez cudzysłowów) dla instrukcji.

Jeśli chcesz zmodyfikować szkic, znajdziesz go w pełni skomentowany i, miejmy nadzieję, łatwy do naśladowania. Do debugowania znacznie łatwiej jest użyć Arduino Pro Mini lub Nano. Odkomentuj serial.begin() w Instalatorze i instrukcje print w loop(), aby zobaczyć kroki, przez które przechodzi przy użyciu monitora szeregowego. W źródle znajdują się alternatywne definicje pinów, zakomentowane, dla Uno, Pro Mini lub Nano.

Na swoim Raspberry Pi skopiuj plik shutdown_helper.py do folderu /etc/local/bin i ustaw go jako wykonywalny za pomocą polecenia

sudo chmod +x /usr/local/bin/shutdown_helper.py

Teraz edytuj plik /etc/rc.local swoim ulubionym edytorem. (Musisz to zrobić jako root.) Przed ostatnią linią (exit 0) wstaw linię

nohup /usr/local/bin/shutdown_helper.py &

Uruchom ponownie, a program pomocniczy uruchomi się automatycznie.

Zalecana: