- Explicație de lucru:
- Componente:
- Programare:
- Proiectarea circuitelor și PCB-urilor folosind EasyEDA:
- Calcularea și comandarea probelor de PCB online:
În acest proiect, vom folosi un microcontroler PIC pentru a controla de la distanță puține încărcări de curent alternativ, folosind doar o telecomandă IR. Un proiect similar de control automat de la distanță IR a fost deja realizat și cu Arduino, dar aici l-am proiectat pe PCB folosind designerul și simulatorul de PCB EasyEDA online și am folosit serviciile lor de proiectare PCB pentru a comanda plăcile PCB așa cum se arată în secțiunea următoare a articol.
La sfârșitul acestui proiect, veți putea să comutați (PORNIT / OPRIT) orice încărcare AC utilizând o telecomandă obișnuită din confortul scaunului / patului. Pentru a face acest proiect mai interesant, am activat și o caracteristică pentru a controla viteza ventilatorului cu ajutorul lui Triac. Toate acestea pot fi realizate cu clicuri simple pe telecomanda IR. Puteți utiliza orice telecomandă TV / DVD / MP3 pentru acest proiect. Diferitele semnale IR de la telecomandă sunt recepționate de microcontroler, care apoi controlează releele respective printr-un circuit driver de releu. Aceste relee sunt utilizate pentru conectarea și deconectarea încărcărilor de curent alternativ (lumini / ventilator).
Explicație de lucru:
Funcționarea acestui proiect este destul de simplu de înțeles. Când este apăsat un buton pe telecomanda IR, acesta trimite o secvență de cod sub formă de impulsuri codificate folosind frecvența de modulare de 38 Khz. Aceste impulsuri sunt recepționate de senzorul TSOP1738 și apoi citite de controler. Controlerul decodează apoi trenul primit al impulsurilor într-o valoare hexagonală și o compară cu valorile hexagonale predefinite din programul nostru.
Dacă apare o potrivire, atunci controlerul efectuează o operație relativă prin declanșarea releului / triacului respectiv, iar rezultatul corespunzător este indicat și de LED-urile de la bord. Aici, în acest proiect, am folosit 4 becuri (becuri mici) de culori diferite ca încărcături de iluminat și un alt bec (bec mai mare) este considerat a fi un ventilator în scop demonstrativ.
Am selectat tasta 1 pentru a comuta releul1, 2 pentru a comuta releul2, 3 pentru a comuta releul3, 4 pentru a comuta releul4 și Vol + pentru a mări viteza ventilatorului și Vol- pentru a reduce viteza ventilatorului.
Notă: Aici am folosit un bec de 100 watt în loc de un ventilator.
Există multe tipuri de telecomenzi IR disponibile pentru diferite dispozitive, dar cele mai multe dintre ele funcționează în jurul frecvenței 38KHz. Aici, în acest proiect, controlăm aparatele electrocasnice folosind telecomanda TV IR și pentru detectarea semnalelor IR, folosim un receptor IR TSOP1738. Acest senzor TSOP1738 poate detecta semnalul de frecvență 38Khz. Funcționarea telecomenzii IR și a TSOP1738 este prezentată în detaliu în acest articol: Transmițător și receptor IR
Microcontrolerul nostru PIC funcționează la + 5V, iar releele funcționează la + 12V, prin urmare folosim un transformator pentru a coborî 220V AC și pentru a-l rectifica folosind un redresor cu punte completă. Această tensiune DC rectificată este apoi reglată la + 12V și + 5V utilizând regulatoarele IC 7812 și respectiv 7805.
Pentru a declanșa releul, folosim tranzistoare precum BC547, care pot acționa ca un comutator electronic pentru a porni / opri releele pe baza semnalului de la microcontrolerul PIC. Pentru a controla viteza ventilatorului, folosim un TRIAC. TRIAC este un semiconductor de putere capabil să controleze tensiunea de ieșire; această capacitate este utilizată pentru a controla viteza ventilatorului.
De asemenea, am folosit un driver Triac pentru a controla Triac folosind microcontrolerul nostru PIC. Acest driver este folosit pentru a da un impuls unghiului de tragere lui Triac, astfel încât puterea de ieșire să poată fi controlată. Aici am folosit 6 niveluri de control al vitezei. Când nivelul este 0, atunci ventilatorul va fi oprit. Când nivelul va fi 1, atunci viteza va fi 1/5 din viteza maximă. Când nivelul va fi 2, atunci viteza va fi 2/5 din viteza maximă și, respectiv, pentru alții. Nivelul actual al vitezei poate fi monitorizat utilizând afișajul integrat pe 7 segmente.
Schema bloc a proiectului este prezentată mai jos.
Componente:
Componentele necesare construirii acestui proiect sunt prezentate mai jos:
- PIC18f2520 Microcontroler -1
- TSOP1738 -1
- Telecomandă TV / DVD IR -1
- Tranzistor BC547 -4
- Relee 12 volți -4
- Bec cu suport -5
- Conectarea firelor -
- EasyEda PCB -1
- 16x2 LCD
- Alimentare 12v
- Conector terminal 2 pini `-8
- Conector terminal 3 pini -1
- Transformator 12-0-12 -1 -
- Regulator de tensiune 7805 -1
- Regulator de tensiune 7812 -1
- Condensator 1000uf -1
- Condensator 10uf -1
- Condensator 0.1uf -1
- Condensator 0,01uf 400V `-1
- 10k -5
- 1k -5
- 100ohm -7
- Segmentul comun de catod -1
- 1n4007 diodă -10
- BT136 triac -1
- Antet masculin / feminin -
- LED-uri
- Opto-cuplaj moc3021 -1
- Opto-cuplaj mtc2e sau 4n35 -1
- Cristal de 20 MHz -1
- 33pf condensator -2
- Diodă zener 5.1v -1
- Rezistor de 47 ohmi 2 wați -1
Toate aceste componente sunt utilizate în mod obișnuit și pot fi achiziționate cu ușurință. Cu toate acestea, dacă sunteți în căutarea unei cele mai bune cumpărături online, vă recomandăm LCSC.
LCSC este un magazin online excelent pentru cumpărarea componentelor electronice pentru toate tipurile de proiecte. Acestea prezintă aproximativ 25.000 de tipuri de componente și cel mai bun lucru este că vând articole chiar și în cantități mici pentru proiecte mici și au, de asemenea, transport global.
Decodarea telecomenzii IR:
Așa cum am spus mai devreme, puteți utiliza orice fel de telecomandă pentru proiectul dvs. Dar trebuie să știm ce tip de semnal este generat de la telecomanda respectivă. Pentru fiecare cheie individuală de pe telecomandă va exista o valoare HEX echivalentă pentru acea cheie. Folosind această valoare HEX putem distinge între fiecare tastă de pe partea noastră a microcontrolerului. Deci, înainte de a decide să folosim o telecomandă, ar trebui să cunoaștem valoarea HEX pentru tastele presetate în telecomanda respectivă. În acest proiect, am folosit o telecomandă NEC. Valorile HEX pentru tastele unei telecomenzi NEC sunt date mai jos.
După cum puteți observa, valoarea HEX are 7 caractere, dintre care diferă doar ultimele două, de aceea putem lua în considerare doar ultimele două cifre pentru a distinge între fiecare tastă.
Diagrama circuitului:
Schema pentru proiect este prezentată mai jos.
Schema de mai sus a fost ușurată utilizând editorul de schemă esayEDA, deoarece oferă aspectele tuturor componentelor utilizate în acest proiect. De asemenea, nu necesită o instalare și poate fi utilizat online din mers.
Pinouturile și valorile componentelor sunt specificate clar în schema de mai sus. De asemenea, puteți descărca fișierul schematic de aici.
Programare:
Programul pentru acest proiect este realizat folosind MPLABX, codul fiind, de asemenea, destul de simplu și ușor de înțeles. Codul complet va fi dat la sfârșitul acestui tutorial, mai multe câteva bucăți importante ale programului sunt explicate mai jos.
La începutul codului, ar trebui să includem bibliotecile necesare, să definim pinii și să declarăm variabilele.
#include
După aceea, am creat o funcție de întârziere simplă utilizând bucla „pentru”.
void delay (int time) {for (int i = 0; i
După aceea, am inițializat cronometrul folosind următoarea funcție
void timer () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // Timer Clock Source este de la Prescaler T0CS = 0; // Prescalerul primește ceasul de la FCPU (5 MHz) T08BIT = 0; // 16 BIT MODE TMR0IE = 1; // Activați TIMER0 Interrupt PEIE = 1; // Activează întreruperea periferică GIE = 1; // Activați INT-urile la nivel global TMR0ON = 1; // Acum pornește cronometrul! }
Acum, în funcția principală, avem indicații către pinii selectați și inițializăm temporizatorul și întreruperea externă int0 pentru a detecta trecerea zero.
ADCON1 = 0b00001111; TRISB1 = 0; TRISB2 = 1; TRISB3 = 0; TRISB4 = 0; TRISB5 = 0; TRISC = 0x00; TRISA = 0x00; PORTA = 0xc0; TRISB6 = 0; RB6 = 1; releu1 = 0; releu2 = 0; releu3 = 0; releu4 = 0; rly1LED = 0; rly3LED = 0; rly2LED = 0; rly4LED = 0; fanLED = 0; i = 0; ir = 0; tric = 0; temporizator(); INTEDG0 = 0; // Întrerupere pe marginea de cădere INT0IE = 1; // Activați întreruperea externă INT0 (RB0) INT0IF = 0; // Șterge bitul de semnalizare de întrerupere INT0 extern PEIE = 1; // Activează întreruperea periferică GIE = 1; // Activați INT-urile la nivel global
Acum, aici nu folosim niciun mod de întrerupere sau captare și comparare pentru a detecta semnalul IR. Aici tocmai am folosit un pin digital pentru a citi date la fel cum citim un buton. Ori de câte ori semnalul crește sau scade, trebuie doar să punem metoda de debouncing și să rulăm cronometrul. Ori de câte ori pinul își schimbă starea la alta, atunci valorile de timp vor fi salvate într-o matrice.
Logica de trimitere la distanță IR 0 ca 562.5us și logica 1 ca 2250us. Ori de câte ori cronometrul citește în jurul valorii de 562,5us, atunci îl presupunem 0 și când cronometrul citește în jurul valorii de 2250us, îl presupunem ca 1. Apoi îl convertim în hex.
Semnalul primit de la distanță conține 34 de biți. Stocăm toți octeții în matrice și apoi decodăm ultimul octet de utilizat.
while (ir == 1); INT0IE = 0; while (ir == 0); TMR0 = 0; while (ir == 1); i ++; dat = TMR0; if (dat> 5000 && dat <12000) {} else {i = 0; INT0IE = 1; } if (i> = 33) {GIE = 0; întârziere (50); cmd = 0; pentru (j = 26; j <34; j ++) {if (dat> 1000 && dat <2000) cmd << = 1; else if (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
Bucata de cod de mai sus recepționează și decodează semnalul IR folosind întreruperile temporizatoare și stochează valoarea HEX corespunzătoare în variabila cmd. Acum putem compara această valoare HEX (variabilă cmd) cu valorile noastre HEX predefinite și putem comuta releu așa cum se arată mai jos
if (cmd == 0xAF) {relay1 = ~ relay1; rly1LED = ~ rly1LED; } else if (cmd == 0x27) {relay2 = ~ relay2; rly2LED = ~ rly2LED; } else if (cmd == 0x07) {relay3 = ~ relay3; rly3LED = ~ rly3LED; } else if (cmd == 0xCF) {relay4 = ~ relay4; rly4LED = ~ rly4LED; } else if (cmd == 0x5f) {speed ++; if (viteză> 5) {viteză = 5; }} else if (cmd == 0x9f) {speed--; if (viteză <= 0) {viteză = 0; }}
Acum, pentru a afla la ce operează în prezent ventilatorul nostru, ar trebui să folosim un afișaj pe 7 segmente. Următoarele linii sunt utilizate pentru a instrui pinii afișajului pe 7 segmente.
if (viteză == 5) // oprit 5x2 = 10ms triger // viteză 0 {PORTA = 0xC0; // afișează 0 RB6 = 1; fanLED = 0; } else if (speed == 4) // 8 ms trigger // speed 1 {PORTA = 0xfc; // afișarea 1 RB6 = 1; fanLED = 1; } else if (speed == 3) // 6 ms trigger // speed 2 {PORTA = 0xE4; // afișarea 2 RB6 = 0; fanLED = 1; } else if (speed == 2) // 4ms trigger // speed 3 {PORTA = 0xF0; // afișarea a 3 RB6 = 0; fanLED = 1; } else if (speed == 1) // 2ms trigger // speed 4 {PORTA = 0xD9; // afișarea a 4 RB6 = 0; fanLED = 1; } else if (speed == 0) // 0ms trigger // speed 5 full power {PORTA = 0xD2; // afișarea a 5 RB6 = 0; fanLED = 1; }
Funcția de mai jos este pentru întreruperea externă și depășirea timpului. Această funcție este responsabilă pentru detectarea trecerii zero și conducerea Triac.
void interrupt isr () {if (INT0IF) {delay (speed); tric = 1; pentru (int t = 0; t <100; t ++); tric = 0; INT0IF = 0; } if (TMR0IF) // Verificați dacă este TMR0 Overflow ISR {TMR0IF = 0; }}
PCB-ul final pentru această automatizare casnică IR la distanță arată așa cum se arată mai jos:
Proiectarea circuitelor și PCB-urilor folosind EasyEDA:
Pentru a proiecta această telecomandă de automatizare la domiciliu, am folosit EasyEDA care este un instrument EDA online gratuit pentru crearea de circuite și PCB-uri într-o manieră perfectă. Am comandat anterior câteva PCB-uri de la EasyEDA și folosim în continuare serviciile lor, deoarece am găsit întregul proces, de la desenarea circuitelor la comandarea PCB-urilor, mai convenabil și mai eficient în comparație cu alți fabricanți de PCB. EasyEDA oferă desenarea circuitelor, simulare, design PCB gratuit și oferă, de asemenea, servicii personalizate PCB de înaltă calitate, dar cu preț scăzut. Consultați aici tutorialul complet despre Cum să utilizați Easy EDA pentru realizarea schemelor, aspectelor PCB, simularea circuitelor etc.
EasyEDA se îmbunătățește zi de zi; au adăugat multe funcții noi și au îmbunătățit experiența generală a utilizatorului, ceea ce face EasyEDA mai ușor și mai ușor de utilizat pentru proiectarea circuitelor. În curând vor lansa versiunea sa Desktop, care poate fi descărcată și instalată pe computer pentru utilizare offline.
În EasyEDA, vă puteți face publice proiectele de circuite și PCB-uri, astfel încât ceilalți utilizatori să le poată copia sau edita și să poată profita de acolo, de asemenea, am făcut publice întreaga noastră schemă de circuite și PCB-uri pentru această telecomandă de automatizare la domiciliu.
Mai jos este Instantaneul stratului superior al aspectului PCB-ului de la EasyEDA, puteți vizualiza orice strat (superior, inferior, de top, de fund etc.) al PCB-ului, selectând stratul din fereastra „Straturi”.
Calcularea și comandarea probelor de PCB online:
După finalizarea proiectării PCB-ului, puteți face clic pe pictograma de ieșire Fabrication , care vă va duce pe pagina de comandă PCB. Aici puteți vizualiza PCB-ul dvs. în Gerber Viewer sau puteți descărca fișierele Gerber ale PCB-ului dvs. și le puteți trimite oricărui producător, de asemenea este mult mai ușor (și mai ieftin) să îl comandați direct în EasyEDA. Aici puteți selecta numărul de PCB-uri pe care doriți să le comandați, de câte straturi de cupru aveți nevoie, grosimea PCB-ului, greutatea cuprului și chiar culoarea PCB-ului. După ce ați selectat toate opțiunile, faceți clic pe „Salvați în coș” și finalizați comanda, apoi veți primi PCB-urile dvs. în câteva zile.
Puteți comanda direct acest PCB sau puteți descărca fișierul Gerber folosind acest link.
După câteva zile de comandare a PCB-urilor, am primit PCB-urile. Tablele pe care le-am primit sunt prezentate mai jos.
Odată ce am primit PCB-urile, am montat toate componentele necesare peste PCB și, în cele din urmă, avem gata automatizarea IR controlată de la distanță, verifică acest circuit funcționând într-un videoclip demonstrativ la sfârșitul articolului.