Inhoudsopgave:
- Stap 1: Het ontwerp
- Stap 2: Hoe het werkt
- Stap 3: Een demo-prototype bouwen
- Stap 4: Programmeren van de ATtiny85
Video: Bouw een betere Raspberry Pi-aan / uit-knop - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Het is heel eenvoudig om een Raspberry power-off of shutdown-knop te maken. Er zijn veel van dergelijke projecten op internet en een paar hier op Instructables, maar geen van hen (die ik kan zien) vertelt je wanneer je Pi daadwerkelijk is uitgeschakeld en daarom is het veilig om de stroom eruit te halen. In feite erkennen ze niet eens dat de druk op de knop is gezien.
Er zijn ook projecten om een Pi die is afgesloten opnieuw op te starten, maar deze geven je ook geen visuele feedback.
Maar wie heeft zo'n knop nodig? Als je een beetje een nerd bent zoals ik, of zelfs maar een aspirant-nerd, kun je altijd lokaal of via het netwerk inloggen op je Pi en sudo shutdown -h nu typen. Maar als u een project bouwt voor niet-technische gebruikers, is dat niet voldoende. Toegegeven, je kunt bijna altijd wegkomen door gewoon aan het netsnoer te trekken, maar let op, ik zei bijna altijd! Ieders geluk raakt vroeg of laat op. Ik had vorige week pas een SD-kaart bij me, hoewel ik nooit zal weten of het echt te wijten was aan een abrupt stroomverlies.
In mijn geval moest ik een aan / uit-knop toevoegen aan een Pi die we gebruiken als midi-sequencer voor het opnemen en afspelen van hymnes en liedjes in de kerk, voor als we geen live pianist beschikbaar hebben. Ik kan altijd het shutdown-commando typen, maar ik moet het de-skillen voor als ik er niet ben.
Het is niet mijn bedoeling om je een afgewerkt product te geven, compleet met een prachtig 3D-geprint hoesje, zoals zoveel andere Instructables. Iedereen zal er een ander gebruik voor hebben of in zijn eigen project willen opnemen. In plaats daarvan zal ik u voorzien van de technologie die u aan uw project kunt toevoegen, of het nu een mediacentrum, een IoT-apparaat of iets anders is.
(In de video demonstreer ik het met een Pi Zero v1.2 en een monitor die ik heb gemaakt van een hergebruikt laptopscherm en een controller uit het Verre Oosten.)
Stap 1: Het ontwerp
Dit is wat mijn aan / uit-knop voor je zal doen:
- Als de Pi draait, brandt er continu een LED. Als het handmatig wordt uitgeschakeld, gaat de LED alleen uit als het veilig is om de stekker uit het stopcontact te halen.
- Als u tijdens het hardlopen de knop minimaal een seconde ingedrukt houdt, wordt het apparaat uitgeschakeld en knippert de LED elke seconde een kwart seconde totdat het veilig is om de stekker uit het stopcontact te halen.
- Vanuit een afgesloten toestand (als de stroom niet is verwijderd), begint het opstarten door op de knop te drukken en de LED knippert elke seconde een kwart seconde totdat het is opgestart. (Het kan iets langer duren voordat alle services zoals ssh en vnc actief zijn.)
De componenten zijn erg goedkoop. Alles wat je nodig hebt is:
- ATTiny85 (Arduino-compatibele chip)
- 3 weerstanden: 2 x 330Ω en 1 x 10kΩ
- 1 LED - ik raad groen of blauw aan, maar het is jouw keuze
- breadboard en jumperdraden, of stripboard, of hoe je het ook wilt bouwen.
Stap 2: Hoe het werkt
Zoals met alle Pi-aan / uit-knoppen, trekt deze een GPIO-pin naar een lage status om een uitschakelverzoek te signaleren aan een hulpprogramma dat op de Pi wordt uitgevoerd. Ik heb GPIO4 (pin 7) gebruikt, maar je kunt elke andere pin gebruiken.
De enige manier om te zien of een Pi volledig is afgesloten, is door naar TxD-pin 8 te kijken, die dan laag wordt. Dit hangt af van de seriële console die is ingeschakeld, wat het standaard is. In feite zal TxD regelmatig op en neer gaan terwijl het wordt gebruikt als een seriële console, maar het zal nooit meer dan ongeveer 30 mS per keer laag worden, zelfs niet bij de langzaamste gewone baudrate. Het kan nog steeds worden gebruikt voor een seriële console, omdat we er passief naar kijken.
Om opnieuw op te starten, moeten we SCL1 (pin 5) kort naar beneden trekken. Deze pin wordt gebruikt door alle I2C-apparaten (inclusief mijn midi-interface), maar na het starten van het opstarten laten we het met rust.
Het grootste deel van de complexiteit zit in de Arduino-schets die we in de ATTiny85 laden. Dit implementeert een "state machine" - een zeer nuttige en krachtige manier om elk probleem te coderen dat kan worden weergegeven door een aantal "states". Een wasmachine werkt op precies dezelfde manier. De statussen vertegenwoordigen de fasen in de wascyclus en elk definieert wat de machine op dat moment zou moeten doen (motoren of pompen die moeten draaien, kleppen die moeten worden geopend of gesloten) en welke sensoringangen (temperatuur, waterniveau, timers) bepalen wanneer u naar de volgende staat moet gaan en welke volgende staat u moet kiezen.
De handschets is mijn eerste ontwerp van een toestandsdiagram, dat alle toestandsovergangen laat zien. Dit is alleen om je te laten zien hoe je in eerste instantie je toestanden en toestandsovergangen kunt plannen - het is misschien niet helemaal nauwkeurig zoals dat was voordat ik begon met debuggen.
In ons geval hebben we 6 toestanden die ik UIT, BOOT REQUEST, BOOTING, RUNNING, SHUTDOWN REQUEST en SHUTTING DOWN heb genoemd. (Na UITSLUITEN gaat het terug naar UIT.) Deze worden geïdentificeerd door opmerkingen in de schets, en voor elk geven verdere opmerkingen aan wat het zou moeten doen en welke gebeurtenissen het naar een andere staat zullen verplaatsen.
Het hulpprogramma dat op de Pi draait, is net iets ingewikkelder dan voor de meeste afsluitknoppen. Het reageert op een lange lage puls op de GPIO-pin door een shutdown te initiëren, maar het reageert ook op een korte puls door zelf de GPIO-pin even laag te trekken. Dit is hoe de ATtiny85 kan zien dat hij draait en dus van de BOOTING-status naar de RUNNING-status kan gaan.
Stap 3: Een demo-prototype bouwen
Voor demonstratiedoeleinden kun je een prototype maken op een soldeerloze breadboard zoals afgebeeld, maar ik heb je ook het schema gegeven, zodat je je eigen lay-out kunt uitwerken met stripboard of een aangepaste PCB, misschien onderdeel van een breder project.
Stap 4: Programmeren van de ATtiny85
De Arduino-schets en het hulpprogramma zijn aan deze stap gekoppeld. Maak in je Arduino-schetsmap een map met de naam PiPwr en kopieer het bestand PiPwr.ino erin. Als u de Arduino IDE start, vindt u deze nu in uw schetsboek.
Er zijn verschillende manieren om een ATtiny85 te programmeren. Als die van jou een bootloader heeft geïnstalleerd, kun je een ATTiny85-ontwikkelbord gebruiken dat slechts een paar pond kost. Deze wordt via een USB-poort op uw pc aangesloten. Ik gebruikte een Hidiot die in wezen hetzelfde is, maar met een prototyping-gebied.
Voeg in de Arduino IDE onder Bestand - Voorkeuren
digistump.com/package_digistump_index.json
naar de URL's van de extra bordenbeheerder.
Onder Tools - Board ziet u nu een aantal Digispark-opties. Selecteer Digispark (standaard - 16,5 MHz).
Als je ATTiny85 geen bootloader heeft (of je weet het niet), dan kun je voor een paar euro een AVR ISP-programmeur krijgen. Of je kunt een Arduino Uno of goedkopere Pro Mini of Nano gebruiken als programmeur. Google voor "arduino as isp attiny85" (zonder de aanhalingstekens) voor instructies.
Als u de schets wilt wijzigen, vindt u deze volledig becommentarieerd en hopelijk gemakkelijk te volgen. Voor het debuggen is het veel gemakkelijker om een Arduino Pro Mini of Nano te gebruiken. Verwijder de opmerkingen bij serial.begin() in Setup en de printinstructies in loop() om de stappen te zien die het doorloopt met behulp van de seriële monitor. Er zijn alternatieve pin-definities in de bron, becommentarieerd, voor een Uno, Pro Mini of Nano.
Kopieer op je Raspberry Pi het bestand shutdown_helper.py naar de map /etc/local/bin en stel het in als uitvoerbaar met de opdracht
sudo chmod +x /usr/local/bin/shutdown_helper.py
Bewerk nu het bestand /etc/rc.local met je favoriete editor. (Je moet dit doen als root.) Voor de laatste regel (exit 0) voeg je de regel in
nohup /usr/local/bin/shutdown_helper.py &
Start opnieuw op en het hulpprogramma start automatisch.
Aanbevolen:
Bouw een draagbare bewegingstracker (BLE van Arduino naar een aangepaste Android Studio-app): 4 stappen
Bouw een draagbare bewegingstracker (BLE van Arduino tot een aangepaste Android Studio-app): Bluetooth Low Energy (BLE) is een vorm van Bluetooth-communicatie met laag vermogen. Draagbare apparaten, zoals de slimme kleding die ik help ontwerpen bij Predictive Wear, moeten het stroomverbruik waar mogelijk beperken om de levensduur van de batterij te verlengen, en regelmatig gebruik maken van BLE
Bouw een Apple HomeKit-temperatuursensorapparaat met een ESP8266 en een BME280: 10 stappen
Bouw een Apple HomeKit-temperatuursensorapparaat met behulp van een ESP8266 en een BME280: in de instructable van vandaag zullen we een goedkope temperatuur-, vochtigheids- en vochtsensor maken op basis van de AOSONG AM2302/DHT22 of BME280 temperatuur- / vochtigheidssensor, YL-69 vochtsensor en het ESP8266/Nodemcu-platform. En voor het weergeven van
Bouw een echte klok die op uw pc slaat en een brandblusser die opvalt: 3 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Bouw een echte klok die op je pc slaat en een klok die op een brandblusser slaat: een koperen bel, een klein relais, nog een paar dingen en een echte bel kunnen de uren op je bureaublad slaan. Hoewel dit project op Windows en Mac draait OS X ook, ik besloot Ubuntu Linux te installeren op een pc die ik in de prullenbak vond en daaraan te werken: ik had nog nooit
Bouw een zoomplek voor een fotograaf. 9 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Bouw de zoomspot van een fotograaf.: De zoomspot van een fotograaf creëert een licht met harde randen dat kan worden gevormd door interne luiken en kan worden scherpgesteld met een verstelbare cilinder. Ze zijn over het algemeen vrij duur, dus dit is een poging om er een te bouwen voor ongeveer $ 100
Een betere laptopvoedingskabel: 14 stappen
Een betere laptopvoedingskabel: Ben je het beu om je laptop te gebruiken in collegezalen met meer dan 300 zitplaatsen en één stopcontact… of wanneer alle stoelen naast de stopcontacten vol zijn? (en je bent te lui om je laptop van tevoren op te laden) Je kunt je netsnoer eenvoudig verlengen tot 7 meter en