Etter å ha fått et par styrer Arduino, og forskjellige radiokomponenter for å bli kjent med mikrokontrollere, bestemte forfatteren seg for å gjøre noe interessant og samtidig nyttig. Etter å ha på lager et stort antall lysdioder, kom ideen opp til å lage en binær klokke.
På elektronikksiden er en binær klokke ikke spesielt komplisert, men forfatteren kompliserte oppgaven og bestemte seg for ikke å lagre knapper og LED. Opprinnelig skulle prosjektet bruke 22 lysdioder, 6 knapper og en tweeter. Det var også en ide å sette sammen en klokke på Arduino Mega på grunn av et større antall pinner, men skiftregistrene 74HC595 viste seg å være en frelse.
materialer:
- Arduino Uno
- 2 brødbrett i full størrelse
- Lysdioder røde 7 stk
- Grønne lysdioder 7 stk
- Blå lysdioder 6 stk
- 2 gule og hvite lysdioder
- Motstand 220 ohm 25 stk
- Piezo summer 1 stk
- 6 knapper taktknapper
- Skiftutgangsregistre 74HC595 i DIP-16 pakke 3 stk
- Koblingsledninger 90 stk
- Sanntids klokkemodul basert på DS1307 RTC-brikken
Hvordan alt vil fungere.
Det er omtrent 10 typer binære klokker. Noen viser tid i binært desimalformat (BCD), andre som binære tall. Siden forfatteren ikke liker BCD-klokken, bestemte han seg for å lage sin rene binære. Noen mennesker synes det er vanskeligere å lese, men forskjellen er ikke stor, fordi det er enkelt å oversette tall fra binær til desimal. Også en forutsetning for skaperen av klokken var en indikasjon på sekundene på klokken.
I tillegg har klokken 6 knapper:
Set - er ansvarlig for klokke- / alarminnstillingsmodus og lagring av parameteren i innstillingsmodus.
Mode - ansvarlig for å veksle mellom klokke-, alarm- og timer-modus.
Opp - i innstillingen av klokke / alarm / timer, øker parameteren med en. I vekkerklokken og tidtakeren er det ansvarlig for å aktivere og deaktivere valgt modus. Når et signal utløses, vil det slå av alarmsignalet.
Nede - i klokke- / alarm- / timerinnstillingen vil den redusere parameteren med en. Timeren stopper den uten å tilbakestille nedtellingen. Når alarmen går, vil den overføre signalet i 5 minutter.
24/12 - endre tidsformatet.
Demp - ansvarlig for å slå av og på lysdiodene (når lysdiodene er av, slutter de gjenværende knappene å virke).
LED posisjonsskjema:
Komponenttilkobling
Forfatteren vil koble alle LED-ene i serie og med en motstand. Motstanden er loddet til en av terminalene til lysdiodene, det spiller ingen rolle hvilken. LED-er vil være koblet til via skiftregistre. Denne brikken har 16 kontakter.Dette antall pinner lar deg bruke et stort antall pinner, og tar bare tre pinner på Arduino.
Skiftregister Pinout 74HC595:
Q0-Q7 er funnene i registeret som LED-ene vil være koblet til.
Vcc - en 5V strømforsyningsnål blir brukt på den.
GND - bakken koblet til GND på Arduino.
OE - pinnen er ansvarlig for omvendt aktivering av pinnene, men den vil ikke bli brukt, den blir ganske enkelt kortsluttet til bakken.
MR - omvendt registerrydding, den trenger ikke å kontrolleres, derfor vil den være koblet til en 5V strømforsyning.
ST_CP - pin er ansvarlig for å oppdatere statusen til registeret. Når du registrerer tilstanden, er det nødvendig å bruke LAV på den, etter innspilling - HØY, for å oppdatere statusen til utgangene. Den må kobles til en stift på Arduino. Du kan koble denne pinnen i tre registre parallelt.
SH_CP - pin, ansvarlig for skiftet med 1 bit av registeret. Den må kobles til en stift på Arduino. De er koblet på mikrokretser også parallelt.
DS - data blir sendt til denne pinnen, den er koblet til pinnen på Arduino.
Q7 '- denne pinnen brukes til kaskadeforbindelse med andre registre 74HC595.
Koblingsskjema:
Piezo-summeren kobles til den tredje Arduino-tappen i serie med motstanden. Før han tok diskanten med i kretsen, så forfatteren på hvilke pinner som støtter PWM, siden dette er obligatorisk for henne. På Arduino Uno støtter PWM 3, 5, 6, 9, 10 og 11 pins.
Knappene er koblet ved hjelp av motstander innebygd i Arduino, med den ene siden av knappene koblet til bakken og den andre til Arduino-pinnene.
Så ser den endelige designen ut:
Bygg på Breadboard
Etter å ha skaffet seg ytterligere detaljer, begynte forfatteren å sette sammen prosjektet på en brødbrett i henhold til ordningene. Utseende var i ferd med å bli forventet, fordi Breadboard begrenser friheten i plassering av komponenter, og de utstikkende ledningene skapte ikke en estetisk glede. Men brødbrettet er tross alt beregnet på brødbrettmodeller, men ikke for ferdige enheter.
Programkode.
Forfatteren bestemte seg for å skrive kode på egen hånd, uten å ha en erfaren programmering, uten å bruke andres utvikling. Det første trinnet var å skrive en subroutine, det er ansvarlig for å blinke alle dioder og gi piezosignalet når det er slått på. Denne funksjonen hjelper deg med å bekrefte kretsens integritet, lik den implementert på mange enheter.
Skissen kom ut ganske stor, så kan du vurdere dens viktigste funksjoner.
LED-arbeid.
Siden LEDs er tilgjengelig via skiftregisteret, var det først og fremst nødvendig å implementere flere rutiner for LEDene. For enklere betjening med dioder er en rekke tilleggsfunksjoner implementert. Ulike effekter av animasjon av dioder implementeres. Når klokken ikke er stilt inn, vil diodene som er ansvarlige for timer og minutter begynne å blinke (som en vanlig klokke blinker når den ikke er satt). LED-ene som er ansvarlige i sekunder har også sin egen animasjon, dioden kan kjøre venstre og høyre i alarmmodus, eller i klokkeinnstillingsmodus.
Hovedsløyfe.
Programmet er konfigurert til å fungere som følger: klokken viser informasjon avhengig av gjeldende tilstand, og endrer tilstanden avhengig av bruk av knapper og hendelser. Det hele ser ut som en betydelig mengde nestede forhold. Diodenes tilstand oppdateres hver gang etter at du har sjekket status for tidtakere og knapper med en samtale til operatøren.
Forfatteren gjorde også en god jobb for riktig bruk av inngangsknappene og tidtakerne. Kildekoden til skissen kan lastes ned under artikkelen.
Start layout
Etter å ha slått på prosjektet, ved første øyekast, fungerte enheten riktig og stabilt. Men forfatteren fant en feil, klokken var bak med ett sekund i timen, i lang tid ville det være en stor feil.
Etter å ha studert dette problemet, ble det funnet at den originale Arduino Uno bruker en keramisk resonator, og den mangler nøyaktighet for å måle tid i lange perioder. Den mest rasjonelle løsningen var å kjøpe en klokke i sanntid, og på grunn av denne modulen vil klokka ikke gå på villspor når den er slått av. Forfatteren kjøpte Grove RTC-modulen fra Seeed Studio. Det er et ferdig brett med en klokkebrikke. Forfatteren koblet pinnene til SDA og SCL-modulen til Arduino på pinnene på A4 og A5, GND til bakken. Siden 5V-strømmen er opptatt av klokkebrettet, var det ingen steder å koble modulen til. Forfatteren bestemte seg for å drive modulen fra en av de digitale pinnene, som kontinuerlig vil få strøm.Forfatteren trengte også å endre kildekoden og legge til et bibliotek med klokker i sanntid.
Se på montering
Etter å ha gjennomført et langt arbeid med koden, er det på tide å gi enheten et komplett utseende og overføre det fra brødplaten til kretskortet. Først av alt var det nødvendig å lage ledningene til styret. Fritzing ble brukt til dette, siden forfatteren allerede hadde en ide om klokkens utseende, og han bygde et enhetsdiagram. Forfatteren sporet også manuelt styret, det tok mye tid.
Prosjekt for produksjon av kretskort:
PCB-produksjon ble bestilt i Kina. Seeed Studio har en Fusion PCB-brettetjeneste. Gjennom Fritzing ble filen eksportert til utvidet Gerber-format, mange tavleprodusenter jobber med den. To uker senere mottok forfatteren det etterlengtede gebyret i posten.
Det gjensto bare å lodde allerede litt støvete deler på brettet. Det ferdige resultatet etter lodding så mye bedre ut enn oppsettet på Breadboard.
Forfatteren av prosjektet jobbet hardt i lang tid og fikk det han ønsket - en unik binær klokke med tidtaker og vekkerklokke. Ved å bruke batterirommet kan klokken plasseres hvor som helst. Arduino innfridde forventningene og taklet oppgaven fullstendig.