Cuprins:

Construiți un buton de alimentare Raspberry Pi mai bun: 4 pași
Construiți un buton de alimentare Raspberry Pi mai bun: 4 pași

Video: Construiți un buton de alimentare Raspberry Pi mai bun: 4 pași

Video: Construiți un buton de alimentare Raspberry Pi mai bun: 4 pași
Video: BigTreeTech - Manta - M8P - Basics 2024, Noiembrie
Anonim
Image
Image

Este foarte ușor să creați un buton de oprire sau oprire Raspberry. Există o mulțime de astfel de proiecte pe web și câteva aici pe Instructables, dar niciunul dintre ele (pe care îl văd) nu vă spune când Pi-ul dvs. a terminat de fapt închiderea și, prin urmare, este sigur să trageți puterea. De fapt, nici măcar nu recunosc că a fost văzut apăsarea butonului.

Există și proiecte pentru a reporni un Pi care a fost închis, dar nici acestea nu vă oferă feedback vizual.

Dar cine are nevoie de un astfel de buton? Dacă sunteți un tocilar ca mine sau chiar un aspirant la tocilar, vă puteți conecta oricând la Pi-ul dvs. local sau prin rețea și tastați sudo shutdown -h acum. Dar dacă construiți un proiect pentru utilizatori non-tehnici, acest lucru nu va funcționa. Este adevărat, aproape întotdeauna puteți scăpa doar trăgând cablul de alimentare, dar rețineți, am spus aproape întotdeauna! Norocul tuturor se epuizează mai devreme sau mai târziu. Am avut un card SD pe mine abia săptămâna trecută, deși nu voi ști niciodată dacă a fost sau nu din cauza unei pierderi bruste de energie.

În cazul meu, trebuia să adaug un buton de pornire la un Pi pe care îl folosim ca un sequencer midi pentru înregistrarea și redarea imnurilor și cântecelor în biserică, pentru când nu avem disponibil un pianist live. Pot oricând să tastați comanda de oprire, dar trebuie să o abat pentru când nu sunt acolo.

Intenția mea aici nu este să vă ofer un produs finit, completat cu o carcasă imprimată 3D frumos, la fel ca multe alte instrumente. Toată lumea va avea o utilizare diferită pentru aceasta sau va dori să o integreze în propriul proiect. Mai degrabă, vă voi seta cu tehnologia pe care o puteți adăuga la proiectul dvs., fie că este vorba de un centru media, un dispozitiv IoT sau orice altceva.

(În videoclip o demonstrez cu un Pi Zero v1.2 și un monitor pe care l-am realizat dintr-un ecran de laptop reconfigurat și un controler din Extremul Orient.)

Pasul 1: Proiectarea

Cum functioneaza
Cum functioneaza

Iată ce va face butonul meu de pornire pentru tine:

  • Când Pi rulează, un LED este aprins continuu. Dacă este oprit manual, LED-ul se stinge numai atunci când este sigur să deconectați alimentarea.
  • În timp ce funcționați, dacă apăsați butonul timp de cel puțin o secundă, este declanșată o oprire și LED-ul luminează intermitent timp de un sfert de secundă în fiecare secundă până când este sigur să deconectați alimentarea.
  • Dintr-o stare de oprire (dacă alimentarea nu a fost scoasă), apăsarea butonului pornește pornirea și aprinde LED-ul timp de un sfert de secundă în fiecare secundă până când este pornit. (Poate dura ceva mai mult până când toate serviciile precum ssh și vnc rulează.)

Componentele sunt foarte ieftine. Tot ce ai nevoie este:

  • ATTiny85 (cip compatibil Arduino)
  • 3 rezistențe: 2 x 330Ω și 1 x 10kΩ
  • 1 LED - Vă sugerez verde sau albastru, dar este alegerea dvs.
  • firele de panou și jumper, sau panourile, sau oricum doriți să le construiți.

Pasul 2: Cum funcționează

Ca și în cazul tuturor butoanelor de alimentare Pi, acesta trage un pin GPIO într-o stare joasă pentru a semnala o cerere de oprire unui program de asistență care rulează pe Pi. Am folosit GPIO4 (pinul 7), dar puteți utiliza orice alt pin.

Singura modalitate de a spune că un Pi a terminat oprirea este vizionând pinul TxD 8, care apoi scade. Acest lucru depinde de activarea consolei seriale, care este în mod implicit. De fapt, TxD va merge în mod regulat în sus și în jos în timp ce este folosit ca o consolă serială, dar nu va scădea niciodată mai mult de aproximativ 30mS la un moment dat, chiar și la cea mai lentă rată de transmisie comună. Poate fi încă folosit pentru o consolă serială, pe măsură ce o urmărim pasiv.

Pentru a reporni, trebuie să tragem scurt SCL1 (pinul 5) jos. Acest pin este utilizat de orice dispozitiv I2C (inclusiv interfața mea midi), dar după inițierea boot-ului îl lăsăm în pace.

Cea mai mare parte a complexității se află în schița Arduino pe care o încărcăm în ATTiny85. Aceasta implementează o „mașină de stări” - un mod foarte util și puternic de codificare a oricărei probleme care poate fi reprezentată de un număr de „stări”. O mașină de spălat funcționează la fel. Stările reprezintă etapele ciclului de spălare și fiecare definește ce ar trebui să facă mașina în acel moment (motoare sau pompe care trebuie să funcționeze, supape care să fie deschise sau închise) și ce intrări ale senzorului (temperatura, nivelul apei, temporizatoarele) stabiliți când să treceți la următoarea stare și ce stare următoare alegeți.

Schița manuală este prima mea schiță a unei diagrame de stare, care arată toate tranzițiile de stare. Acest lucru este doar pentru a vă arăta cum vă puteți planifica inițial stările și tranzițiile de stare - este posibil să nu fie complet corect, așa cum era înainte de a începe depanarea.

În cazul nostru, avem 6 stări pe care le-am numit OPRIT, CERERE DE BOTĂ, BOTARE, RUNNING, CERERE DE OPRIRE și OPRIRE. (După OPRIRE JOS se mută înapoi la OPRIT.) Acestea sunt identificate prin comentarii în schiță și, pentru fiecare, alte comentarii spun ce ar trebui să facă și ce evenimente îl vor muta într-o altă stare.

Programul de asistență care rulează pe Pi este doar puțin mai complicat decât pentru majoritatea butoanelor de oprire. Răspunde la un impuls mic lung pe pinul GPIO prin inițierea unei opriri, dar, de asemenea, răspunde la un impuls scurt prin el însuși trăgând scurt pinul GPIO jos. Acesta este modul în care ATTiny85 poate spune că funcționează și, prin urmare, poate trece de la starea BOOTING la RUNNING.

Pasul 3: Construirea unui prototip Demo

Construirea unui prototip Demo
Construirea unui prototip Demo
Construirea unui prototip Demo
Construirea unui prototip Demo
Construirea unui prototip Demo
Construirea unui prototip Demo

În scop demonstrativ, îl puteți prototipa pe o placă fără sudură, așa cum se arată, dar v-am oferit și schema, astfel încât să vă puteți elabora propriul aspect folosind o placă de bord sau un PCB personalizat, poate parte dintr-un proiect mai larg.

Pasul 4: Programarea ATTiny85

Schița Arduino și programul de asistență sunt atașate la acest pas. În folderul de schițe Arduino, creați un folder numit PiPwr și copiați fișierul PiPwr.ino în el. Lansând Arduino IDE, îl veți găsi acum în caietul de schițe.

Există mai multe moduri de programare a unui ATTiny85. Dacă aveți instalat un bootloader, puteți utiliza o placă de dezvoltare ATTiny85 care costă doar câteva lire sterline. Aceasta se conectează la computerul dvs. printr-un port USB. Am folosit un Hidiot care este în esență același, dar cu o zonă de prototipare.

În IDE-ul Arduino sub Fișier - Preferințe, adăugați

digistump.com/package_digistump_index.json

la adresele URL ale managerului de panouri suplimentare.

Sub Tools - Board ar trebui să vedeți acum o serie de opțiuni Digispark. Selectați Digispark (implicit - 16,5 MHz).

Dacă ATTiny85 nu are un bootloader (sau nu știți), atunci puteți obține un programator AVR ISP pentru câteva kilograme. Sau puteți utiliza un Arduino Uno sau Pro Mini sau Nano mai ieftin ca programator. Google pentru „arduino as isp attiny85” (fără ghilimele) pentru instrucțiuni.

Dacă doriți să modificați schița, o veți găsi complet comentată și, sperăm, ușor de urmat. Pentru depanare este mult mai ușor să folosiți un Arduino Pro Mini sau Nano. Decomentați serial.begin () în Setup și declarațiile de tipărire în buclă () pentru a vedea pașii pe care îi parcurge folosind monitorul serial. Există surse de definiții alternative în sursă, comentate, pentru un Uno, Pro Mini sau Nano.

Pe Raspberry Pi, copiați fișierul shutdown_helper.py în folderul / etc / local / bin și setați-l ca executabil cu comanda

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

Acum editați fișierul /etc/rc.local cu editorul dvs. preferat. (Va trebui să faceți acest lucru ca rădăcină.) Înainte de ultima linie (ieșirea 0) introduceți linia

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

Reporniți, iar programul de asistență va porni automat.

Recomandat: