Inhoudsopgave:
- Stap 1: Het schakelschema
- Stap 2: Breadboard uw circuit
- Stap 3: Circuitconstructie op Protoboard
- Stap 4: Een socket maken voor het display en het poten geven
- Stap 5: De bedrading van de printplaat controleren en voorbereiden om te kalibreren
- Stap 6: Circuitkalibratie
- Stap 7: Het Arduino-programma
- Stap 8: Onderdelenlijst
Video: Arduino digitale klok gesynchroniseerd door de 60Hz Power Line - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Deze op Arduino gebaseerde digitale klok wordt gesynchroniseerd door de 60Hz-stroomlijn. Het heeft een eenvoudige en goedkope gemeenschappelijke anode 4-cijferige 7-segments display die uren en minuten aangeeft. Het gebruikt een cross-over-detector om te detecteren wanneer de binnenkomende 60 Hz-sinusgolf het nulspanningspunt kruist en een 60 Hz-blokgolf afleidt.
Gedurende korte tijdsperioden kan de frequentie van de binnenkomende sinusgolf van de voedingslijn zeer licht variëren als gevolg van belasting, maar over lange tijdsperioden wordt deze zeer nauwkeurig gemiddeld tot 60 Hz. We kunnen hiervan profiteren om een timingbron af te leiden om onze klok te synchroniseren.
Stap 1: Het schakelschema
Er zijn twee versies van het circuit, afhankelijk van of u een transformator met een middenaftakking of een zonder middenaftakking wilt gebruiken, in beide gevallen is de werking van het circuit bijna identiek. Voor deze build heb ik een muuradapter (geen middenaftakking) gebruikt die 12V AC uitvoert. Ik zal dit ontwerp (Digital Clock1 Circuit Diagram) gebruiken voor de circuitbeschrijving. Merk op dat het belangrijk is om een wandadapter te gebruiken die 12V AC levert en niet 12V DC, zodat we de AC-sinusgolf kunnen aanboren voor timing. Je zou waarschijnlijk ook een transformator kunnen gebruiken die 9V AC levert, R19 verwijderen en ook aan het werk krijgen, maar 12V is heel algemeen verkrijgbaar. Zo werkt de schakeling:
120V AC bij 60Hz wordt omgezet naar 12V AC door transformator TR1. Deze wordt toegevoerd aan diode D4 en gelijkgericht zodat slechts +ve spanning wordt toegevoerd aan, en afgevlakt tot ongeveer gelijkstroom met rimpel, door de condensator C3. De spanning op C3 wordt via weerstand R19 naar de 7805 spanningsregelaar (U6) gevoerd. R19 wordt gebruikt om de spanning op C3 te verlagen die in mijn geval werd gemeten op ongeveer 15VDC. Dit kan worden geregeld door de 7805, maar met dit ingangsniveau moet de 7805 ongeveer 10VDC dalen en wordt daardoor behoorlijk heet. Door R19 te gebruiken om de spanning te verlagen tot ongeveer 10VDC, voorkomen we dat U6 te veel opwarmt. Dit is dus geen efficiënte stroomconversietechniek, maar het werkt voor onze doeleinden. OPMERKING: gebruik hier minimaal een weerstand van 1/2W of meer. Het circuit trekt ongeveer 55 ma, dus de vermogensdissipatie in R19 is ongeveer 1/3W op basis van P=I**2*R of P = 55ma x 55ma x 120 ohm = 0,363W. De volgende U6 voert pure 5V DC uit met C4 en C5 op de uitgang om eventuele ruis op de 5V-voedingslijn te filteren. Deze 5V DC voedt alle IC's op het bord.
Van TR1 nemen we ook een monster van het ongefilterde AC-signaal en voeren dit in potentiometer RV1 die wordt gebruikt om het niveau aan te passen dat naar de crossover-detector wordt gevoerd. R18 en R17 vormen een spanningsdeler om het niveau van de AC-spanning die binnenkomt verder te verminderen. Onthoud dat dit binnenkomt op 12V AC en we moeten het verlagen tot minder dan 5 V zodat het zal werken met onze cross-over detector die alleen aangedreven door 5VDC. R15 en R16 bieden stroombegrenzing, terwijl D1 en D2 bedoeld zijn om oversturing van op-amp U5 te voorkomen. In de getoonde configuratie zal de output van de U5 op pin 1 wisselen tussen +5V en 0V elke keer dat de inkomende sinusgolf verandert van positief naar negatief. Dit genereert een 60 Hz blokgolf die wordt toegevoerd aan de microcontroller, U4. Het programma dat op U4 is geladen, gebruikt vervolgens deze 60Hz-blokgolf om de klok elke minuut en elk uur te verhogen. Hoe dit wordt gedaan, wordt besproken in het gedeelte over het softwareprogramma en in de software-opmerkingen.
U7 het schuifregister 74HC595 wordt gebruikt omdat we een beperkt aantal digitale pinnen op de microprocessor hebben, dus het wordt gebruikt om het aantal uitgangen uit te breiden. We gebruiken 4 digitale pinnen op de microprocessor, maar kunnen via de 74HC595 7 segmenten op het display aansturen. Dit wordt bereikt door vooraf bepaalde bitpatronen, die zijn opgeslagen in de microcontroller, en die elk weer te geven cijfer vertegenwoordigen, in het schuifregister te schuiven.
Het hier gebruikte display is een gemeenschappelijke anode, dus we moeten de signaalniveaus die uit de 74HC595 komen omkeren om een segment aan te zetten. Wanneer een segment moet worden ingeschakeld, is het signaal dat uit de 74HC595-uitgangspin komt op +5V, maar we hebben de pin die het op het display voedt nodig op 0V om dat displaysegment in te schakelen. Hiervoor hebben we dus hex-omvormers U2 en U3 nodig. Helaas kan één inverter-IC slechts 6 inversies aan, dus we hebben er twee nodig, hoewel we op de tweede slechts één van de 6 poorten gebruiken. Verspilling helaas. Je zou je kunnen afvragen waarom je hier niet een gewoon kathode-type display gebruikt en U2 en U3 elimineert? Nou, het antwoord is dat je dat kunt, ik heb toevallig een gemeenschappelijk anodetype in mijn onderdelenvoorraad. Als u een gemeenschappelijk kathodetype display heeft of wilt gebruiken, elimineer dan gewoon U2 en U3 en bedraad Q1 - Q4 opnieuw zodat de transistorcollectoren zijn aangesloten op de displaypinnen en de transistoremitters zijn aangesloten op aarde. Q1 - Q4 bepaalt welke van de vier 7-segments displays actief is. Dit wordt bestuurd door de microcontroller, via de pinnen die zijn aangesloten op de basis van de transistoren Q1 - Q4.
De increment- en set-knoppen worden gebruikt om handmatig de juiste kloktijd in te stellen als het gaat om het daadwerkelijke gebruik van de klok. Wanneer de Set-knop eenmaal wordt ingedrukt, kan de Increment-knop worden gebruikt om door de uren te bladeren die op het display worden weergegeven. Wanneer de Set-knop opnieuw wordt ingedrukt, kan de increment-knop worden gebruikt om door de minuten te bladeren die op het display worden weergegeven. Wanneer de Set-knop voor de derde keer wordt ingedrukt, is de tijd ingesteld. R13 en R14 trekken de microcontroller-pinnen die bij deze knoppen horen, laag wanneer ze niet in gebruik zijn.
Merk op dat we hier U4 (Atmega328p) van het typische Arduino UNO-prototypebord hebben gehaald en op het prototypebord hebben gezet met de rest van ons circuit. Om dit te doen, moeten we minimaal kristal X1 en condensatoren C1 en C2 leveren om een klokbron voor de microcontroller te bieden, koppelpen 1, de resetpen, hoog en 5VDC-voeding leveren.
Stap 2: Breadboard uw circuit
Ongeacht of u het circuit precies bouwt zoals weergegeven in het schakelschema of misschien een iets andere transformator, weergavetype of andere componenten gebruikt, u moet het circuit eerst breadboarden om ervoor te zorgen dat het werkt en dat u begrijpt hoe het werkt.
Op de foto's kun je zien dat voor het breadboarden van het hele ding een paar boards nodig waren, evenals een Arduino Uno-bord. Dus om de microcontroller te programmeren of te experimenteren of de software te wijzigen, heb je in eerste instantie het microcontroller-IC op een UNO-bord nodig, zodat je er een USB-kabel op kunt aansluiten en je computer om het programma te uploaden of softwarewijzigingen aan te brengen.
Zodra je de klok op het breadboard hebt laten werken en je microcontroller hebt geprogrammeerd, kun je hem loskoppelen en in het stopcontact steken van je definitieve permanente klok op het prototypebord. Zorg ervoor dat u antistatische voorzorgsmaatregelen volgt wanneer u dit doet. Gebruik een antistatische polsband bij het hanteren van de microprocessor.
Stap 3: Circuitconstructie op Protoboard
Het circuit is geconstrueerd op een stuk prototypebord en bedraad van punt tot punt met behulp van #30 AWG draadwikkeldraad. Het geeft een stoer en betrouwbaar resultaat. Omdat de transformator die ik heb een mannelijke 5 mm-stekker aan het uiteinde van de kabel heeft, heb ik de bijbehorende vrouwelijke houder op de achterkant van het bord gemonteerd door een stuk van 1/2 brede platte aluminium strip te snijden, te buigen en te boren om een op maat te maken beugel en vervolgens vastgeschroefd aan het bord met kleine 4-40 moeren en bouten. Je zou gewoon de connector kunnen afsnijden en de resterende stroomdraden aan het bord solderen en jezelf ongeveer 20 minuten werk besparen, maar ik wilde niet dat de transformator permanent bevestigd was naar het bord.
Stap 4: Een socket maken voor het display en het poten geven
Omdat het scherm 16 pinnen heeft, 8 aan elke kant, met een pinafstand die breder is dan een standaard 16-pins IC-voetje, moeten we de grootte van het voetje aanpassen aan het scherm. U kunt dit doen door eenvoudig een paar draadknippers te gebruiken om het plastic dat de twee zijden van de socket verbindt af te knippen, ze te scheiden en ze afzonderlijk op het bord te solderen met een afstand die overeenkomt met de afstand van de pinnen op het scherm. Het is voordelig om dit te doen, zodat u niet rechtstreeks op de displaypinnen hoeft te solderen en het display aan overmatige hitte blootstelt. Je kunt de socket zien waar ik dit aan heb gedaan bovenaan het bord in de bovenstaande afbeelding.
Om het scherm goed rechtop te laten staan, heb ik twee 1 bouten vastgeschroefd aan de onderste twee hoekgaten van het prototypebord, zoals weergegeven op de foto's om een eenvoudige standaard te maken. Dit was behoorlijk tippy, dus als je dit doet, zou je iets zwaars op de achterkant van de bouten wilt plaatsen om het te stabiliseren.
Stap 5: De bedrading van de printplaat controleren en voorbereiden om te kalibreren
Als de printplaat eenmaal is aangesloten, maar voordat u de IC's aansluit of het scherm aanzet of inschakelt, is het een goed idee om de bordverbindingen te controleren met een DVM. U kunt de meeste DVM's zo instellen dat ze piepen als er continuïteit is. Zet uw DVM in deze modus en volg uw schakelschema om zoveel mogelijk circuitverbindingen te controleren. Controleer op een open circuit, of dichtbij, tussen de +5V en de massapunten. Controleer visueel of alle componenten op de juiste pinnen zijn aangesloten.
Sluit vervolgens uw transformator aan op het circuit en zet hem aan. Controleer of u precies 5V DC op de 5V-voedingsrail hebt met een scoop of DVM voordat u IC's of het display aansluit.
Sluit vervolgens ALLEEN de Op-Amp U5 IC aan ter voorbereiding op de volgende stap. Hier zullen we controleren of ons cross-overcircuit een blokgolf genereert en potentiometer RV1 aanpassen voor een schoon 60 Hz-signaal.
Stap 6: Circuitkalibratie
De enige kalibratie die moet worden uitgevoerd, is het afstellen van de potentiometer RV1 voor het juiste signaalniveau dat de crossover-detector voedt. Er zijn twee manieren om dit te doen:
1. Plaats een scoopsonde op pin 1 van U5 en zorg ervoor dat u de aardingsdraad van de scoopsonde aansluit op de aarding van het circuit. Pas vervolgens RV1 aan totdat je een schone blokgolf hebt, zoals weergegeven in de bovenstaande afbeelding. Als u RV1 op de een of andere manier te ver afstelt, heeft u geen blokgolf of een vervormde blokgolf. Zorg ervoor dat de frequentie van de blokgolf 60 Hz is. Als je een moderne scope hebt, zal het je waarschijnlijk de frequentie vertellen. Als je een oude scope hebt zoals ik, zorg er dan voor dat de blokgolfperiode ongeveer 16,66 ms of 1/60 sec is.
2. Gebruik een frequentieteller of DVM in de frequentiemodus om de frequentie op pin 1 van U5 te meten en RV1 af te stellen op exact 60 Hz.
Zodra deze kalibratie is voltooid, schakelt u het circuit uit en sluit u alle IC's en het display aan om de circuitconstructie te voltooien.
Stap 7: Het Arduino-programma
Het programma is volledig becommentarieerd, zodat u de details van elke stap kunt achterhalen. Door de complexiteit van het programma is het moeilijk om elke stap te beschrijven, maar op een zeer hoog niveau werkt het zo:
De microprocessor ontvangt de binnenkomende 60 Hz blokgolf en telt 60 cycli en verhoogt de secondentelling na elke 60 cycli. Zodra de secondentelling 60 seconden of 3600 cycli bereikt, wordt de minutentelling verhoogd en wordt de secondentelling op nul gezet. Zodra de minutentelling 60 minuten bereikt, wordt de urentelling verhoogd en wordt de minutentelling op nul gezet. de urenteller wordt na 13 uur weer op 1 gezet, dit is dus een 12-uurs klok. Als u een 24-uurs klok wilt, wijzigt u het programma om de uren na 24 uur weer op nul te zetten.
Dit is een experimenteel project, dus ik heb geprobeerd een Do-While-lus te gebruiken om switch bounce op de Set- en Increment-knoppen te onderdrukken. Het werkt redelijk goed. Wanneer de Set-knop eenmaal wordt ingedrukt, kan de Increment-knop worden gebruikt om door de uren te bladeren die op het display worden weergegeven. Wanneer de Set-knop opnieuw wordt ingedrukt, kan de increment-knop worden gebruikt om door de minuten te bladeren die op het display worden weergegeven. Wanneer de Set-knop voor de derde keer wordt ingedrukt, is de tijd ingesteld en begint de klok te lopen.
Patronen van 0 en 1 die worden gebruikt om elk nummer op de 7-segments displays weer te geven, worden opgeslagen in de array met de naam Seven_Seg. Afhankelijk van de huidige kloktijd worden deze patronen naar het 74HC595 IC gevoerd en naar het display gestuurd. Welke van de 4 cijfers van het display tegelijkertijd is ingeschakeld om deze gegevens te ontvangen, wordt bestuurd door de microprocessor via het display Dig 1, 2, 3, 4 pinnen. Wanneer het circuit is opgestart, voert het programma eerst een testroutine uit genaamd Test_Clock, die de juiste cijfers stuurt om elk scherm te verlichten met een telling van 0 tot 9. Dus als je dit ziet wanneer je het opstart, weet je dat je alles correct hebt gebouwd.
Stap 8: Onderdelenlijst
1 - Transformator 120VAC naar 12VAC ca. 100ma of meer1 - Prototype board ca. 3,5" x 3,5"1 - 4-cijferig 7-segment display YSD-439K2B-35 of gelijkwaardig (Sparkfun)2 - Kleine drukknoppen voor printmontage GEEN (willekeurig)4 - 2N3904 NPN transistoren8 - 330 ohm weerstanden2 - 74LS04 Hex omvormers1 - 74HC595 serieel naar parallel 8 bit schuifregister 1 - LM358 OP-AMP (Comparator)1 - ATMEGA328P Microcontroller (Creatron)4 - 4.7K weerstanden7 - 10K weerstanden1 - 1N4007 of 1N4001 diode2 - 1N4148 diodes1 - 120 ohm, 1/2W of 1W weerstand1 - printmontage 10K potentiometer1 - 470uF 25V condensator1 - 7805 TO220 pakket spanningsregelaar1 - 10uF 10V condensator2 - 0,1 uF 10V condensatoren1 - 16MHz kristal (Sparkfun)2 - 22pF condensatoren1 - Vrouwelijke voedingsaansluiting (Optioneel om eventuele mannelijke stekker op uw muurtransformator te plaatsen)2 - 16-pins IC-sockets2 - 14-pins IC-sockets1 - 8-pins IC-socket1 - 28-pins IC-socket2 - 1" lang, ongeveer #4 of #6 bouten en bijpassende moeren2 - 1/ 4 "lange #4-40 bouten en bijpassende moeren1 - stuk van 1/2" brede platte aluminium strip op maat gesneden en op maat geboord
#30 AWG draadwikkeldraad#22 AWG draadSoldeer
Aanbevolen:
Gloeiende klok met luchtbellen; Mogelijk gemaakt door ESP8266: 7 stappen (met afbeeldingen)
Gloeiende klok met luchtbellen; Aangedreven door ESP8266: "gloeiende luchtbellenklok" geeft de tijd en enkele afbeeldingen weer door verlichte luchtbellen in vloeistof. In tegenstelling tot een led-matrixdisplay, geven langzaam zwevende, gloeiende luchtbellen me iets om te ontspannen. Begin jaren 90 stelde ik me "bubbeldisplay" voor. niet
Digitale klok met netwerktijd met behulp van de ESP8266: 4 stappen (met afbeeldingen)
Digitale netwerkklok met de ESP8266: we leren hoe we een schattige kleine digitale klok kunnen bouwen die communiceert met NTP-servers en de netwerk- of internettijd weergeeft. We gebruiken de WeMos D1 mini om verbinding te maken met een wifi-netwerk, de NTP-tijd te verkrijgen en deze weer te geven op een OLED-module. De video hierboven
Alles in één digitale chronometer (klok, timer, alarm, temperatuur): 10 stappen (met afbeeldingen)
All in One Digitale Chronometer (Klok, Timer, Alarm, Temperatuur): We waren van plan om voor een andere wedstrijd een Timer te maken, maar later hebben we ook een klok (zonder RTC) geïmplementeerd. Toen we begonnen met programmeren, raakten we geïnteresseerd in het toepassen van meer functionaliteiten op het apparaat en uiteindelijk voegden we DS3231 RTC toe, als
Hoe maak je een Arduino digitale klok: 5 stappen
Hoe maak je een Arduino digitale klok: Digitale klokken zijn een van de grote uitvindingen op het gebied van wetenschap. Heb je je ooit afgevraagd "Hoe je je eigen digitale klokken kunt maken, net als in films! "????Nou, ik heb ook mijn jeugd doorgebracht in een droom om mijn eigen digitale kl
Een klok maken van een klok: 11 stappen (met afbeeldingen)
Een klok maken van een klok: in deze Instructable neem ik een bestaande klok en creëer ik een betere klok. We gaan van de afbeelding links naar de afbeelding rechts. Voordat u op uw eigen klok begint, moet u weten dat het opnieuw in elkaar zetten een uitdaging kan zijn, aangezien de piv