Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Elektroniske lys har blitt lagt ut mange ganger på Instructables, så hvorfor dette?
Hjemme har jeg disse små halvgjennomsiktige julehusene som har LED-innsikt og et lite batteri. Noen hus har lysdioder med lyseffekt, og noen har lysdioder som bare er på. De små batteriene er relativt tomme, og siden jeg ønsket å ha en lyseffekt i alle hus, bestemte jeg meg for å gjøre det til et PIC -prosjekt. Selvfølgelig kan du gjøre det til et Arduino -prosjekt også.
Så hva gjør dette elektroniske lyset spesielt? PIC og Arduino har alle PWM -maskinvare (Pulse Width Modulation) ombord som kan brukes til å lage en lyseffekt ved hjelp av en LED, men i mitt tilfelle ønsket jeg å ha 5 uavhengige elektroniske lys med en kontroller, og det er ikke tilstede, i hvert fall ikke som jeg vet. Løsningen jeg brukte er å lage disse fem uavhengige PWM -signalene helt i programvare.
Trinn 1: Pulsbreddemodulering i programvare
Pulse Width Modulation har blitt beskrevet flere ganger, f.eks. i denne Arduino -artikkelen:
PIC og Arduino har spesiell PWM -maskinvare ombord som gjør det enkelt å generere dette PWM -signalet. Hvis vi ønsker å lage ett eller flere PWM -signaler i programvare, trenger vi to tidtakere:
- En timer som brukes til å generere PWM -frekvensen
- En tidtaker som brukes til å generere PWM -driftssyklusen
Begge tidtakerne genererer og avbryter når de er fullført, og håndteringen av PWM -signalet blir fullstendig avbrutt. For PWM -frekvensen bruker jeg timer 0 i PIC og lar den flyte over. Med en intern oscillatorklokke på 8 MHz og en forhåndsskala på 64 er formelen: Fosc / 4 /256 /64 = 2.000.000 / 256 /64 = 122 Hz eller 8, 2 ms. Frekvensen må være høy nok til at det menneskelige øyet ikke kan oppdage den. En frekvens på 122 Hz er tilstrekkelig for det. Det eneste denne tidsavbruddsrutinen gjør er å kopiere driftssyklusen for en ny PWM -syklus og slå på alle lysdiodene. Det gjør dette for alle 5 lysdioder uavhengig.
Verdien av tidtaker for å håndtere PWM -driftssyklusen avhenger av hvordan vi lager lyseffekten. I min tilnærming simulerer jeg denne effekten ved å øke driftssyklusen med en verdi på 3 for å øke lysstyrken til LED -en og redusere den med en verdi på 25 for å redusere lysstyrken til LED -en. På denne måten får du en lyslignende effekt. Siden jeg bruker en minimumsverdi på 3, er antall trinn for å kontrollere hele driftssyklusen med en byte 255 /3 = 85. Dette betyr at PWM -driftstidsuret må kjøre med en frekvens på 85 ganger frekvensen til PWM -frekvensur som er 85 * 122 = 10.370 Hz.
For PWM -driftssyklusen bruker jeg timer 2 i PIC. Dette er en timer med automatisk omlasting, og den bruker følgende formel: Periode = (Reload + 1) * 4 * Tosc * Timer2 forhåndsskalaverdi. Med en omlasting på 191 og en forhåndsskala på 1 får vi en periode på (191 + 1) * 4 * 1/8.000.000 * 1 = 96 us eller 10.416 Hz. PWM -driftssyklusen avbryter rutinen om driftssyklusen har passert og slår av LED -en som driftssyklusen er fullført for. Hvis driftssyklusen ikke er bestått, reduseres den på en syklisteller med 3 og avslutter rutinen. Det gjør dette for alle lysdioder uavhengig. I mitt tilfelle tar denne avbruddsrutinen omtrent 25 oss, og siden den kalles hver 96 oss, brukes allerede 26% av CPU -en til å administrere PWM -driftssyklusen i programvare.
Trinn 2: Maskinvaren og nødvendige komponenter
Det skjematiske diagrammet viser det endelige resultatet. Selv om jeg bare styrer 5 lysdioder uavhengig, la jeg til en sjette lysdiode som kjører sammen med en av de 5 andre lysdiodene. Siden PIC ikke kan drive to lysdioder på en portnål, la jeg til en transistor. Elektronikken mates av en 6 volt / 100 mA likestrømadapter og bruker en lavt spenningsregulator for å lage en stabil 5 volt.
Du trenger følgende komponenter for dette prosjektet:
- 1 PIC mikrokontroller 12F615
- 2 keramiske kondensatorer: 2 * 100nF
- Motstander: 1 * 33k, 6 * 120 Ohm, 1 * 4k7
- 6 oransje eller gule lysdioder, høy lysstyrke
- 1 BC557 transistor eller tilsvarende
- 1 Elektrolytisk kondensator 100 uF / 16 V
- 1 lavspenningsregulator LP2950Z
Du kan bygge kretsen på et brødbrett og krever ikke mye plass, som det kan sees på bildet.
Trinn 3: Gjenværende programvare og resultat
Den gjenværende delen av programvaren er hovedsløyfen. Hovedløkken øker eller reduserer lysstyrken til lysdiodene ved å justere driftssyklusen tilfeldig. Siden vi bare øker med en verdi på 3 og reduserer med en verdi på 25, må vi sørge for at reduksjonene ikke skjer like ofte som trinnene.
Siden jeg ikke brukte noen biblioteker, måtte jeg lage en tilfeldig generator ved hjelp av et lineært tilbakemeldingsskiftregister, se:
en.wikipedia.org/wiki/Linear-feedback_shif…
Lyseffekten påvirkes av hvor raskt PWM -driftssyklusen endres, slik at hovedsløyfen bruker en forsinkelse på omtrent 10 ms. Du kan justere denne tiden for å endre lyseffekten til dine behov.
Den vedlagte videoen viser sluttresultatet der jeg brukte en hette over LED-en for å forbedre effekten.
Jeg brukte JAL som programmeringsspråk for dette prosjektet og festet kildefilen.
Ha det gøy å lage dette instruerbart og gleder meg til reaksjonene og resultatene dine.