- Darbinis paaiškinimas:
- Komponentai:
- Programavimas:
- Grandinių ir PCB dizainas naudojant „EasyEDA“:
- PCB mėginių apskaičiavimas ir užsakymas internetu:
Šiame projekte mes ketiname naudoti PIC mikrovaldiklį nuotoliniu būdu valdyti keletą kintamosios srovės apkrovų, tiesiog naudodami IR nuotolinio valdymo pultą. Panašus IR nuotolinio valdymo namų automatizavimo projektas jau buvo atliktas su „Arduino“, tačiau čia mes jį suprojektavome PCB, naudodami internetinį „EasyEDA“ PCB dizainerį ir simuliatorių, ir naudojome jų PCB projektavimo paslaugas, norėdami užsisakyti PCB plokštes, kaip parodyta kitame skyriuje. straipsnis.
Šio projekto pabaigoje jūs galėsite perjungti (įjungti / išjungti) bet kokią kintamosios srovės apkrovą naudodami įprastą pultelį iš savo kėdės / lovos. Kad šis projektas būtų įdomesnis, mes taip pat įgalinome funkciją valdyti ventiliatoriaus greitį „Triac“ pagalba. Visa tai galima padaryti paprasčiausiai spustelėjus IR nuotolinio valdymo pultą. Šiam projektui galite naudoti bet kurį savo televizoriaus / DVD / MP3 nuotolinio valdymo pultą. Skirtingus IR signalus iš nuotolinio valdymo pulto priima mikrovaldiklis, kuris per relės tvarkyklės grandinę valdo atitinkamas reles. Šios relės naudojamos kintamosios srovės apkrovoms (žibintams / ventiliatoriams) prijungti ir atjungti.
Darbinis paaiškinimas:
Šio projekto veikimą suprasti yra gana paprasta. Paspaudus IR nuotolinio valdymo pulto mygtuką, jis siunčia kodo seką užkoduotų impulsų pavidalu, naudodamas 38 kHz moduliacinį dažnį. Šiuos impulsus gauna jutiklis TSOP1738, o tada juos nuskaito valdiklis. Tada valdiklis iššifruoja gautą impulsų traukinį į šešioliktainę vertę ir palygina jį su iš anksto apibrėžtomis šešioliktainėmis reikšmėmis mūsų programoje.
Jei įvyksta bet kokia atitiktis, valdiklis atlieka santykinę operaciją, įjungdamas atitinkamą relę / „Triac“, o atitinkamą rezultatą taip pat rodo laive esantys šviesos diodai. Šiame projekte mes naudojome 4 skirtingų spalvų lemputes (mažas lemputes) kaip apšvietimo apkrovas, o kita lemputė (didesnė lemputė) laikoma ventiliatoriumi demonstravimo tikslais.
Pasirinkome 1 klavišą, kad perjungtume relę1, 2, kad perjungtume relę2, 3, norėdami perjungti relę3, 4, perjungti relę4, ir „Vol +“, kad padidintumėte ventiliatoriaus greitį, ir „Vol-“, kad sumažintumėte ventiliatoriaus greitį.
Pastaba: Čia mes naudojome 100 vatų lemputę vietoj ventiliatoriaus.
Skirtingiems įrenginiams yra daugybė IR nuotolinio valdymo pultų, tačiau dauguma jų veikia aplink 38KHz dažnį. Šiame projekte mes valdome buitinę techniką naudodami IR TV nuotolinio valdymo pultą, o IR signalams aptikti - TSOP1738 IR imtuvą. Šis TSOP1738 jutiklis gali pajusti 38 kHz dažnio signalą. IR nuotolinio valdymo ir TSOP1738 darbas išsamiai aprašytas šiame straipsnyje: IR siųstuvas ir imtuvas
Mūsų PIC mikrovaldiklis veikia esant + 5 V įtampai, o relės - + 12 V įtampai, todėl mes naudojame transformatorių, kad sumažintume 220 V kintamosios srovės srovę ir ją ištaisytume naudodami pilną tiltinį lygintuvą. Tada ši ištaisyta nuolatinė įtampa reguliuojama iki + 12 V ir + 5 V, naudojant atitinkamai reguliatoriaus IC 7812 ir 7805.
Norėdami įjungti relę, mes naudojame tranzistorius, tokius kaip BC547, kurie gali veikti kaip elektroninis jungiklis, kad įjungtų / išjungtų reles pagal PIC mikrovaldiklio signalą. Be to, norėdami valdyti ventiliatoriaus greitį, mes naudojame TRIAC. TRIAC yra galios puslaidininkis, galintis valdyti išėjimo įtampą; ši galimybė naudojama ventiliatoriaus greičiui valdyti.
Mes taip pat naudojome „Triac“ tvarkyklę, kad valdytume „Triac“, naudodami mūsų PIC mikrovaldiklį. Šis tvarkyklė naudojama norint suteikti „Triac“ šaudymo kampo impulsą, kad būtų galima valdyti išėjimo galią. Čia mes naudojome 6 greičio valdymo lygius. Kai lygis yra 0, ventiliatorius bus išjungtas. Kai lygis bus 1, greitis bus 1/5 viso greičio. Kai lygis bus 2, greitis bus 2/5 viso greičio ir atitinkamai kitiems. Dabartinį greičio lygį galima stebėti naudojant įmontuotą 7 segmentų ekraną.
Blokinė projekto schema parodyta žemiau.
Komponentai:
Komponentai, reikalingi šiam projektui sukurti, pateikti žemiau:
- PIC18f2520 mikrovaldiklis -1
- TSOP1738 -1
- IR televizorius / DVD nuotolinis valdiklis -1
- Tranzistorius BC547 -4
- Relės 12 voltų -4
- Lemputė su laikikliu -5
- Jungiamieji laidai -
- „EasyEda“ PCB -1
- 16x2 LCD ekranas
- Maitinimo šaltinis 12v
- 2 gnybtų jungties jungtis `-8
- Terminalo jungtis 3 kontaktų -1
- Transformatorius 12-0-12 -1 -
- Įtampos reguliatorius 7805 -1
- Įtampos reguliatorius 7812 -1
- Kondensatorius 1000uf -1
- Kondensatorius 10uf -1
- Kondensatorius 0,1uf -1
- Kondensatorius 0.01uf 400V `-1
- 10k -5
- 1k -5
- 100 ohm -7
- Bendras katodo segmentas -1
- 1n4007 diodas -10
- BT136 triac -1
- Vyras / moteris antraštė -
- Šviesos diodai -6
- „Opto-coupler“ „moc3021 -1“
- Opto-mova mtc2e arba 4n35 -1
- 20Mhz kristalas -1
- 33pf kondensatorius -2
- 5.1v zenerio diodas -1
- 47 omų 2 vatų rezistorius -1
Visi šie komponentai yra paprastai naudojami ir juos galima lengvai įsigyti. Tačiau jei ieškote geriausio pirkimo internetu, mes rekomenduotume jums LCSC.
LCSC yra puiki internetinė parduotuvė, skirta įsigyti jūsų elektronikos komponentus įvairiems projektams. Juose yra apie 25 000 rūšių komponentų, o geriausia tai, kad jie parduoda net nedidelius kiekius mažiems projektams ir taip pat turi „Global Shipping“.
IR nuotolinio valdymo pulto dekodavimas:
Kaip minėta anksčiau, savo projektui galite naudoti bet kokį nuotolinio valdymo pultą. Bet mes turime žinoti, koks signalas generuojamas iš to nuotolinio valdymo pulto. Kiekvienam nuotolinio valdymo pulto raktui bus suteikta lygiavertė HEX reikšmė. Naudodami šią HEX vertę galime atskirti kiekvieną raktą iš mūsų mikrovaldiklio pusės. Taigi prieš nuspręsdami naudoti nuotolinio valdymo pultą, turėtume žinoti raktų, iš anksto nustatytų tame nuotoliniame pulte, HEX vertę. Šiame projekte mes panaudojome NEC nuotolinio valdymo pultą. Toliau pateikiamos NEC nuotolinio valdymo pulto raktų HEX vertės.
Kaip pastebėjote, HEX reikšmė turi 7 simbolius, iš kurių skiriasi tik du paskutiniai, todėl mes galime atsižvelgti tik į paskutinius du skaitmenis, kad galėtume atskirti kiekvieną raktą.
Grandinės schema:
Projekto schema parodyta žemiau.
Pirmiau pateiktą schemą buvo lengva padaryti naudojant esayEDA scheminį redaktorių, nes jie pateikia visų šiame projekte naudojamų komponentų išdėstymą. Tai taip pat nereikalauja diegimo ir gali būti naudojama internete keliaujant.
Pinouts ir komponentų vertės yra aiškiai nurodytos aukščiau pateiktoje schemoje. Čia taip pat galite atsisiųsti scheminį failą.
Programavimas:
Šio projekto programa atliekama naudojant MPLABX, kodas taip pat yra gana paprastas ir lengvai suprantamas. Visas kodas bus pateiktas šios mokymo programos pabaigoje, toliau paaiškinta keletas svarbių programos dalių.
Kodo pradžioje turėtume įtraukti reikalingas bibliotekas, apibrėžti kaiščius ir deklaruoti kintamuosius.
# įtraukti
Po to mes sukūrėme paprastą uždelsimo funkciją, naudodami kilpą „už“.
negaliojantis atidėjimas (int laikas) {for (int i = 0; i
Po to mes inicijavome laikmatį naudodami šią funkciją
negaliojantis laikmatis () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // Laikmačio laikrodžio šaltinis yra iš „Prescaler“ T0CS = 0; // „Prescaler“ gauna laikrodį iš FCPU (5MHz) T08BIT = 0; // 16 bitų režimas TMR0IE = 1; // Įgalinti TIMER0 pertraukti PEIE = 1; // Įgalinti periferinį pertraukimą GIE = 1; // Įjungti INT visame pasaulyje TMR0ON = 1; // Dabar paleiskite laikmatį! }
Dabar, atlikdami pagrindinę funkciją, turime nurodymus pasirinktiems kaiščiams ir inicializuoti laikmatį ir išorinį pertraukimą int0, kad aptiktume nulio kirtimą.
ADCON1 = 0b00001111; TRISB1 = 0; TRISB2 = 1; TRISB3 = 0; TRISB4 = 0; TRISB5 = 0; TRISC = 0x00; TRISA = 0x00; PORTA = 0xc0; TRISB6 = 0; RB6 = 1; relė1 = 0; relė2 = 0; relė3 = 0; relė4 = 0; rly1LED = 0; rly3LED = 0; rly2LED = 0; rly4LED = 0; ventiliatoriusLED = 0; i = 0; ir = 0; tric = 0; laikmatis (); INTEDG0 = 0; // Pertraukimas krintant kraštui INT0IE = 1; // Įjungti išorinį INT0 pertraukimą (RB0) INT0IF = 0; // Išvalo INT0 išorinio pertraukimo vėliavos bitą PEIE = 1; // Įgalinti periferinį pertraukimą GIE = 1; // Įgalinti INT visame pasaulyje
Dabar mes nenaudojame jokio pertraukimo ar fiksavimo ir palyginimo režimo IR signalui aptikti. Čia ką tik naudojome skaitmeninį kaištį duomenims skaityti, lygiai taip pat, kaip skaitėme mygtuką. Kai tik signalas būna aukštas ar žemas, mes tiesiog pritaikome atkūrimo metodą ir paleidžiame laikmatį. Kai tik kaištis pakeis būseną į kitą, laiko vertės bus išsaugotos masyve.
IR nuotolinio siuntimo logika 0 kaip 562.5us ir logika 1 kaip 2250us. Kai laikmatis nuskaito apie 562.5us, tada mes manome, kad jis yra 0, o kai laikmatis - apie 2250us, tada laikome, kad jis yra 1. Tada jį paverčiame šešiakampiu.
Gaunamame nuotolinio valdymo signale yra 34 bitai. Mes saugome visus baitus masyve ir tada dekoduojame paskutinį naudojamą baitą.
o (ir == 1); INT0IE = 0; o (ir == 0); TMR0 = 0; o (ir == 1); i ++; dat = TMR0; if (dat> 5000 && dat <12000) {} dar {i = 0; INT0IE = 1; } jei (i> = 33) {GIE = 0; vėlavimas (50); cmd = 0; už (j = 26; j <34; j ++) {if (dat> 1000 && dat <2000) cmd << = 1; else if (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
Aukščiau pateiktas kodo fragmentas priima ir dekoduoja IR signalą naudodamas laikmatį, pertraukia ir išsaugo atitinkamą HEX vertę kintamajame cmd. Dabar mes galime palyginti šią HEX vertę (cmd kintamąjį) su mūsų iš anksto nustatytomis HEX vertėmis ir perjungti relę, kaip parodyta žemiau
if (cmd == 0xAF) {relė1 = ~ relė1; rly1LED = ~ rly1LED; } else if (cmd == 0x27) {relė2 = ~ relė2; rly2LED = ~ rly2LED; } else if (cmd == 0x07) {relė3 = ~ relė3; rly3LED = ~ rly3LED; } else if (cmd == 0xCF) {relė4 = ~ relė4; rly4LED = ~ rly4LED; } else if (cmd == 0x5f) {greitis ++; jei (greitis> 5) {greitis = 5; }} else if (cmd == 0x9f) {greitis--; if (greitis <= 0) {greitis = 0; }}
Dabar norėdami sužinoti, kuriame ventiliatoriuje šiuo metu veikia, turėtume naudoti 7 segmentų ekraną. Šios eilutės naudojamos nurodant 7 segmentų ekrano kaiščius.
if (greitis == 5) // išjungtas 5x2 = 10ms trigeris // greitis 0 {PORTA = 0xC0; // rodyti 0 RB6 = 1; ventiliatoriusLED = 0; } else if (greitis == 4) // 8 ms trigeris // greitis 1 {PORTA = 0xfc; // rodoma 1 RB6 = 1; ventiliatorius = 1; } else if (greitis == 3) // 6 ms trigeris // greitis 2 {PORTA = 0xE4; // rodoma 2 RB6 = 0; ventiliatorius = 1; } else if (greitis == 2) // 4ms paleidiklis // greitis 3 {PORTA = 0xF0; // rodomas 3 RB6 = 0; ventiliatorius = 1; } else if (greitis == 1) // 2ms trigeris // greitis 4 {PORTA = 0xD9; // rodoma 4 RB6 = 0; ventiliatorius = 1; } else if (greitis == 0) // 0ms trigeris // greitis 5 visa galia {PORTA = 0xD2; // rodomas 5 RB6 = 0; ventiliatorius = 1; }
Ši funkcija skirta išoriniam pertraukimui ir laiko perpildymui. Ši funkcija yra atsakinga už nulio perėjimo ir „Triac“ vairavimo nustatymą.
negaliojantis pertraukimas isr () {if (INT0IF) {delsa (greitis); tric = 1; už (int t = 0; t <100; t ++); tric = 0; INT0IF = 0; } if (TMR0IF) // Patikrinkite, ar tai TMR0 perpildymas ISR {TMR0IF = 0; }}
Galutinis šios IR nuotoliniu būdu valdomos namų automatikos PCB atrodo taip, kaip parodyta žemiau:
Grandinių ir PCB dizainas naudojant „EasyEDA“:
Norėdami suprojektuoti šią nuotolinio valdymo namų automatiką, mes naudojome „EasyEDA“, kuris yra nemokamas internetinis EDA įrankis sklandžiam grandinių ir PCB kūrimui. Anksčiau mes užsisakėme keletą „PCED“ iš „EasyEDA“ ir vis dar naudojamės jų paslaugomis, nes radome visą procesą - nuo grandinių piešimo iki PCB užsakymo - patogesnį ir efektyvesnį, palyginti su kitais PCB gamintojais. „EasyEDA“ siūlo grandinės braižymą, modeliavimą, PCB dizainą nemokamai, taip pat siūlo aukštos kokybės, bet mažą kainą, pritaikytą PCB paslaugą. Čia rasite išsamią instrukciją, kaip naudoti „Easy EDA“ kuriant schemas, PCB išdėstymą, imituojant grandines ir kt.
„EasyEDA“ tobulėja kiekvieną dieną; jie pridėjo daug naujų funkcijų ir pagerino bendrą vartotojo patirtį, o tai palengvina „EasyEDA“ ir gali būti naudojama projektuojant grandines. Jie netrukus ketina paleisti savo darbalaukio versiją, kurią galima atsisiųsti ir įdiegti kompiuteryje, kad būtų galima naudoti neprisijungus.
„EasyEDA“ galite paviešinti savo grandinės ir PCB dizainą, kad kiti vartotojai galėtų juos nukopijuoti ar redaguoti ir galėtų iš to pasinaudoti. Mes taip pat paviešinome visus mūsų grandinių ir PCB išdėstymus šiai nuotolinio valdymo namų automatikai.
Žemiau pateikiama „EasyEDA“ PCB išdėstymo viršutinio sluoksnio momentinė nuotrauka. Galite peržiūrėti bet kurį PCB sluoksnį (viršutinį, apatinį, viršutinį silkinį, dugno pieną ir kt.), Pasirinkdami sluoksnį iš lango „Sluoksniai“.
PCB mėginių apskaičiavimas ir užsakymas internetu:
Baigę kurti PCB, galite spustelėti „ Fabrication output“ piktogramą, kuri pateks į PCB užsakymo puslapį. Čia galite peržiūrėti savo PCB „Gerber Viewer“ arba atsisiųsti „Gerber“ failus iš savo PCB ir siųsti juos bet kuriam gamintojui, taip pat daug lengviau (ir pigiau) užsisakyti jį tiesiogiai „EasyEDA“. Čia galite pasirinkti norimų užsisakyti PCB skaičių, kiek jums reikia vario sluoksnių, PCB storį, vario svorį ir net PCB spalvą. Pasirinkę visas parinktis, spustelėkite „Išsaugoti krepšelyje“ ir atlikite užsakymą, tada per kelias dienas gausite savo PCB.
Galite tiesiogiai užsisakyti šią PCB arba atsisiųsti „Gerber“ failą naudodami šią nuorodą.
Po kelių dienų užsisakę PCB, mes gavome PCB. Lentos, kurias gavome, parodytos žemiau.
Kai mes gavome PCB, aš sumontavau visus reikalingus komponentus per PCB, ir galų gale mes paruošėme savo IR nuotolinio valdymo namų automatiką, patikrinkite šią grandinę, veikiančią demonstraciniame vaizdo įraše straipsnio pabaigoje.