- Arbejdsforklaring:
- Komponenter:
- Programmering:
- Kredsløb og printkortdesign ved hjælp af EasyEDA:
- Beregning og bestilling af PCB-prøver online:
I dette projekt skal vi bruge en PIC-mikrocontroller til at fjernstyre få AC-belastninger ved blot at bruge en IR-fjernbetjening. Et lignende projekt IR-fjernstyret hjemmeautomatisering er allerede blevet udført med Arduino også, men her designet vi det på PCB ved hjælp af EasyEDAs online PCB-designer og simulator og brugte deres PCB-designtjenester til at bestille printkortene som vist i det efterfølgende afsnit af artikel.
I slutningen af dette projekt vil du være i stand til at skifte (ON / OFF) enhver AC-belastning ved hjælp af en almindelig fjernbetjening fra din stol / sengs komfort. For at gøre dette projekt mere interessant har vi også aktiveret en funktion til at styre ventilatorens hastighed ved hjælp af Triac. Alle disse kan gøres med enkle klik på din IR-fjernbetjening. Du kan bruge en hvilken som helst af din TV / DVD / MP3 fjernbetjening til dette projekt. De forskellige IR-signaler fra fjernbetjeningen modtages af mikrocontrolleren, som derefter styrer de respektive relæer via et relædriverkredsløb. Disse relæer bruges til at tilslutte og afbryde AC-belastningerne (lys / blæser).
Arbejdsforklaring:
Arbejdet med dette projekt er ret let at forstå. Når der trykkes på en knap på IR-fjernbetjeningen, sender den en sekvens af kode i form af kodede impulser ved hjælp af 38 KHz modulerende frekvens. Disse impulser modtages af TSOP1738- sensoren og læses derefter af controlleren. Controlleren afkoder derefter det modtagne tog af pulserne til en hex-værdi og sammenligner det med de foruddefinerede hex-værdier i vores program.
Hvis der opstår nogen match, udfører controlleren en relativ operation ved at udløse det respektive Relay / Triac, og det tilsvarende resultat er også angivet med indbyggede LED'er. Her i dette projekt har vi brugt 4 pærer (små pærer) i forskellige farver, da lysbelastninger og en anden pære (større pære) betragtes som en fan til demonstrationsformål.
Vi har valgt tast 1 til at skifte relæ1, 2 for at skifte relæ2, 3 for at skifte relæ3, 4 for at skifte relæ4 og Vol + for at øge blæserhastigheden og Vol- for at sænke blæserens hastighed.
Bemærk: Her har vi brugt 100 watt pære i stedet for en ventilator.
Der er mange typer IR-fjernbetjeninger til rådighed for forskellige enheder, men de fleste af dem arbejder omkring 38KHz frekvens. Her i dette projekt styrer vi husholdningsapparater ved hjælp af IR TV-fjernbetjening, og til detektering af IR-signaler bruger vi en TSOP1738 IR-modtager. Denne TSOP1738-sensor kan registrere 38 KHz frekvenssignal. Arbejdet med IR-fjernbetjeningen og TSOP1738 er beskrevet detaljeret i denne artikel: IR-sender og modtager
Vores PIC-mikrocontroller fungerer ved + 5V, og relæerne fungerer ved + 12V, og derfor bruger vi en transformer til at trimme 220V AC ned og rette det ved hjælp af en fuld broligter. Denne udbedrede jævnstrømsspænding reguleres derefter til + 12V og + 5V ved anvendelse af henholdsvis regulator IC'erne 7812 og 7805.
For at udløse relæet bruger vi transistorer som BC547, som kan fungere som en elektronisk switch for at tænde / slukke relæerne baseret på signalet fra PIC-mikrocontrolleren. Yderligere for at kontrollere hastigheden på ventilatoren bruger vi en TRIAC. TRIAC er en effekt halvleder, som er i stand til at kontrollere udgangsspændingen; denne funktion bruges til at kontrollere blæserens hastighed.
Vi har også brugt en Triac Driver til at styre Triac ved hjælp af vores PIC-mikrocontroller. Denne driver bruges til at give Triac en fyringsvinkelimpuls, så udgangseffekten kan styres. Her har vi brugt 6 niveau af hastighedskontrol. Når niveauet er 0, vil ventilatoren være slukket. Når niveauet er 1, vil hastigheden være 1/5 af fuld hastighed. Når niveauet er 2, vil hastigheden være 2/5 af fuld hastighed og henholdsvis for andre. Det aktuelle hastighedsniveau kan overvåges ved hjælp af det indbyggede 7-segment display.
Projektets blokdiagram er vist nedenfor.
Komponenter:
Komponenterne, der kræves for at opbygge dette projekt, er angivet nedenfor:
- PIC18f2520 Microcontroller -1
- TSOP1738 -1
- IR TV / DVD Remote -1
- Transistor BC547 -4
- Relæer 12 volt -4
- Pære med holder -5
- Tilslutning af ledninger -
- EasyEda printkort -1
- 16x2 LCD
- Strømforsyning 12v
- Terminalstik 2 ben `-8
- Terminalstik 3 ben -1
- Transformer 12-0-12 -1 -
- Spændingsregulator 7805 -1
- Spændingsregulator 7812 -1
- Kondensator 1000uf -1
- Kondensator 10uf -1
- Kondensator 0.1uf -1
- Kondensator 0.01uf 400V '-1
- 10k -5
- 1k -5
- 100ohm -7
- Fælles katodesegment -1
- 1n4007-diode -10
- BT136 triac -1
- Mandlig / kvindelig header -
- Lysdioder -6
- Optokobler moc3021 -1
- Optokobler mtc2e eller 4n35 -1
- 20Mhz krystal -1
- 33pf kondensator -2
- 5.1v zenerdiode -1
- 47 ohm 2 watt modstand -1
Alle disse komponenter er almindeligt anvendte og kan let købes. Men hvis du leder efter et bedste køb online, vil vi anbefale dig LCSC.
LCSC er en fantastisk onlinebutik til at købe dine elektronikkomponenter til alle slags projekter. De indeholder omkring 25.000 slags komponenter, og det bedste er, at de sælger selv små mængder til små projekter, og de har også Global Shipping.
Afkodning af IR-fjernbetjeningen:
Som tidligere sagt kan du bruge enhver slags fjernbetjening til dit projekt. Men vi er nødt til at vide, hvilken slags signal der genereres til fra den pågældende fjernbetjening. For hver enkelt nøgle på fjernbetjeningen vil der være en tilsvarende HEX-værdi for den nøgle. Ved hjælp af denne HEX-værdi kan vi skelne mellem hver nøgle på vores mikrocontroller-side. Så før vi beslutter at bruge en fjernbetjening, skal vi kende HEX-værdien for de forudindstillede taster i den pågældende fjernbetjening. I dette projekt har vi brugt en NEC-fjernbetjening. HEX-værdierne for tasterne på en NEC-fjernbetjening er angivet nedenfor.
Som du kan bemærke, har HEX-værdien 7 tegn, hvoraf kun de sidste to er forskellige, og derfor kan vi kun overveje de sidste to cifre for at skelne mellem hver nøgle.
Kredsløbsdiagram:
Skematisk for projektet er vist nedenfor.
Ovenstående skematisk blev gjort let ved hjælp af esayEDA skematisk editor, da de giver layouts for alle komponenter, der anvendes i dette projekt. Det kræver heller ikke en installation og kan bruges online på farten.
Pinouts og komponentværdier er tydeligt specificeret i skemaet ovenfor. Du kan også downloade den skematiske fil herfra.
Programmering:
Programmet til dette projekt udføres ved hjælp af MPLABX, koden er også ret enkel og let at forstå. Den komplette kode vil blive givet i slutningen af denne tutorial, yderligere få vigtige klumper af programmet forklares nedenfor.
I begyndelsen af koden skal vi inkludere krævede biblioteker, definere stifterne og erklære variablerne.
#omfatte
Derefter har vi oprettet en simpel forsinkelsesfunktion ved hjælp af "for" -sløjfen.
ugyldig forsinkelse (int-tid) {for (int i = 0; i
Derefter har vi initialiseret timeren ved hjælp af følgende funktion
ugyldig timer () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // Timer Clock Source er fra Prescaler T0CS = 0; // Prescaler får uret fra FCPU (5MHz) T08BIT = 0; // 16 BIT MODE TMR0IE = 1; // Aktivér TIMER0 Interrupt PEIE = 1; // Aktivér perifer interrupt GIE = 1; // Aktiver INT'er globalt TMR0ON = 1; // Start nu timeren! }
Nu i hovedfunktionen har vi givet retninger til de valgte ben og initialiseret timer og ekstern afbrydelse int0 for at detektere nul krydsning.
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; fanLED = 0; i = 0; ir = 0; tric = 0; timer (); INTEDG0 = 0; // Afbryd på faldende kant INT0IE = 1; // Aktiver INT0 ekstern afbrydelse (RB0) INT0IF = 0; // Rydder INT0 Eksternt afbrydelsesflagbit PEIE = 1; // Aktivér perifer interrupt GIE = 1; // Aktivér INT'er globalt
Her bruger vi ikke nogen afbrydelses- eller optagelses- og sammenligningstilstand til at detektere IR-signal. Her har vi netop brugt en digital pin til at læse data ligesom vi læser en trykknap. Når signalet går højt eller lavt, lægger vi bare afvisningsmetode og kører timeren. Når pin ændrer sin tilstand til en anden, gemmes tidsværdier i en matrix.
IR-fjern sendelogik 0 som 562.5us og logik 1 som 2250us. Når timer læser omkring 562,5 us, antager vi det 0, og når timer læser omkring 2250 us, antager vi det som 1. Så konverterer vi det i hex.
Det indgående signal fra fjernbetjeningen indeholder 34 bit. Vi gemmer alle bytes i arrayet og afkoder derefter den sidste byte, der skal bruges.
mens (ir == 1); INT0IE = 0; mens (ir == 0); TMR0 = 0; mens (ir == 1); i ++; dat = TMR0; hvis (dat> 5000 && dat <12000) {} ellers {i = 0; INT0IE = 1; } hvis (i> = 33) {GIE = 0; forsinkelse (50); cmd = 0; for (j = 26; j <34; j ++) {if (dat> 1000 && dat <2000) cmd << = 1; ellers hvis (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
Ovenstående stykke kode modtager og afkoder IR-signalet ved hjælp af timer-afbrydelser og lagrer den tilsvarende HEX-værdi i den variable cmd. Nu kan vi sammenligne denne HEX-værdi (cmd-variabel) med vores foruddefinerede HEX-værdier og skifte relæet som vist nedenfor
hvis (cmd == 0xAF) {relæ1 = ~ relæ1; rly1LED = ~ rly1LED; } ellers hvis (cmd == 0x27) {relæ2 = ~ relæ2; rly2LED = ~ rly2LED; } ellers hvis (cmd == 0x07) {relæ3 = ~ relæ3; rly3LED = ~ rly3LED; } ellers hvis (cmd == 0xCF) {relæ4 = ~ relæ4; rly4LED = ~ rly4LED; } ellers hvis (cmd == 0x5f) {hastighed ++; hvis (hastighed> 5) {hastighed = 5; }} ellers hvis (cmd == 0x9f) {hastighed--; hvis (hastighed <= 0) {hastighed = 0; }}
For at vide, hvor vores ventilator i øjeblikket fungerer, skal vi bruge et 7-segment display. Følgende linjer bruges til at instruere stifterne i 7-segment displayet.
hvis (hastighed == 5) // slået fra 5x2 = 10ms triger // hastighed 0 {PORTA = 0xC0; // display 0 RB6 = 1; fanLED = 0; } ellers hvis (hastighed == 4) // 8 ms trigger // hastighed 1 {PORTA = 0xfc; // viser 1 RB6 = 1; fanLED = 1; } ellers hvis (hastighed == 3) // 6 ms trigger // hastighed 2 {PORTA = 0xE4; // viser 2 RB6 = 0; fanLED = 1; } ellers hvis (hastighed == 2) // 4ms trigger // hastighed 3 {PORTA = 0xF0; // viser 3 RB6 = 0; fanLED = 1; } ellers hvis (hastighed == 1) // 2ms trigger // hastighed 4 {PORTA = 0xD9; // viser 4 RB6 = 0; fanLED = 1; } ellers hvis (hastighed == 0) // 0ms trigger // hastighed 5 fuld effekt {PORTA = 0xD2; // viser 5 RB6 = 0; fanLED = 1; }
Nedenstående funktion er til ekstern afbrydelse og tidsoverløb. Denne funktion er ansvarlig for detektering af nul krydsning og kørsel af Triac.
ugyldig afbrydelse isr () {hvis (INT0IF) {forsinkelse (hastighed); tric = 1; for (int t = 0; t <100; t ++); tric = 0; INT0IF = 0; } hvis (TMR0IF) // Kontroller, om det er TMR0 Overflow ISR {TMR0IF = 0; }}
Det endelige printkort til denne IR-fjernstyrede hjemmeautomatisering ser ud som vist nedenfor:
Kredsløb og printkortdesign ved hjælp af EasyEDA:
For at designe denne fjernbetjeningsautomatisering har vi brugt EasyEDA, som er et gratis online EDA-værktøj til oprettelse af kredsløb og printkort på en problemfri måde. Vi har tidligere bestilt få PCB'er fra EasyEDA og bruger stadig deres tjenester, da vi fandt hele processen, fra at tegne kredsløbene til bestilling af PCB'erne, mere praktisk og effektiv i sammenligning med andre PCB-fabrikanter. EasyEDA tilbyder kredsløbstegning, simulering, PCB-design gratis og tilbyder også høj kvalitet, men lav pris Tilpasset PCB-service. Tjek her for den komplette vejledning om, hvordan du bruger Easy EDA til fremstilling af skemaer, printkortlayouter, simulering af kredsløb osv.
EasyEDA forbedrer dag for dag; de har tilføjet mange nye funktioner og forbedret den samlede brugeroplevelse, hvilket gør EasyEDA nemmere og anvendelig til design af kredsløb. De vil snart lancere sin Desktop-version, som kan downloades og installeres på din computer til offline brug.
I EasyEDA kan du offentliggøre dit kredsløb og printkortdesign offentligt, så andre brugere kan kopiere eller redigere dem og drage fordel af derfra. Vi har også offentliggjort hele vores kredsløbs- og printkortlayouts til denne fjernbetjening Hjemmeautomatisering.
Nedenfor er øjebliksbillede af øverste lag af printkortlayout fra EasyEDA, du kan se ethvert lag (top, bund, topsilk, bundmælk osv.) På printkortet ved at vælge laget fra vinduet 'Lag'.
Beregning og bestilling af PCB-prøver online:
Når du er færdig med designet af PCB, kan du klikke på ikonet for Fabrication-output , som fører dig til PCB-ordresiden. Her kan du se din PCB i Gerber Viewer eller downloade Gerber-filer på din PCB og sende dem til enhver producent, det er også meget nemmere (og billigere) at bestille det direkte i EasyEDA. Her kan du vælge antallet af printkort, du vil bestille, hvor mange kobberlag du har brug for, printkorttykkelsen, kobbervægten og endda printkortfarven. Når du har valgt alle mulighederne, skal du klikke på "Gem i indkøbskurv" og gennemføre din ordre, så modtager du dine printkort inden for få dage.
Du kan bestille dette printkort direkte eller downloade Gerber-filen ved hjælp af dette link.
Efter få dage med bestilling af printkort fik vi printkortene. Brædderne, som vi modtog, er vist nedenfor.
Når vi modtog printkortene, monterede jeg alle de nødvendige komponenter over printkortet, og til sidst har vi vores IR-fjernstyrede hjemmeautomatisering klar, tjek dette kredsløb, der fungerer i demonstrationsvideo i slutningen af artiklen.