Lumânări electronice multiple: 3 pași
Lumânări electronice multiple: 3 pași
Anonim
Lumanari electronice multiple
Lumanari electronice multiple

Lumânările electronice au fost postate de multe ori pe Instructables, deci de ce aceasta?

Acasă am aceste mici case de Crăciun semi-transparente care au o perspectivă LED și o baterie mică. Unele case au LED-uri cu efect de lumânare, iar altele au LED-uri care sunt doar aprinse. Bateriile mici sunt descărcate relativ repede și, din moment ce am vrut să am efect de lumânare în toate casele, am decis să fac din acesta un proiect PIC. Desigur, îl puteți transforma și într-un proiect Arduino.

Deci, ce face această lumânare electronică specială? PIC și Arduino au toate hardware-ul Pulse Width Modulation (PWM) la bord care poate fi folosit pentru a crea un efect de lumânare folosind un LED, dar în cazul meu am vrut să am 5 lumânări electronice independente folosind un singur controler și care nu este prezent, cel puțin nu pe care o știu. Soluția pe care am folosit-o este să fac aceste cinci semnale PWM independente complet în software.

Pasul 1: Modularea lățimii impulsurilor în software

Modularea lățimii pulsului a fost descrisă de mai multe ori, de ex. în acest articol Arduino:

PIC și Arduino au la bord un hardware PWM special, care facilitează generarea acestui semnal PWM. Dacă vrem să facem unul sau mai multe semnale PWM în software, avem nevoie de două temporizatoare:

  1. Un cronometru care este folosit pentru a genera frecvența PWM
  2. Un cronometru care este utilizat pentru a genera ciclul de funcționare PWM

Ambele temporizatoare generează și întrerup atunci când sunt finalizate și astfel, gestionarea semnalului PWM se face complet întreruptă. Pentru frecvența PWM, folosesc cronometrul 0 al PIC și îl las să se revărseze. Cu un ceas oscilator intern de 8 MHz și o prescală de 64 formula este: Fosc / 4/256/64 = 2.000.000 / 256/64 = 122 Hz sau 8, 2 ms. Frecvența trebuie să fie suficient de mare pentru ca ochiul uman să nu o poată detecta. O frecvență de 122 Hz este suficientă pentru asta. Singurul lucru pe care îl face această rutină de întrerupere a temporizatorului este copierea ciclului de funcționare pentru un nou ciclu PWM și pornirea tuturor LED-urilor. Face acest lucru pentru toate cele 5 LED-uri în mod independent.

Valoarea temporizatorului pentru a gestiona ciclul de funcționare PWM depinde de modul în care realizăm efectul de lumânare. În abordarea mea, simulez acest efect incrementând ciclul de funcționare cu o valoare de 3 pentru a crește luminozitatea LED-ului și îl scad cu o valoare de 25 pentru a reduce luminozitatea LED-ului. În acest fel, veți obține un efect de lumânare. Deoarece folosesc o valoare minimă de 3, numărul de pași pentru a controla ciclul de funcționare complet cu un octet este de 255/3 = 85. Aceasta înseamnă că temporizatorul ciclului de funcționare PWM trebuie să ruleze cu o frecvență de 85 de ori frecvența Timer de frecvență PWM, care este de 85 * 122 = 10,370 Hz.

Pentru ciclul de funcționare PWM, folosesc cronometrul 2 al PIC. Acesta este un cronometru cu reîncărcare automată și folosește următoarea formulă: Perioada = (Reîncărcare + 1) * 4 * Tosc * Valoarea prescalei Timer2. Cu o reîncărcare de 191 și o prescală de 1 obținem o perioadă de (191 + 1) * 4 * 1 / 8.000.000 * 1 = 96 us sau 10.416 Hz. Ciclul de funcționare PWM întrerupe verificările de rutină dacă ciclul de funcționare a trecut și oprește LED-ul pentru care ciclul de funcționare este finalizat. Dacă ciclul de funcționare nu este trecut, acesta scade un contor de ciclu de funcționare cu 3 și încheie rutina. Face acest lucru pentru toate LED-urile în mod independent. În cazul meu, această rutină de întrerupere durează aproximativ 25 de noi și, din moment ce este apelată la fiecare 96 de noi, deja 26% din CPU este utilizat pentru gestionarea ciclului de funcționare PWM în software.

Pasul 2: Componentele hardware și necesare

Componentele hardware și necesare
Componentele hardware și necesare

Diagrama schematică arată rezultatul final. Deși controlez doar 5 LED-uri independent, am adăugat un al 6-lea LED care rulează împreună cu unul dintre celelalte 5 LED-uri. Deoarece PIC nu poate conduce două LED-uri pe un singur pin, am adăugat un tranzistor. Electronica este alimentată de un adaptor DC de 6 volți / 100 mA și folosește un regulator de joasă tensiune pentru a crea un stabil de 5 volți.

Aveți nevoie de următoarele componente pentru acest proiect:

  • 1 microcontroler PIC 12F615
  • 2 condensatoare ceramice: 2 * 100nF
  • Rezistoare: 1 * 33k, 6 * 120 Ohm, 1 * 4k7
  • 6 LED-uri portocalii sau galbene, luminozitate ridicată
  • 1 tranzistor BC557 sau echivalent
  • 1 condensator electrolitic 100 uF / 16 V
  • 1 regulator de joasă tensiune de cădere LP2950Z

Puteți construi circuitul pe o placă de calcul și nu necesită mult spațiu, așa cum se poate vedea în imagine.

Pasul 3: Software-ul rămas și rezultatul

Partea rămasă a software-ului este bucla principală. Bucla principală mărește sau scade luminozitatea LED-urilor prin ajustarea aleatorie a ciclului de funcționare. Deoarece creștem doar cu o valoare de 3 și scădem cu o valoare de 25, trebuie să ne asigurăm că descreșterile nu se întâmplă la fel de des ca creșterile.

Deoarece nu am folosit nicio bibliotecă, a trebuit să creez un generator aleatoriu folosind un registru de deplasare de feedback liniar, a se vedea:

en.wikipedia.org/wiki/Linear-feedback_shif…

Efectul lumânării este influențat de viteza cu care se schimbă ciclul de funcționare PWM, astfel încât bucla principală utilizează o întârziere de aproximativ 10 ms. Puteți ajusta acest timp pentru a modifica efectul lumânării în funcție de nevoile dvs.

Videoclipul atașat arată rezultatul final în care am folosit un capac peste LED pentru a îmbunătăți efectul.

Am folosit JAL ca limbaj de programare pentru acest proiect și am atașat fișierul sursă.

Distrează-te făcând acest instructabil și așteaptă cu nerăbdare reacțiile și rezultatele tale.