Innholdsfortegnelse:

Arduino digital klokke synkronisert med 60Hz kraftlinje: 8 trinn (med bilder)
Arduino digital klokke synkronisert med 60Hz kraftlinje: 8 trinn (med bilder)

Video: Arduino digital klokke synkronisert med 60Hz kraftlinje: 8 trinn (med bilder)

Video: Arduino digital klokke synkronisert med 60Hz kraftlinje: 8 trinn (med bilder)
Video: Простые цифровые часы с использованием Arduino, часть 2, исправление начальных нулей 2024, Juli
Anonim
Arduino digital klokke synkronisert med 60Hz kraftledning
Arduino digital klokke synkronisert med 60Hz kraftledning

Denne Arduino -baserte digitale klokken er synkronisert med 60Hz kraftledning. Den har en enkel og billig felles anode 4 -sifret 7 -segmenters display som viser timer og minutter. Den bruker en kryssover -detektor for å oppdage når den innkommende 60Hz sinusbølgen krysser nullspenningspunktet og utleder en kvadratbølge på 60 Hz.

Over korte tidsperioder kan frekvensen for den innkommende sinusbølgen fra kraftledningen variere veldig litt på grunn av belastning, men over lange tidsperioder er den gjennomsnittlig til 60Hz veldig presist. Vi kan dra nytte av dette for å få en timingskilde for å synkronisere klokken vår.

Trinn 1: Kretsdiagrammet

Kretsdiagrammet
Kretsdiagrammet

Det er to versjoner av kretsen avhengig av om du vil bruke en transformator med senterkran eller en uten, i begge tilfeller er kretsoperasjonen nesten identisk. Til denne bygningen brukte jeg en veggadapter (ingen senterkran) som sender ut 12V AC. Jeg vil bruke dette designet (Digital Clock1 Circuit Diagram) for kretsbeskrivelsen. Vær oppmerksom på at det er viktig å bruke en veggadapter som sender ut 12V AC ikke 12V DC slik at vi kan slå inn AC sinusbølgen for timing. Du kan sannsynligvis også bruke en transformator som sender ut 9V vekselstrøm, fjerner R19 og får den til å fungere også, men 12V er veldig vanlig tilgjengelig. Slik fungerer kretsen:

120V AC ved 60Hz konverteres til 12V AC av transformator TR1. Dette mates til diode D4 og rettes opp slik at bare +ve spenning mates til, og glattes til omtrent likestrøm med krusning, av kondensatoren C3. Spenningen på C3 mates til 7805 spenningsregulatoren (U6) via motstand R19. R19 brukes til å redusere spenningen på C3 som i mitt tilfelle ble målt til omtrent 15VDC. Dette kan reguleres av 7805, men med dette inngangsnivået må 7805 falle omtrent 10VDC og blir derfor ganske varmt. Ved å bruke R19 til å senke spenningen til omtrent 10VDC, forhindrer vi at U6 blir for varm. Så dette er ikke en effektiv effektkonverteringsteknikk, men den fungerer for våre formål. MERK: bruk minst en 1/2W motstand eller mer her. Kretsen trekker omtrent 55 ma, så effekttap i R19 er omtrent 1/3W basert på P = I ** 2*R eller P = 55ma x 55ma x 120 ohm = 0,363W. Neste U6 sender ut ren 5V DC med C4 og C5 på utgangen for å filtrere eventuell støy på 5V kraftledningen. Denne 5V DC driver alle ICer på brettet.

Fra TR1 tar vi også en prøve av det ufiltrerte vekselstrømssignalet og mater det inn i potensiometer RV1 som brukes til å justere nivået som mates til cross -over -detektoren. R18 og R17 danner en spenningsdeler for å ytterligere redusere nivået av AC -spenning som kommer inn. Husk at dette kommer inn ved 12V AC, og vi må redusere den til mindre enn 5 V slik at den fungerer med vår cross -over -detektor som bare er drevet av 5VDC. R15 og R16 gir strømbegrensning mens D1 og D2 er ment å forhindre overkjøring av op-amp U5. I konfigurasjonen vist vil U5s utgang på pinne 1 veksle mellom +5V og 0V hver gang den innkommende sinusbølgen endres fra positiv til negativ. Dette genererer en firkantbølge på 60 Hz som mates til mikrokontrolleren, U4. Programmet lastet på U4 bruker deretter denne kvadratbølgen på 60Hz for å øke klokken hvert minutt og time. Hvordan dette gjøres vil bli diskutert i avsnittet om programvaren og i kommentarene til programvaren.

U7 brukes 74HC595 skiftregister fordi vi har et begrenset antall digitale pinner på mikroprosessoren, så det brukes til å utvide antall utganger. Vi bruker 4 digitale pinner på mikroprosessoren, men kan styre 7 segmenter på displayet via 74HC595. Dette oppnås ved å flytte forhåndsbestemte mønstre av biter, lagret i mikrokontrolleren, og som representerer hvert siffer som skal vises, til skiftregisteret.

Displayet som brukes her er vanlig anode, så vi må snu signalnivåene som kommer ut av 74HC595 for å slå på et segment. Når et segment skal slås på, vil signalet som kommer ut av 74HC595 -utgangspinnen være på +5V, men vi trenger at pinnen som det mates på displayet er på 0V for å slå på det skjermsegmentet. Så for å gjøre dette trenger vi hexomformere U2 og U3. Dessverre kan en inverter IC bare håndtere 6 inversjoner, så vi trenger to av dem, selv om vi på den andre bare bruker en av de 6 portene. Sløsing dessverre. Du kan spørre hvorfor ikke bruke en vanlig katodetypeskjerm her og eliminere U2 og U3? Svaret er at du kan, jeg har tilfeldigvis en vanlig anodetype i reservedelsforsyningen min. Hvis du har eller vil bruke et vanlig display av katodetype, fjerner du bare U2 og U3 og kobler om Q1 - Q4 slik at transistorkollektorene er koblet til displaypinnene og transistoremitterne er koblet til jord. Q1 - Q4 kontrollerer hvilken av de fire 7 -segmentskjermene som er aktiv. Dette styres av mikrokontrolleren, via pinnene som er koblet til basen til transistorer Q1 - Q4.

Inkrement- og innstillingsknappene vil bli brukt til å stille riktig klokkeslett manuelt når det gjelder faktisk bruk av klokken. Når du trykker på Set -knappen en gang, kan Inkrement -knappen brukes til å gå gjennom timene som vises på displayet. Når du trykker på Set -knappen igjen, kan inkrementknappen brukes til å gå gjennom minuttene som vises på displayet. Når du trykker på Set -knappen for tredje gang, settes tiden. R13 og R14 trekker mikrokontrollerpinnene knyttet til disse knappene lavt når de ikke er i bruk.

Vær oppmerksom på at her har vi tatt U4 (Atmega328p) av det typiske Arduino UNO prototypekortet og lagt det på prototypekortet med resten av kretsen vår. For å gjøre dette må vi som minimum gi krystall X1 og kondensatorer C1 og C2 for å gi en klokkilde for mikrokontrolleren, bindestift 1, tilbakestillingsnålen, høy og gi 5VDC strøm.

Trinn 2: Breadboard din krets

Breadboard din krets
Breadboard din krets
Breadboard din krets
Breadboard din krets

Uansett om du bygger kretsen akkurat som vist i kretsdiagrammet eller kanskje bruker en litt annen transformator, skjermtype eller andre komponenter, bør du først kaste kretsen for å sikre at den fungerer og for å forstå hvordan den fungerer.

På bildene kan du se at breadboarding det hele krevde et par brett samt et Arduino Uno -brett. Så for å programmere mikrokontrolleren eller eksperimentere eller gjøre endringer i programvaren, trenger du først mikrokontroller IC på et UNO -kort, slik at du kan koble en USB -kabel til den og datamaskinen din for å laste opp programmet eller gjøre programvareendringer.

Når du får klokken til å fungere på brødbrettet og har mikrokontrolleren programmert, kan du koble den fra og koble den til kontakten på den endelige byggeklokken på prototypebrettet. Sørg for å følge antistatiske forholdsregler når du gjør dette. Bruk en antistatisk håndleddsrem mens du håndterer mikroprosessoren.

Trinn 3: Kretskonstruksjon på Protoboard

Kretsbygging på Protoboard
Kretsbygging på Protoboard
Kretsbygging på Protoboard
Kretsbygging på Protoboard

Kretsen er konstruert på et stykke prototypekort og kablet punkt til punkt ved hjelp av #30 AWG wire wrap wire. Det gir et tøft og pålitelig resultat. Fordi transformatoren jeg har, har en 5 mm hankontakt på enden av kabelen, monterte jeg den tilsvarende hunnkontakten på baksiden av brettet ved å kutte, bøye og bore et stykke 1/2 bred flat aluminiumslist for å lage en tilpasset braketten og deretter boltet den til brettet med små 4-40 muttere og bolter. Du kan bare kutte kontakten og lodde de resterende strømledningene til brettet og spare deg for omtrent 20 minutter arbeid, men jeg ønsket ikke at transformatoren var festet permanent til styret.

Trinn 4: Opprette en kontakt for skjermen og gi den ben

Opprette en kontakt for skjermen og gi den bein
Opprette en kontakt for skjermen og gi den bein
Opprette en kontakt for skjermen og gi den bein
Opprette en kontakt for skjermen og gi den bein
Opprette en kontakt for skjermen og gi den bein
Opprette en kontakt for skjermen og gi den bein

Fordi skjermen har 16 pinner, 8 en på hver side, med en pinneavstand som er bredere enn en standard 16 -pinners IC -kontakt, må vi justere sokkelstørrelsen slik at den passer til skjermen. Du kan gjøre dette ved ganske enkelt å bruke et par trådkuttere til å kutte plasten som forbinder de to sidene av kontakten, skille dem og lodde dem separat til brettet med et mellomrom som samsvarer med avstanden til pinnene på displayet. Det er en fordel å gjøre dette slik at du ikke trenger å lodde direkte til displaypinnene og utsette displayet for sterk varme. Du kan se kontakten jeg har gjort dette til øverst på brettet på bildet over.

For å få displayet til å stå opp rett, boltet jeg to 1 bolter til de nederste to hjørnehullene på prototypebrettet som vist på bildene for å lage et enkelt stativ. Dette var ganske tippete, så hvis du gjør dette, kan du ønsker å legge noe tungt på baksiden av boltene for å stabilisere det.

Trinn 5: Kontroller kretskortets ledninger og forbereder kalibrering

Kontrollere kretskortets ledninger og forberede kalibrering
Kontrollere kretskortets ledninger og forberede kalibrering

Når kretskortet er koblet til, men før du kobler til IC -ene eller viser eller slår det på, er det en god idé å sjekke kortforbindelsene med en DVM. Du kan stille inn de fleste DVM -er slik at de piper når det er kontinuitet. Sett DVM -en i denne modusen, og følg deretter kretsdiagrammet, sjekk så mange av kretsforbindelsene som mulig. Se etter en åpen krets, eller i nærheten av den, mellom +5V og jordingspunktene. Sjekk visuelt at alle komponentene er koblet til de riktige pinnene.

Koble deretter transformatoren til kretsen og slå den på. Kontroller at du har nøyaktig 5V DC på 5V strømskinne med enten et omfang eller DVM før du kobler til noen ICer eller skjermen.

Deretter plugger du KUN Op-Amp U5 IC som forberedelse til neste trinn. Her vil vi sjekke at kryss -kretsen vår genererer en firkantbølge og justere potensiometer RV1 for et rent 60 Hz -signal.

Trinn 6: Kretskalibrering

Krets kalibrering
Krets kalibrering
Krets kalibrering
Krets kalibrering

Den eneste kalibreringen som skal gjøres er å justere potensiometeret RV1 for riktig signalnivå som mater cross -detektoren. Det er to måter å gjøre dette på:

1. Sett en omfangssonde på pinne 1 på U5 og sørg for å koble omfangssonden til jordkretsen. Juster deretter RV1 til du har en ren firkantbølge som vist på bildet ovenfor. Hvis du justerer RV1 for langt på en eller annen måte, har du enten ingen firkantbølge eller en forvrengt firkantbølge. Sørg for at kvadratbølgens frekvens er 60 Hz. Hvis du har et moderne omfang, vil det sannsynligvis fortelle deg frekvensen. Hvis du har et gammelt omfang som jeg, så sørg for at kvadratbølgetiden er omtrent 16,66 ms eller 1/60 sekunder.

2. Bruk en frekvensmåler eller DVM i frekvensmodus til å måle frekvensen ved pin 1 på U5 og juster RV1 for nøyaktig 60 Hz.

Når denne kalibreringen er utført, slår du av kretsen og kobler til alle IC -ene og displayet for å fullføre kretskonstruksjonen.

Trinn 7: Arduino -programmet

Programmet er fullstendig kommentert slik at du kan finne ut detaljene i hvert trinn. På grunn av programmets kompleksitet er det vanskelig å beskrive hvert trinn, men på et veldig høyt nivå er det slik det fungerer:

Mikroprosessoren mottar den innkommende 60 Hz firkantbølgen og teller 60 sykluser og øker sekundtellingen etter hver 60 syklus. Når sekundtellingen når 60 sekunder eller 3600 sykluser, økes antall minutter og sekundtellingen tilbakestilles til null. Når minuttallet når 60 minutter, økes timetallet og antall minutter tilbakestilles til null. timetallet tilbakestilles til 1 etter 13 timer, så dette er en 12 -timers klokke. Hvis du vil ha en 24 -timers klokke, må du bare endre programmet for å tilbakestille timer til null etter 24 timer.

Dette er et eksperimentelt prosjekt, så jeg prøvde å bruke en Do-While-sløyfe for å undertrykke bryterstopp på knappene Set og Increment. Det fungerer rimelig bra. Når du trykker på Set -knappen én gang, kan du øke trinnene for å gå gjennom timene som vises på displayet. Når du trykker på Set -knappen igjen, kan inkrementknappen brukes til å gå gjennom minuttene som vises på displayet. Når Set -knappen trykkes for tredje gang, settes klokken og klokken begynner å gå.

Mønstre på 0 og 1 som brukes til å vise hvert nummer på 7-segmenters displayer, lagres i matrisen Seven_Seg. Avhengig av gjeldende klokkeslett, mates disse mønstrene til 74HC595 IC og sendes til displayet. Hvilken av de fire sifrene på displayet som slås på til enhver tid for å motta disse dataene, styres av mikroprosessoren via displayet Dig 1, 2, 3, 4 pins. Når kretsen slås på, kjører programmet først en testrutine kalt Test_Clock som sender de riktige sifrene for å lyse opp hver skjerm med et tall fra 0 til 9. Så hvis du ser dette når du starter, vet du at du har bygget alt riktig.

Trinn 8: Deleliste

1 - Transformer 120VAC til 12VAC ca 100ma eller mer1 - Prototypekort ca 3,5 "x 3,5" 1 - 4 siffer 7 -segmenters display YSD -439K2B -35 eller tilsvarende (Sparkfun) 2 - Liten trykknapp for PCB -montering NO (noen) 4 - 2N3904 NPN -transistorer8 - 330 ohm motstander2 - 74LS04 Hex -omformere1 - 74HC595 seriell til parallell 8 -bits skiftregister 1 - LM358 OP -AMP (komparator) 1 - ATMEGA328P mikrokontroller (Creatron) 4-7.7K motstander7 - 10K motstander1 - 1N4007 eller 1N4001 diode2 - dioder1 - 120 ohm, 1/2W eller 1W motstand1 - PCB -montering 10K potensiometer1 - 470uF 25V kondensator1 - 7805 TO220 pakke spenningsregulator1 - 10uF 10V kondensator2 - 0.1 uF 10V kondensatorer1 - 16MHz krystall (Sparkfun) 2 - 22pF kondensatorer1 - Kvinnelig strømkontakt (Valgfri for å montere hannkontakt hvis det er noen på veggtransformatoren) 2 - 16 -polers IC -kontakter2 - 14 -polet IC -sokkel1 - 8 -polet IC -sokkel1 - 28 -polet IC -sokkel2 - 1 "lang ca #4 eller #6 bolter og matchende muttere2 - 1/ 4 "lange #4-40 bolter og matchende muttere1 - stykke 1/2" bred flat aluminiumslist tilpasset kutt og boret i størrelse

#30 AWG wire wrap wire#22 AWG wireSolder

Anbefalt: