Inhoudsopgave:

60Hz Arduino-klok - Ajarnpa
60Hz Arduino-klok - Ajarnpa

Video: 60Hz Arduino-klok - Ajarnpa

Video: 60Hz Arduino-klok - Ajarnpa
Video: как сделать аналоговые часы со светодиодной подсветкой Propeller, Arduino NANO, utsource 2024, Juli-
Anonim
60Hz Arduino-klok
60Hz Arduino-klok

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: Stap 1: Schema's

Stap 1: Schema's
Stap 1: Schema's

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: Stap 2: Breadboard-prototype

Stap 2: Breadboard-prototype
Stap 2: Breadboard-prototype
Stap 2: Breadboard-prototype
Stap 2: Breadboard-prototype

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: Stap 3: Definitieve constructie

Stap 3: Definitieve constructie
Stap 3: Definitieve constructie
Stap 3: Definitieve constructie
Stap 3: Definitieve constructie

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: Stap 4: Een socket maken voor het display en het poten geven

Stap 4: Een socket maken voor het display en het poten geven
Stap 4: Een socket maken voor het display en het poten geven
Stap 4: Een socket maken voor het display en het poten geven
Stap 4: Een socket maken voor het display en het poten geven
Stap 4: Een socket maken voor het display en het poten geven
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: Stap 5: De bedrading van de printplaat controleren en voorbereiden om te kalibreren

Stap 5: De bedrading van de printplaat controleren en voorbereiden om te kalibreren
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: Stap 6: Circuitkalibratie

Stap 6: Circuitkalibratie
Stap 6: Circuitkalibratie
Stap 6: Circuitkalibratie
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: 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: Stap 8: PCBWay-aanbieding

Daarmee is dit bericht afgesloten, maar de sponsor van dit project is PCBWay die op dat moment hun 5-jarig jubileum viert. Bekijk het op https://www.pcbway.com/anniversary5sales.html en vergeet niet dat hun montageservice nu slechts $ 30 kost.

Aanbevolen: