Indholdsfortegnelse:

Byg en bedre Raspberry Pi -afbryderknap: 4 trin
Byg en bedre Raspberry Pi -afbryderknap: 4 trin

Video: Byg en bedre Raspberry Pi -afbryderknap: 4 trin

Video: Byg en bedre Raspberry Pi -afbryderknap: 4 trin
Video: How to make a LED digital counter using 7- Segment Display 2024, November
Anonim
Image
Image

Det er meget let at lave en hindbær-sluk- eller nedlukningsknap. Der er masser af sådanne projekter på nettet og et par stykker her på Instructables, men ingen af dem (som jeg kan se) fortæller dig, hvornår din Pi faktisk er færdig med at lukke ned, og derfor er det sikkert at trække strømmen. Faktisk erkender de ikke engang, at knappen er blevet set.

Der er også projekter til at genstarte en Pi, der er blevet lukket, men disse giver dig heller ingen visuel feedback.

Men hvem har brug for sådan en knap? Hvis du er lidt af en nørd som mig, eller endda bare en håbefuld nørd, kan du altid logge ind på din Pi lokalt eller over netværket og skrive sudo shutdown -h nu. Men hvis du bygger et projekt til ikke-tekniske brugere, gør det bare ikke. Sandt nok kan du næsten altid slippe af sted med bare at trække i netledningen, men bemærk, jeg sagde næsten altid! Alles held løber op før eller siden. Jeg havde et SD -kort dø på mig kun i sidste uge, selvom jeg aldrig ved, om det virkelig skyldtes et pludseligt strømtab.

I mit tilfælde havde jeg brug for at tilføje en tænd / sluk -knap til en Pi, vi bruger som midi -sequencer til indspilning og afspilning af salmer og sange i kirken, når vi ikke har en live pianist til rådighed. Jeg kan altid skrive nedlukningskommandoen, men jeg er nødt til at beherske den, når jeg ikke er der.

Min hensigt her er ikke at give dig et færdigt produkt, komplet med smukt 3D -trykt etui, som så mange andre instruktioner. Alle vil have en anden anvendelse til det eller ønsker at indarbejde i deres eget projekt. Jeg vil hellere konfigurere dig med den teknologi, du kan føje til dit projekt, uanset om det er et mediecenter, en IoT -enhed eller noget andet.

(I videoen demonstrerer jeg det med en Pi Zero v1.2 og en skærm, jeg lavede fra en repurposed bærbar skærm og en controller fra Fjernøsten.)

Trin 1: Designet

Hvordan det virker
Hvordan det virker

Dette er hvad min tænd / sluk -knap vil gøre for dig:

  • Når Pi kører, lyser en LED konstant. Hvis den lukkes manuelt, slukker LED'en kun, når det er sikkert at tage strømmen ud.
  • Mens du kører, mens du trykker på knappen i mindst et sekund, startes en nedlukning, og LED'en blinker i et kvart sekund hvert sekund, indtil det er sikkert at afbryde strømmen.
  • Fra en lukningstilstand (hvis strømmen ikke er blevet fjernet) starter det ved at trykke på knappen, og LED'en tændes i et kvart sekund hvert sekund, indtil den er startet op. (Det kan tage lidt længere tid, indtil alle tjenester såsom ssh og vnc kører.)

Komponenterne er meget billige. Alt du har brug for er:

  • ATTiny85 (Arduino-kompatibel chip)
  • 3 modstande: 2 x 330Ω og 1 x 10kΩ
  • 1 LED - jeg foreslår grøn eller blå, men det er dit valg
  • brødbræt og jumperwire eller stripboard, eller som du vil bygge det.

Trin 2: Sådan fungerer det

Som med alle Pi -strømknapper trækker denne en GPIO -pin til en lav tilstand for at signalere en nedlukningsanmodning til et hjælperprogram, der kører på Pi. Jeg brugte GPIO4 (pin 7), men du kan bruge enhver anden pin.

Den eneste måde at fortælle, at en Pi har afsluttet nedlukning, er ved at se TxD pin 8, som derefter går lavt. Dette afhænger af, at den serielle konsol er aktiveret, hvilket den som standard er. Faktisk vil TxD regelmæssigt gå op og ned, mens det bruges som en seriel konsol, men det vil aldrig gå lavt i mere end omkring 30 ms ad gangen, selv ved den langsomste fælles baudhastighed. Det kan stadig bruges til en seriel konsol, da vi bare passivt ser det.

For at genstarte skal vi kortvarigt trække SCL1 (pin 5) lavt. Denne pin bruges af alle I2C -enheder (inklusive min midi -grænseflade), men efter start af boot lader vi den være i fred.

Det meste af kompleksiteten er i Arduino -skitsen, som vi indlæser i ATTiny85. Dette implementerer en "tilstandsmaskine" - en meget nyttig og kraftfuld måde at kode ethvert problem, der kan repræsenteres af en række "tilstande". En vaskemaskine fungerer på samme måde. Tilstandene repræsenterer trinene i vaskecyklussen, og hver definerer, hvad maskinen skal gøre på det tidspunkt (motorer eller pumper, der skal køres, ventiler, der skal åbnes eller lukkes), og hvilke sensorindgange (temperatur, vandstand, timere) bestemme, hvornår der skal flyttes til den næste tilstand, og hvilken næste tilstand der skal vælges.

Håndskitsen er mit første udkast til et tilstandsdiagram, der viser alle tilstandsovergange. Dette er bare for at vise dig, hvordan du i første omgang kan planlægge dine tilstande og tilstandsovergange - det er muligvis ikke helt præcist, som det var før jeg begyndte at fejlsøge.

I vores tilfælde har vi 6 tilstande, som jeg har kaldt OFF, BOOT Request, BOOTING, RUNNING, SHUTDOWN Request og SHUTTING DOWN. (Efter NEDLUKNING flytter den tilbage til OFF.) Disse identificeres ved kommentarer i skitsen, og for hver siger yderligere kommentarer, hvad den skal gøre, og hvilke hændelser der vil flytte den til en anden tilstand.

Hjælperprogrammet, der kører på Pi, er bare lidt mere kompliceret end for de fleste nedlukningsknapper. Det reagerer på en lang lav puls på GPIO -stiften ved at starte en nedlukning, men den reagerer også på en kort puls ved i sig selv at trække kort i GPIO -knappen kort. Sådan kan ATTiny85 fortælle, at den kører, og at den kan flytte sig fra BOOTING til RUNNING -tilstand.

Trin 3: Opbygning af en demo -prototype

Bygger en demo -prototype
Bygger en demo -prototype
Bygger en demo -prototype
Bygger en demo -prototype
Bygger en demo -prototype
Bygger en demo -prototype

Af demonstrationsmæssige årsager kan du prototype det på et loddet brødbræt som vist, men jeg har også givet dig skematikken, så du kan udarbejde dit eget layout ved hjælp af stripboard eller et brugerdefineret printkort, måske en del af et bredere projekt.

Trin 4: Programmering af ATTiny85

Arduino -skitsen og hjælperprogrammet er knyttet til dette trin. I din Arduino sketches -mappe skal du oprette en mappe kaldet PiPwr og kopiere filen PiPwr.ino til den. Når du lancerer Arduino IDE, finder du den nu i din skitsebog.

Der er flere måder at programmere en ATTiny85 på. Hvis din har en bootloader installeret, kan du bruge et ATTiny85 -udviklingsbræt, der kun koster et par pund. Dette opretter forbindelse til din pc via en USB -port. Jeg brugte en Hidiot, som stort set er den samme, men med et prototyperingsområde.

I Arduino IDE under File - Preferences, tilføj

digistump.com/package_digistump_index.json

til Supplerende bestyrelsesmanagers webadresser.

Under Værktøjer - Board skal du nu se en række Digispark -muligheder. Vælg Digispark (standard - 16,5 MHz).

Hvis din ATTiny85 ikke har en bootloader (eller du ikke ved det), kan du få en AVR ISP -programmer til et par kilo. Eller du kan bruge en Arduino Uno eller billigere Pro Mini eller Nano som programmerer. Google til "arduino as isp attiny85" (uden citater) for vejledning.

Hvis du vil ændre skitsen, finder du den fuldt kommenteret og forhåbentlig let at følge. Til fejlfinding er det meget lettere at bruge en Arduino Pro Mini eller Nano. Fjern kommentaren til serial.begin () i Setup og udskriftssætningerne i loop () for at se de trin, den gennemgår ved hjælp af den serielle monitor. Der er alternative pin -definitioner i kilden, kommenteret ud, for en Uno, Pro Mini eller Nano.

På din Raspberry Pi skal du kopiere filen shutdown_helper.py til mappen/etc/local/bin og angive den som eksekverbar med kommandoen

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

Rediger nu filen /etc/rc.local med din foretrukne editor. (Du skal gøre det som root.) Før den sidste linje (afslut 0) skal du indsætte linjen

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

Genstart, og hjælperprogrammet starter automatisk.

Anbefalede: