Innehållsförteckning:

Arduino digital klocka synkroniserad med 60 Hz kraftledning: 8 steg (med bilder)
Arduino digital klocka synkroniserad med 60 Hz kraftledning: 8 steg (med bilder)

Video: Arduino digital klocka synkroniserad med 60 Hz kraftledning: 8 steg (med bilder)

Video: Arduino digital klocka synkroniserad med 60 Hz kraftledning: 8 steg (med bilder)
Video: Управление 32 сервомоторами с помощью PCA9685 и Arduino: V3 2024, Juli
Anonim
Arduino digital klocka synkroniserad med 60 Hz kraftledning
Arduino digital klocka synkroniserad med 60 Hz kraftledning

Denna Arduino -baserade digitala klocka synkroniseras med 60 Hz kraftledning. Den har en enkel och billig 4 -siffrig 7 -segmentig anoddisplay som visar timmar och minuter. Den använder en cross -over -detektor för att detektera när den inkommande 60Hz sinusvågan passerar nollspänningspunkten och härleder en 60 Hz kvadratvåg.

Under korta tidsperioder kan frekvensen för den inkommande sinusvågen från kraftledningen variera mycket lite på grund av belastning, men under långa perioder är den i genomsnitt 60 Hz i genomsnitt mycket exakt. Vi kan dra nytta av detta för att härleda en tidskälla för att synkronisera vår klocka.

Steg 1: Kretsdiagrammet

Kretsdiagrammet
Kretsdiagrammet

Det finns två versioner av kretsen beroende på om du vill använda en transformator med mittkran eller en utan, i båda fallen är kretsoperationen nästan identisk. För detta bygge använde jag en väggadapter (ingen mittkran) som matar ut 12V AC. Jag kommer att använda denna design (Digital Clock1 Circuit Diagram) för kretsbeskrivningen. Observera att det är viktigt att använda en väggadapter som matar ut 12V AC inte 12V DC så att vi kan ta in AC -sinusvåg för timing. Du kan förmodligen också använda en transformator som matar ut 9V AC, ta bort R19 och få det att fungera också, men 12V är mycket vanligt tillgängligt. Så här fungerar kretsen:

120V AC vid 60Hz omvandlas till 12V AC av transformator TR1. Detta matas till diod D4 och rättas till så att endast +ve -spänning matas till och jämnas till ungefär likström med krusning av kondensatorn C3. Spänningen på C3 matas till 7805 spänningsregulatorn (U6) via motståndet R19. R19 används för att minska spänningen på C3 som i mitt fall mättes till cirka 15VDC. Detta kan regleras av 7805 men med denna ingångsnivå måste 7805 sjunka cirka 10VDC och blir därför ganska varmt. Genom att använda R19 för att sänka spänningen till cirka 10VDC förhindrar vi att U6 värms upp för mycket. Så detta är inte en effektiv effektomvandlingsteknik, men den fungerar för våra ändamål. OBS: använd minst ett 1/2W motstånd eller mer här. Kretsen drar cirka 55 ma, så effektförlust i R19 är cirka 1/3W baserat på P = I ** 2*R eller P = 55ma x 55ma x 120 ohm = 0,363W. Nästa U6 matar ut ren 5V DC med C4 och C5 på utgången för att filtrera eventuellt brus på 5V kraftledningen. Denna 5V DC driver alla IC: er på kortet.

Från TR1 tar vi också ett prov av den ofiltrerade växelströmsignalen och matar den in i potentiometern RV1 som används för att justera nivån som matas till cross -over -detektorn. R18 och R17 bildar en spänningsdelare för att ytterligare minska nivån på AC -spänningen som kommer in. Kom ihåg att detta kommer in vid 12V AC och vi måste minska den till mindre än 5 V så att den fungerar med vår cross -over -detektor som bara är drivs av 5VDC. R15 och R16 ger strömbegränsning medan D1 och D2 är avsedda att förhindra överdrivning av op-amp U5. I konfigurationen som visas kommer U5: s utgång på stift 1 att växla mellan +5V och 0V varje gång den inkommande sinusvågan ändras från positiv till negativ. Detta genererar en fyrkantvåg på 60 Hz som matas till mikrokontrollern, U4. Programmet som laddas på U4 använder sedan denna fyrkantvåg på 60 Hz för att öka klockan varje minut och timme. Hur detta görs kommer att diskuteras i avsnittet om programvaran och i programvarukommentarer.

U7 används 74HC595 skiftregister eftersom vi har ett begränsat antal digitala stift på mikroprocessorn, så det används för att utöka antalet utgångar. Vi använder 4 digitala stift på mikroprocessorn men kan styra 7 segment på displayen via 74HC595. Detta åstadkoms genom att flytta förutbestämda bitmönster, lagrade i mikrokontrollern, och som representerar varje siffra som ska visas, i skiftregistret.

Displayen som används här är vanlig anod, så vi måste invertera signalnivåerna som kommer ut från 74HC595 för att aktivera ett segment. När ett segment ska slås på kommer signalen som kommer ut från 74HC595 -utgångsstiften att vara vid +5V, men vi behöver stiftet som matas på displayen för att vara vid 0V för att kunna slå på det skärmsegmentet. Så för att göra detta behöver vi hexomvandlare U2 och U3. Tyvärr kan en inverter IC bara hantera 6 inversioner så vi behöver två av dem även om vi på den andra bara använder en av de 6 grindarna. Slöseri tyvärr. Du kanske frågar varför inte använda en vanlig katodtypskärm här och eliminera U2 och U3? Svaret är att du kan, jag råkar bara ha en vanlig anodtyp i mina reservdelar. Om du har eller vill använda en vanlig display av katodtyp, eliminera bara U2 och U3 och köra om Q1 - Q4 så att transistorkollektorerna är anslutna till displaystiften och transistorsändarna är anslutna till jord. Q1 - Q4 styr vilken av de fyra 7 -segmentskärmarna som är aktiv. Detta styrs av mikrokontrollern via stiften som är anslutna till basen på transistorerna Q1 - Q4.

Ökningsknapparna och inställningsknapparna kommer att användas för att manuellt ställa in rätt klockslag när det gäller att faktiskt använda klockan. När du trycker på Set -knappen en gång kan knappen Increment användas för att gå igenom timmarna som visas på displayen. När du trycker på Set -knappen igen kan steg -knappen användas för att gå igenom minuterna som visas på displayen. När knappen Set ställs in för tredje gången, ställs tiden in. R13 och R14 drar mikrokontrollerstiften som är associerade med dessa knappar lågt när de inte används.

Observera att här har vi tagit U4 (Atmega328p) från det typiska Arduino UNO -prototypkortet och lagt det på prototypkort med resten av vår krets. För att göra detta måste vi åtminstone tillhandahålla kristall X1 och kondensatorer C1 och C2 för att tillhandahålla en klocka för mikrokontrollern, binda stift 1, återställningsstiftet, högt och ge 5VDC effekt.

Steg 2: Breadboard din krets

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

Oavsett om du bygger kretsen precis som visas i kretsschemat eller kanske använder en lite annorlunda transformator, displaytyp eller andra komponenter, bör du först bräda kretsen för att säkerställa att den fungerar och för att du förstår hur den fungerar.

På bilderna kan du se att det hela krävdes ett par brädor samt en Arduino Uno -bräda för att brödbräda. Så för att programmera mikrokontrollen eller experimentera eller göra ändringar i programvaran behöver du initialt mikrokontroller IC på ett UNO -kort så att du kan ansluta en USB -kabel till den och din dator för att ladda upp programmet eller göra programändringar.

När du har fått klockan att fungera på brödbrädan och har din mikrokontroller programmerad, kan du koppla ur den och ansluta den till uttaget på din slutgiltiga permanenta klocka på prototypkort. Var noga med att följa antistatiska försiktighetsåtgärder när du gör detta. Använd ett antistatiskt handledsrem medan du hanterar mikroprocessorn.

Steg 3: Kretskonstruktion på Protoboard

Kretskonstruktion på Protoboard
Kretskonstruktion på Protoboard
Kretskonstruktion på Protoboard
Kretskonstruktion på Protoboard

Kretsen är konstruerad på en bit prototypkort och trådbunden från punkt till punkt med #30 AWG -trådtråd. Det ger ett tufft och pålitligt resultat. Eftersom transformatorn jag har har en 5 mm hankontakt på kabeländen, monterade jag motsvarande honkontakt på baksidan av brädet genom att klippa, böja och borra en bit 1/2 bred platt aluminiumlist för att göra en anpassad fästet och skruvade sedan fast det på brädet med små 4-40 muttrar och bultar. Du kan bara klippa av kontakten och löda de återstående strömkablarna till brädet och spara dig cirka 20 minuters arbete, men jag ville inte att transformatorn skulle vara permanent fastsatt till styrelsen.

Steg 4: Skapa ett uttag för displayen och ge det ben

Skapa ett uttag för displayen och ge det ben
Skapa ett uttag för displayen och ge det ben
Skapa ett uttag för displayen och ge det ben
Skapa ett uttag för displayen och ge det ben
Skapa ett uttag för displayen och ge det ben
Skapa ett uttag för displayen och ge det ben

Eftersom displayen har 16 stift, 8 en på varje sida, med ett stiftavstånd som är bredare än ett vanligt 16 -stifts IC -uttag måste vi justera uttaget för att passa skärmen. Du kan göra detta genom att helt enkelt använda ett par trådskärare för att klippa plasten som ansluter de två sidorna av uttaget, separera dem och löd dem separat till brädet med ett avstånd som matchar avståndet mellan stiften på displayen. Det är fördelaktigt att göra detta så att du inte behöver lödas direkt på displaystiften och utsätta displayen för överdriven värme. Du kan se uttaget som jag har gjort detta högst upp på brädet i bilden ovan.

För att få skärmen att stå upp rätt skruvade jag två 1 bultar till de två nedre hörnhålen på prototypkortet som visas på bilderna för att göra ett enkelt stativ. Detta var ganska tippigt, så om du gör det kan du kanske vill lägga något tungt på baksidan av bultarna för att stabilisera det.

Steg 5: Kontrollera kretskortets ledningar och förbereda kalibrering

Kontrollera kretskortets ledningar och förbereda kalibrering
Kontrollera kretskortets ledningar och förbereda kalibrering

När kretskortet är anslutet men innan du ansluter IC: erna eller visar eller slår på det är det en bra idé att kontrollera kortanslutningarna med en DVM. Du kan ställa in de flesta DVM så att de piper när det finns kontinuitet. Ställ in din DVM i detta läge och följ sedan ditt kretsschema, kontrollera så många av kretsanslutningarna som möjligt. Sök efter en öppen krets, eller nära den, mellan +5V och markpunkter. Kontrollera visuellt att alla komponenter är anslutna till rätt stift.

Anslut sedan din transformator till kretsen och slå på den. Kontrollera att du har exakt 5V DC på 5V -strömskenan med antingen ett omfång eller DVM innan du ansluter några IC: er eller displayen.

Anslut bara ENDAST Op-Amp U5 IC som förberedelse för nästa steg. Här kommer vi att kontrollera att vår cross -over -krets genererar en fyrkantvåg och justera potentiometern RV1 för en ren 60 Hz -signal.

Steg 6: Kretskalibrering

Kretskalibrering
Kretskalibrering
Kretskalibrering
Kretskalibrering

Den enda kalibreringen som ska göras är att justera potentiometern RV1 för korrekt signalnivå som matar överkorsningsdetektorn. Det finns två sätt att göra detta:

1. Sätt en omfångssond på stift 1 på U5 och se till att ansluta omfångssonden jordkabel till kretsens jord. Justera sedan RV1 tills du har en ren fyrkantvåg enligt bilden ovan. Om du justerar RV1 för långt på ett eller annat sätt har du antingen ingen kvadratvåg eller en förvrängd fyrkantvåg. Se till att kvadratvågens frekvens är 60 Hz. Om du har ett modernt omfång kommer det förmodligen att berätta frekvensen. Om du har ett gammalt omfång som jag, se till att kvadratvågsperioden är cirka 16,66 ms eller 1/60 sekunder.

2. Använd en frekvensräknare eller DVM i frekvensläge för att mäta frekvensen vid Pin 1 på U5 och justera RV1 för exakt 60 Hz.

När denna kalibrering är klar stänger du av kretsen och ansluter alla IC: er och displayen för att slutföra kretskonstruktionen.

Steg 7: Arduino -programmet

Programmet kommenteras fullt ut så att du kan ta reda på detaljerna i varje steg. På grund av programmets komplexitet är det svårt att beskriva varje steg, men på en mycket hög nivå är det så här det fungerar:

Mikroprocessorn tar emot den inkommande 60 Hz fyrkantvåg och räknar 60 cykler och ökar sekundräkningen efter var 60: e cykel. När sekundräkningen når 60 sekunder, eller 3600 cykler, ökas minuträkningen och sekundräkningen återställs till noll. När minuträkningen når 60 minuter ökas timräkningen och minuträkningen återställs till noll. timräkningen återställs till 1 efter 13 timmar, så detta är en 12 -timmars klocka. Om du vill ha en 24 -timmars klocka ändrar du bara programmet för att återställa timmarna till noll efter 24 timmar.

Detta är ett experimentellt projekt, så jag försökte använda en Do-While-slinga för att undertrycka omkopplingsstopp på knapparna Set och Increment. Det fungerar rimligt bra. När du trycker på Set -knappen en gång, kan Increment -knappen användas för att gå igenom timmarna som visas på displayen. När du trycker på Set -knappen igen kan steg -knappen användas för att gå igenom minuterna som visas på displayen. När knappen Set ställs in för tredje gången, ställs tiden in och klockan börjar gå.

Mönster på 0 och 1 som används för att visa varje nummer på 7-segmentskärmarna lagras i matrisen Seven_Seg. Beroende på den aktuella klockan matas dessa mönster till 74HC595 IC och skickas till displayen. Vilken av de fyra siffrorna i displayen som slås på vid varje tillfälle för att ta emot dessa data styrs av mikroprocessorn via displayen Dig 1, 2, 3, 4 pins. När kretsen startas kör programmet först en testrutin som heter Test_Clock som skickar rätt siffror för att tända varje display med ett antal från 0 till 9. Så om du ser detta när du startar vet du att du har byggt allt korrekt.

Steg 8: Dellista

1 - Transformator 120VAC till 12VAC ca 100ma eller mer1 - Prototypkort ca 3,5 "x 3,5" 1 - 4 -siffrig 7 -segmentig display YSD -439K2B -35 eller motsvarande (Sparkfun) 2 - Små tryckknappar för montering på kretskort NO (valfritt) 4 - 2N3904 NPN -transistorer8 - 330 ohm motstånd2 - 74LS04 Hexomvandlare1 - 74HC595 seriell till parallell 8 -bitars skiftregister 1 - LM358 OP -AMP (komparator) 1 - ATMEGA328P mikrokontroller (Creatron) 4-7.7K motstånd7 - 10K motstånd1 - 1N4007 eller 1N4001 diod2 - dioder1 - 120 ohm, 1/2W eller 1W motstånd1 - PCB -fäste 10K potentiometer1 - 470uF 25V kondensator1 - 7805 TO220 paketspänningsregulator1 - 10uF 10V kondensator2 - 0.1 uF 10V kondensatorer1 - 16MHz kristall (Sparkfun) 2 - 22pF kondensatorer1 - Kvinnlig strömuttag (Valfri för att montera hankontakt om det finns någon på din väggtransformator) 2 - 16 -stifts IC -uttag2 - 14 -stifts IC -uttag1 - 8 -stifts IC -uttag1 - 28 -stifts IC -uttag2 - 1 "långa ca #eller 6 st. Bultar och matchande muttrar2 - 1/ 4 "långa #4-40 bultar och matchande muttrar1 - bit 1/2" bred platt aluminiumlist anpassad snitt och borrade i storlek

#30 AWG wire wrap wire#22 AWG wireSolder

Rekommenderad: