Indholdsfortegnelse:

Arduino digitalt ur synkroniseret med 60Hz strømlinje: 8 trin (med billeder)
Arduino digitalt ur synkroniseret med 60Hz strømlinje: 8 trin (med billeder)

Video: Arduino digitalt ur synkroniseret med 60Hz strømlinje: 8 trin (med billeder)

Video: Arduino digitalt ur synkroniseret med 60Hz strømlinje: 8 trin (med billeder)
Video: Контрольная лампа переменного тока с диммером Arduino AC 2024, Juli
Anonim
Arduino digitalt ur synkroniseret af 60Hz strømlinjen
Arduino digitalt ur synkroniseret af 60Hz strømlinjen

Dette Arduino -baserede digitale ur er synkroniseret med 60Hz -strømledningen. Det har en enkel og billig fælles anode 4 -cifret 7 segment display, der viser timer og minutter. Den bruger en cross -over detektor til at detektere, når den indkommende 60Hz sinusbølge krydser nulspændingspunktet og udleder en 60 Hz firkantbølge.

I løbet af korte tidsperioder kan frekvensen af den indkommende sinusbølge fra kraftledningen variere meget lidt på grund af belastning, men over lange perioder er den gennemsnitligt 60 Hz meget præcist. Vi kan drage fordel af dette til at udlede en timingskilde til at synkronisere vores ur.

Trin 1: Kredsløbsdiagrammet

Kredsløbsdiagrammet
Kredsløbsdiagrammet

Der er to versioner af kredsløbet afhængigt af, om du vil bruge en transformer med et centerhane eller en uden, i begge tilfælde er kredsløbets drift næsten identisk. Til denne opbygning brugte jeg en vægadapter (ingen centerhane), der udsender 12V AC. Jeg vil bruge dette design (Digital Clock1 Circuit Diagram) til kredsløbets beskrivelse. Bemærk, at det er vigtigt at bruge en vægadapter, der udsender 12V AC ikke 12V DC, så vi kan trykke på AC sinusbølgen til timing. Du kan sandsynligvis også bruge en transformer, der udsender 9V AC, fjerner R19 og får det også til at fungere, men 12V er meget almindeligt tilgængeligt. Sådan fungerer kredsløbet:

120V AC ved 60Hz konverteres til 12V AC af transformer TR1. Dette føres til diode D4 og udbedres, så kun +ve spænding tilføres og jævnes til omtrent DC med krusning af kondensatoren C3. Spændingen på C3 føres til 7805 spændingsregulatoren (U6) via modstand R19. R19 bruges til at reducere spændingen på C3, som i mit tilfælde blev målt til cirka 15VDC. Dette kan reguleres af 7805, men med dette indgangsniveau skal 7805 falde cirka 10VDC og bliver derfor meget varmt. Ved at bruge R19 til at sænke spændingen til omkring 10VDC forhindrer vi U6 i at varme op for meget. Så dette er ikke en effektiv strømkonverteringsteknik, men den fungerer til vores formål. BEMÆRK: brug mindst en 1/2W modstand eller mere her. Kredsløbet tegner omkring 55 ma, så effekttab i R19 er ca. 1/3W baseret på P = I ** 2*R eller P = 55ma x 55ma x 120 ohm = 0,363W. Næste U6 udsender ren 5V DC med C4 og C5 på udgangen for at filtrere enhver støj på 5V strømlinjen. Denne 5V DC driver alle IC'er på tavlen.

Fra TR1 tager vi også en prøve af det ufiltrerede vekselstrømssignal og indfører det i potentiometer RV1, der bruges til at justere det niveau, der tilføres cross -over -detektoren. R18 og R17 danner en spændingsdeler for yderligere at reducere niveauet af AC -spænding, der kommer ind. Husk, at dette kommer ind ved 12V AC, og vi skal reducere det til mindre end 5 V, så det fungerer med vores cross -over -detektor, som kun er drevet af 5VDC. R15 og R16 giver strømbegrænsning, mens D1 og D2 er beregnet til at forhindre overkørsel af op-amp U5. I den viste konfiguration vil U5's output på pin 1 skifte mellem +5V og 0V hver gang den indkommende sinusbølge ændres fra positiv til negativ. Dette genererer en firkantbølge på 60 Hz, som føres til mikrokontrolleren, U4. Programmet indlæst på U4 bruger derefter denne firkantbølge på 60Hz til at øge uret hvert minut og time. Hvordan dette gøres, vil blive diskuteret i afsnittet om softwareprogrammet og i softwarekommentarerne.

U7 bruges 74HC595 skiftregistret, fordi vi har et begrænset antal digitale ben på mikroprocessoren, så det bruges til at udvide antallet af udgange. Vi bruger 4 digitale ben på mikroprocessoren, men kan styre 7 segmenter på displayet via 74HC595. Dette opnås ved at flytte forudbestemte mønstre af bits, der er gemt i mikrokontrolleren, og som repræsenterer hvert ciffer, der skal vises, i skiftregistret.

Displayet, der bruges her, er almindelig anode, så vi er nødt til at vende signalniveauerne, der kommer ud af 74HC595, for at tænde et segment. Når et segment skal tændes, vil signalet, der kommer ud af 74HC595 -udgangsstiften, være på +5V, men vi har brug for, at stiften, det føder på displayet, er på 0V for at tænde det skærmsegment. Så for at gøre dette har vi brug for hexomformere U2 og U3. Desværre kan en inverter IC kun håndtere 6 inversioner, så vi har brug for to af dem, selvom vi på den anden kun bruger en af de 6 porte. Spildt desværre. Du kan spørge, hvorfor ikke bruge en almindelig katodetypeskærm her og fjerne U2 og U3? Svaret er godt, at du kan, jeg har tilfældigvis en fælles anodetype i mine reservedele. Hvis du har eller ønsker at bruge et almindeligt display af katodetype, skal du bare fjerne U2 og U3 og omslutte Q1 - Q4, så transistorsamlerne er forbundet til displaystifterne, og transistoremitterne er forbundet til jorden. Q1 - Q4 styrer, hvilken af de fire 7 -segmenters skærme, der er aktiv. Dette styres af mikrokontrolleren via stifterne forbundet til bunden af transistorer Q1 - Q4.

Forøgelses- og indstillingsknapperne bruges til manuelt at indstille det korrekte ur, når det kommer til faktisk at bruge uret. Når der trykkes på knappen Set en gang, kan knappen Increment bruges til at gennemgå de timer, der vises på displayet. Når der trykkes på knappen Set igen, kan stigningsknappen bruges til at gennemgå de minutter, der vises på displayet. Når der trykkes på knappen Set for tredje gang, indstilles tiden. R13 og R14 trækker mikrocontrollerboltene, der er knyttet til disse knapper, lavt, når de ikke er i brug.

Bemærk, at vi her har taget U4 (Atmega328p) fra det typiske Arduino UNO -prototypekort og lagt det på prototypekort med resten af vores kredsløb. For at gøre dette skal vi som minimum levere krystal X1 og kondensatorer C1 og C2 for at tilvejebringe en urkilde til mikrokontrolleren, binde pin 1, nulstillingstappen, høj og give 5VDC strøm.

Trin 2: Breadboard dit kredsløb

Breadboard Dit kredsløb
Breadboard Dit kredsløb
Breadboard Dit kredsløb
Breadboard Dit kredsløb

Uanset om du bygger kredsløbet nøjagtigt som vist i kredsløbsdiagrammet eller måske bruger en lidt anden transformer, skærmtype eller andre komponenter, skal du først brødbrede kredsløbet for at sikre, at det fungerer, og for at du forstår, hvordan det fungerer.

På billederne kan du se, at breadboarding det hele krævede et par brædder samt et Arduino Uno -bord. Så for at programmere mikrokontrolleren eller eksperimentere eller foretage ændringer i softwaren, skal du i første omgang have mikrokontroller -IC'en på et UNO -kort, så du kan tilslutte et USB -kabel til den og din computer for at uploade programmet eller foretage softwareændringer.

Når du får uret til at fungere på brødbrættet og har din mikrokontroller programmeret, kan du tage stikket ud af stikket og sætte det i stikkontakten på dit endelige bygge permanente ur på prototypebord. Sørg for at følge antistatiske forholdsregler, når du gør dette. Brug en antistatisk håndledsrem, mens du håndterer mikroprocessoren.

Trin 3: Kredsløbskonstruktion på Protoboard

Kredsløbskonstruktion på Protoboard
Kredsløbskonstruktion på Protoboard
Kredsløbskonstruktion på Protoboard
Kredsløbskonstruktion på Protoboard

Kredsløbet er konstrueret på et stykke prototype bord og kablet punkt til punkt ved hjælp af #30 AWG wire wrap wire. Det giver et hårdt og pålideligt resultat. Fordi den transformer, jeg har, har et hanstik på 5 mm på enden af kablet, monterede jeg den tilsvarende hunkontakt på bagsiden af brættet ved at skære, bøje og bore et stykke 1/2 bredt fladt aluminiumsliste for at lave en brugerdefineret beslag og derefter boltet det til brættet med små 4-40 møtrikker og bolte. Du kan bare afskære stikket og lodde de resterende strømkabler til brættet og spare dig selv for cirka 20 minutters arbejde, men jeg ville ikke have transformatoren fastgjort permanent til bestyrelsen.

Trin 4: Oprettelse af et stik til skærmen og give det ben

Oprettelse af en stikkontakt til skærmen og give den ben
Oprettelse af en stikkontakt til skærmen og give den ben
Oprettelse af en stikkontakt til skærmen og give den ben
Oprettelse af en stikkontakt til skærmen og give den ben
Oprettelse af en stikkontakt til skærmen og give den ben
Oprettelse af en stikkontakt til skærmen og give den ben

Fordi skærmen har 16 ben, 8 en på hver side, med en stiftafstand, der er bredere end en standard 16 -benet IC -stik, skal vi justere stikstørrelsen, så den passer til skærmen. Du kan gøre dette ved blot at bruge et par trådskærere til at snippe plasten, der forbinder de to sider af fatningen, adskille dem og lodde dem separat til brættet med et mellemrum, der matcher afstanden mellem stifterne på displayet. Det er en fordel at gøre dette, så du ikke behøver at lodde direkte til displaystifterne og udsætte skærmen for overdreven varme. Du kan se stikket, jeg har gjort dette til, øverst på brættet på billedet ovenfor.

For at få displayet til at stå op til højre, boltede jeg to 1 bolte til de nederste to hjørnehuller på prototypebrættet som vist på billederne for at lave et enkelt stativ. Dette var temmelig tippet, så hvis du gør dette, kan du evt. ønsker at lægge noget tungt på bagsiden af boltene for at stabilisere det.

Trin 5: Kontrol af printkortets ledninger og forberedelse til kalibrering

Kontrol af printkortets ledninger og forberedelse til kalibrering
Kontrol af printkortets ledninger og forberedelse til kalibrering

Når kredsløbskortet er tilsluttet, men før du tilslutter IC'erne eller viser eller tænder det, er det en god idé at kontrollere kortforbindelserne med en DVM. Du kan indstille de fleste DVM'er, så de bipper, når der er kontinuitet. Indstil din DVM i denne tilstand, og følg derefter dit kredsløbsdiagram, kontroller så mange af kredsløbstilslutningerne som muligt. Kontroller, om der er et åbent kredsløb, eller tæt på det, mellem +5V og jordpunkterne. Kontroller visuelt, at alle komponenter er forbundet til de korrekte ben.

Tilslut derefter din transformer til kredsløbet, og tænd for den. Kontroller, at du har præcis 5V DC på 5V -strømskinnen med enten et omfang eller DVM, før du tilslutter IC'er eller displayet.

Tilslut derefter KUN Op-Amp U5 IC som forberedelse til næste trin. Her vil vi kontrollere, at vores cross -over kredsløb genererer en firkantbølge og justere potentiometer RV1 til et rent 60 Hz signal.

Trin 6: Kredsløbskalibrering

Kredsløbskalibrering
Kredsløbskalibrering
Kredsløbskalibrering
Kredsløbskalibrering

Den eneste kalibrering, der skal foretages, er at justere potentiometeret RV1 til det korrekte signalniveau, der fodrer cross -over -detektoren. Der er to måder at gøre dette på:

1. Sæt en scope -sonde på pin 1 på U5, og sørg for at tilslutte scope -probens jordledning til kredsløbets jord. Juster derefter RV1, indtil du har en ren firkantbølge som vist på billedet ovenfor. Hvis du justerer RV1 for langt på den ene eller den anden måde, har du enten ingen firkantbølge eller en forvrænget firkantbølge. Sørg for, at firkantbølgens frekvens er 60 Hz. Hvis du har et moderne omfang, vil det sandsynligvis fortælle dig frekvensen. Hvis du har et gammelt omfang som jeg, så sørg for, at kvadratbølgeperioden er cirka 16,66 ms eller 1/60 sek.

2. Brug en frekvensmåler eller DVM i frekvenstilstand til at måle frekvensen ved Pin 1 på U5 og juster RV1 til nøjagtigt 60 Hz.

Når denne kalibrering er udført, skal du slukke for kredsløbet og tilslutte alle IC'erne og displayet for at fuldføre kredsløbskonstruktionen.

Trin 7: Arduino -programmet

Programmet er fuldt kommenteret, så du kan finde ud af detaljerne i hvert trin. På grund af programmets kompleksitet er det svært at beskrive hvert trin, men på et meget højt niveau fungerer det sådan:

Mikroprocessoren modtager den indkommende 60 Hz firkantbølge og tæller 60 cyklusser og øger sekundtællingen efter hver 60 cyklus. Når sekundtællingen når 60 sekunder eller 3600 cyklusser, øges antallet af minutter, og sekundtallet nulstilles. Når antallet af minutter når 60 minutter, øges timetallet, og minuttallet nulstilles. timetallet nulstilles til 1 efter 13 timer, så dette er et 12 timers ur. Hvis du vil have et 24 -timers ur, skal du bare ændre programmet for at nulstille timer til nul efter 24 timer.

Dette er et eksperimentelt projekt, så jeg forsøgte at bruge en Do-While-sløjfe til at undertrykke switch-afvisning på knapperne Set og Increment. Det fungerer rimeligt godt. Når der trykkes én gang på knappen Set, kan knappen Inkrement bruges til at gå gennem de timer, der vises på displayet. Når der trykkes på knappen Set igen, kan stigningsknappen bruges til at gennemgå de minutter, der vises på displayet. Når der trykkes på knappen Set for tredje gang, indstilles tiden, og uret begynder at køre.

Mønstre på 0 og 1, der bruges til at vise hvert nummer på 7-segmentskærmene, gemmes i arrayet kaldet Seven_Seg. Afhængigt af den aktuelle urtid føjes disse mønstre til 74HC595 IC og sendes til displayet. Hvilken af de 4 cifre i displayet, der til enhver tid er tændt for at modtage disse data, styres af mikroprocessoren via displayet Dig 1, 2, 3, 4 pins. Når kredsløbet tændes, kører programmet først en testrutine kaldet Test_Clock, som sender de korrekte cifre for at tænde hvert display med et tal fra 0 til 9. Så hvis du ser dette, når du tænder, ved du, at du har bygget alt korrekt.

Trin 8: Deleliste

1 - Transformer 120VAC til 12VAC ca. 100ma eller mere1 - Prototypekort ca. 3,5 "x 3,5" 1-4 cifret 7 segment display YSD -439K2B -35 eller tilsvarende (Sparkfun) 2 - Små trykknapper til print på PCB NO (nogen) 4 - 2N3904 NPN -transistorer8 - 330 ohm modstande2 - 74LS04 Hex -omformere1 - 74HC595 seriel til parallel 8 bit skiftregister 1 - LM358 OP -AMP (komparator) 1 - ATMEGA328P mikrokontroller (Creatron) 4-7.7 modstande7 - 10K modstande1 - 1N4007 eller 1N4001 diode2 - dioder1 - 120 ohm, 1/2W eller 1W modstand1 - PCB -montering 10K potentiometer1 - 470uF 25V kondensator1 - 7805 TO220 pakke spændingsregulator1 - 10uF 10V kondensator2 - 0,1 uF 10V kondensatorer1 - 16MHz krystal (Sparkfun) 2 - 22pF kondensatorer1 - Kvindelig strømstik (Valgfri til montering af hanstik, hvis der findes en på din vægtransformator) 2 - 16 ben IC - stik 2 - 14 - polet IC - stik - 8 - benet IC - stik - 28 - pin IC - stik 2 - 1 "lang ca #4 eller #6 bolte og matchende møtrikker2 - 1/ 4 "lange #4-40 bolte og matchende møtrikker1 - stykke 1/2" bredt fladt aluminiumsliste tilpasset snit og boret i størrelse

#30 AWG wire wrap wire#22 AWG wireLod

Anbefalede: