Inhoudsopgave:

A Back to the Future Clock: 8 stappen (met afbeeldingen)
A Back to the Future Clock: 8 stappen (met afbeeldingen)

Video: A Back to the Future Clock: 8 stappen (met afbeeldingen)

Video: A Back to the Future Clock: 8 stappen (met afbeeldingen)
Video: Bill Haley & His Comets - Rock Around The Clock (1955) HD 2024, November
Anonim
Een terug naar de toekomstige klok
Een terug naar de toekomstige klok

Dit project begon als een wekker voor mijn zoon. Ik heb het gemaakt om eruit te zien als het tijdcircuit van Back to the Future. Het display kan de tijd in verschillende formaten weergeven, ook die uit de films natuurlijk. Het is configureerbaar via de knoppen bovenop de behuizing, maar ook via een webpagina die wordt bediend door de Raspberry Pi Zero binnenin. In een van de weergavemodi toont het het lokale weer (van mijn Arduino-aangedreven weerstation) evenals de voorspelling en eventuele dagelijkse herinneringen, geconfigureerd via de webinterface. Het heeft ook audio dankzij een DAC en zal muziek streamen met behulp van het AirPlay-protocol. Het alarmgeluid kan elk audiobestand zijn dat u kiest. Het zal het display automatisch dimmen en ophelderen op bepaalde tijden van de dag (bijv. zonsopgang en zonsondergang).

Stap 1: Achtergrond

Vorig jaar was ik op zoek naar een nieuw Arduino-project nadat ik net mijn allereerste had voltooid, een weerstation voor thuis. Mijn 11-jarige zoon had net voor het eerst naar de Back to the Future-films gekeken, dus het leek me leuk om voor zijn verjaardag een wekker voor hem te bouwen die eruitzag als het tijdcircuit in de Delorean. Dit is geen nieuw idee, er zijn nogal wat soortgelijke projecten (bijvoorbeeld deze), dus ik dacht dat het een leuk project zou zijn om van anderen te leren en nieuwe vaardigheden op te doen.

De eerste versie werkte redelijk goed (hij was nog niet klaar voor zijn verjaardag: ik had het voor Kerstmis klaar) maar ik werd behoorlijk ambitieus in wat ik wilde en ontdekte dat mijn schets steeds tegen de geheugenlimiet van de Arduino aanliep. Ik had ook verschillende kleine externe hardwaremodules (wifi, mp3-speler, audioversterker, RTC enz.), dus het werd allemaal een beetje onpraktisch. Uiteindelijk besloot ik over te stappen op een Raspberry Pi-platform dat de hardware vereenvoudigde en me in staat stelde om veel meer functionaliteit en functies in te pakken.

Stap 2: Belangrijkste hardwarecomponenten

In de doos

Hier zijn de elektronische componenten die ik heb gebruikt. De meeste waren bronnen van Core Electronics in Australië, maar ze zijn natuurlijk ook elders gemakkelijk verkrijgbaar:

  • 4 x Quad alfanumeriek display -Geel-Groen
  • Raspberry Pi Zero W
  • Pimoroni pHAT DAC voor Raspberry Pi Zero
  • Audioversterker (PAM8403 IC)
  • Raspberry Pi 3+ voeding
  • 4 x Jumper draad - 0.1", 5-pins, 12"
  • 40-pins (2 x 20) lintkabel
  • Raspberry Pi GPIO mannelijke kop
  • Raspberry Pi Model B - GPIO Gehulde Header (2X20)
  • GPIO Stacking Header voor Pi A+/B+/PI 2/PI 3 - extra lang 2X20
  • 4 x 5-pins mannelijke kop
  • 2 kleine luidsprekers van 3 W
  • 2 x coaxkabels voor analoge audioverbinding DAC naar Amp
  • Veraboard of aangepaste PCB om Rpi naar een versterker, LED, knoppen te verwerken
  • 5 x kortstondige drukknopschakelaars
  • 4 x 2-weg PCB-monteerbare schroefklemmenblokken

De doos

  • Stukjes MDF, schroeven en bouten om het 'chassis' te maken
  • Groen getint perspex, lokale leverancier
  • Styreen, modelleerlijm, spuitverf (aluminiumkleur) uit een plaatselijke hobbywinkel
  • Stickers (bestand op aanvraag beschikbaar - gedrukt door Redbubble)

Stap 3: Alles samenbrengen

Alles bij elkaar zetten
Alles bij elkaar zetten

Het LED-display voor de klok bestaat uit 16x14-segment alfanumerieke displays, gelukkig hetzelfde aantal karakters als het Back to the Future-tijdcircuit. Hoewel alleen de eerste drie tekens alfanumeriek hoeven te zijn en de rest numerieke displays met 7 segmenten kunnen zijn om de filmprop te emuleren, heb ik besloten ze allemaal alfanumeriek te maken om enige flexibiliteit mogelijk te maken in wat kan worden weergegeven en om ze er allemaal hetzelfde uit te laten zien. dezelfde. De quad-rugzakken van Adafruit zijn hier een geweldige oplossing en kunnen worden gebruikt op de I2C-bus van de Raspberry Pi. Meer informatie over deze units en hoe je ze kunt aansluiten vind je hier op de Adafruit website. Het enige wat niet-standaard was dat ik moest doen, was de adressen van drie van hen veranderen, zodat elke rugzak uniek was.

Om audio (in stereo) af te spelen, heb ik de Pimoroni pHAT DAC en een 2 x 3W stereo audioversterker op basis van de PAM8403-chip toegevoegd. De pHAT DAC is heel eenvoudig aan te sluiten op de Pi. Ik heb een 2 x 20-pins mannelijke header op de Pi en een GPIO-stapelheader op de DAC geplaatst, zodat ze op elkaar kunnen worden aangesloten. De mannelijke header-pinnen gaan door de bovenkant van de DAC, waardoor ik een lintkabel met vrouwelijke connectoren kan leiden, aanvankelijk naar een Raspberry Pi-breakout voor breadboard-testen, maar uiteindelijk naar een gehulde header op een op maat gemaakte PCB.

Voor de audioversterker zijn er tal van opties (inclusief gewoon de chip krijgen en je eigen chip in elkaar zetten). Deze heeft de mogelijkheid om de output te dempen door gewoon de status van een van de pinnen te veranderen (hoog is aan, laag is uit) en ik heb hem aangesloten zodat dit vanaf de Pi kan worden bestuurd. In mijn eerste pogingen om dit aan te sluiten, ontdekte ik behoorlijk wat achtergrondgeluid wanneer de audio aan stond. Na veel spelen met aarding, probeerde ik uiteindelijk de ingangsvoedingsspanning van de Pi's 5V naar 3,3V te verplaatsen en dat loste het op. Ik vermoed dat er nogal wat ruis wordt gegenereerd door de verschillende digitale signalen die rondvliegen, maar het lijkt erop dat de 3.3V-voeding op de een of andere manier geïsoleerd is.

Andere aansluitingen zijn onder meer de analoge audio van de DAC naar de versterker (ik heb hier een coaxkabel gebruikt om het opnemen van ruis te helpen beheersen) en de uitvoer van audio naar een paar kleine 3W-luidsprekers die in de behuizing passen. Er zijn ook GPIO-aansluitingen voor de vier momentschakelaars bovenop de doos en ik heb een momentknop aangesloten op de harde reset "RUN"-pinnen (zie het gedeelte Extra aansluitingen op deze pagina). De resetknop is uit het zicht aan de achterkant van de behuizing gemonteerd. Hier is een diagram met de verbindingen:

Stap 4: Een aangepaste PCB

Een aangepaste PCB
Een aangepaste PCB

Hoewel er niets te ingewikkeld is aan het circuit, is er nogal wat bedrading en kan een breadboard vrij snel op spaghetti lijken. Dus ontwierp ik een PCB om alles onder controle te houden. Het is een zelfgebrouwen enkelzijdig bord en ik heb een vriend om te helpen het te maken. Nadat het was gemaakt en bedraad, realiseerde ik me dat ik vergat aansluitingen voor de aansluitblokken voor de audio op te nemen en ik heb later een wijziging aangebracht om de voeding van de audioversterker te verplaatsen van 5V naar 3,3V, dus het is niet ideaal en ik moest overstag sommige Veroboard om de audio-aansluitingen mogelijk te maken. Ook zijn de pin-outs van de audioversterkerkaart op een niet-standaard scheiding (ze variëren zelfs tussen de pinnen), dus de verbinding hiervoor met de hoofdprint is een beetje vreselijk met 11 korte verbindingsdraden van ongeveer 1 cm.

Als ik een ander bord zou maken, zou ik al deze wijzigingen opnemen en ook de connector voor de vier knoppen veranderen in iets mooiers. De DAC en Pi zouden bovenop worden gestapeld, dus er is geen lintkabel nodig. Het bovenstaande diagram laat zien hoe het eruit zou kunnen zien.

Stap 5: De behuizing

de behuizing
de behuizing
de behuizing
de behuizing
de behuizing
de behuizing

Ik wilde een behuizing maken die eruitzag als een rij van het filmtijdcircuit. Drie rijen LED-displays zouden te veel zijn geweest voor een wekker en zouden de kosten aanzienlijk hebben verhoogd. Ik dacht erover om de behuizing van aluminium te maken, maar ik heb geen vaardigheden op dat gebied. Ik heb in mijn leven echter nogal wat plastic modellen gemaakt en heb wat ervaring met houtbewerking, dus besloot ik een frame te maken met MDF om de LED's en luidsprekers te monteren en het perspex aan de voorkant te bevestigen, en dat vervolgens te bedekken met een 5-zijdig styreen doos met een bezel aan de voorkant, geverfd in een aluminium metallic spuitverf. Het plastic en de verf werden verkregen bij een plaatselijke modelbouwwinkel. Ik bekeek de labels op de filmprop goed en deed mijn best om de kleuren, het lettertype en de grootte te kopiëren. Ik gebruikte Photoshop om de labels te bouwen en liet ze afdrukken als stickers van Redbubble.

De afbeeldingen hierboven laten zien:

  1. De voorkant van het MDF-chassis. De 4 LED-rugzakken zijn aan de voorzijde gemonteerd met groen getinte perspex
  2. In de doos. Rugzakken allemaal gemonteerd en uitgelijnd, Raspberry Pi en aangepaste PCB erin, luidsprekers aan weerszijden.
  3. Bedrading geïnstalleerd en buitenschaal klaar om verder te gaan. Het was even slikken!

Stap 6: De Raspberry Pi instellen

Ik had wat compatibiliteitsproblemen met Raspbian Stretch (die misschien oplosbaar waren geweest als ik had volgehouden), maar Jessie werkt er prima mee, dus besloot ik daarmee verder te gaan.

Ik heb de Pi ingesteld als een headless-eenheid met VNC- en SSH-toegang. Dit had kunnen worden gedaan zonder ooit een toetsenbord of monitor aan te sluiten, maar ik leende gewoon de tv en schraapte een toetsenbord, en kreeg het vrij snel zonder kop. Vanaf dat moment gebruikte ik vrijwel VNC vanaf dat moment.

Mijn klokcode gebruikt Python 2.7.9 en is afhankelijk van een flink aantal bibliotheken, die hieronder worden vermeld. Daarnaast gebruik ik een Flask-webserver en MQTT voor afstandsbediening en Shairplay voor muziekstreaming. Ik volgde gewoon de on-line installatie-aantekeningen voor al deze en had helemaal geen problemen. Hier zijn de python-bibliotheken en andere pakketten enz. Die ik moest installeren met links naar installatie-opmerkingen of alleen de opdracht die je moet uitvoeren om het te krijgen:

Python-bibliotheken

  • Adafruit_LED_Rugzak
  • Rpi. GPIO (apt-get install python-rpi.gpio)
  • alsaaudio
  • paho.mqtt.client (pip install paho-mqtt)
  • kolf (apt-get install python-flask)

Andere pakketten enz

  • mug (apt-get install mug)
  • havenplaats
  • De Pimoroni-website heeft goede documentatie over het instellen van de DAC, dus daar ben ik maar mee aan de slag gegaan.

Stap 7: Software

Image
Image
Software
Software

De klokcode is geschreven in Python en gebruikt threading om het alarm af te spelen en af en toe piepjes op de achtergrond zonder de schermupdates te blokkeren. Ik heb de ConfigParser-bibliotheek gebruikt en het configuratiebestand dat het onderhoudt, wordt gelezen en geschreven door de klokcode en de Flask-webapp, zodat wanneer de configuratie wordt gewijzigd via de webinterface of de klok, deze wordt gesynchroniseerd. De kloksoftware bevat ook een MQTT-broker waarmee de weergavemodus en het dempen op afstand kunnen worden bestuurd. Mijn bijbedoeling is uiteindelijk om een iOS-app voor de afstandsbediening te schrijven, maar de webinterface werkt voorlopig goed genoeg.

De eerste afbeelding hierboven laat zien hoe de klok eruitziet in de verschillende weergavemodi, en er is een korte video die deze in de schuifmodus laat zien.

Hoewel de code niet mooi is om naar te kijken, is hij mooi en stabiel. Ik stuur het graag naar iedereen die erom vraagt en zal het online zetten als het beter is georganiseerd en van commentaar is voorzien.

De web-app

De volgende afbeelding laat zien hoe de webinterface van de klok eruitziet. Er zijn ook configuratie- en bedieningspagina's en deze maken het veel gemakkelijker om met de klok te spelen zonder veel knoppen te kloppen:-).

Stap 8: wat nu?

Wat nu?
Wat nu?

Er is een Python shareport-metadata-decoder beschikbaar, dus ik denk dat ik wat code zal toevoegen om informatie zoals titel en artiest weer te geven wanneer muziek wordt afgespeeld. Het zou ook vrij eenvoudig zijn om de tijden van zonsopgang en zonsondergang te berekenen, zodat het display automatisch kan worden verlicht en gedimd, in plaats van het handmatig in te stellen. Misschien zou het ook leuk zijn om een internetradiofunctie toe te voegen. Het scrollende display kan ook meer configureerbaar zijn.

Aanbevolen: