- Arbeidsforklaring:
- Komponenter:
- Programmering:
- Krets- og kretskortdesign ved bruk av EasyEDA:
- Beregning og bestilling av PCB-prøver online:
I dette prosjektet skal vi bruke en PIC-mikrokontroller til å fjernstyre få AC-belastninger ved å bare bruke en IR-fjernkontroll. Et lignende prosjekt IR-fjernstyrt hjemmeautomatisering har allerede blitt gjort med Arduino også, men her designet vi det på PCB ved hjelp av EasyEDAs online PCB-designer og simulator, og brukte PCB-designtjenester for å bestille PCB-kort som vist i den påfølgende delen av artikkel.
På slutten av dette prosjektet vil du kunne slå på (AV / AV) hvilken som helst vekselstrømbelastning ved hjelp av en vanlig fjernkontroll fra komforten til stolen / sengen din. For å gjøre dette prosjektet mer interessant, har vi også aktivert en funksjon for å kontrollere hastigheten på viften ved hjelp av Triac. Alt dette kan gjøres med enkle klikk på IR-fjernkontrollen. Du kan bruke hvilken som helst TV / DVD / MP3 fjernkontroll for dette prosjektet. De forskjellige IR-signalene fra fjernkontrollen mottas av mikrokontrolleren som deretter styrer de respektive reléene via en relédriverkrets. Disse reléene brukes til å koble til og fra AC-belastningene (lys / vifte).
Arbeidsforklaring:
Arbeidet med dette prosjektet er ganske enkelt å forstå. Når du trykker på en knapp på IR-fjernkontrollen, sender den en sekvens med kode i form av kodede pulser ved hjelp av 38 KHz moduleringsfrekvens. Disse pulser mottas av TSOP1738- sensoren og blir deretter lest av kontrolleren. Kontrolleren dekoder deretter det mottatte pulstoget til en hex-verdi og sammenligner det med de forhåndsdefinerte hex-verdiene i vårt program.
Hvis det oppstår samsvar, utfører kontrolleren en relativ operasjon ved å utløse respektive Relay / Triac, og det tilsvarende resultatet er også indikert med innebygde lysdioder. Her i dette prosjektet har vi brukt 4 pærer (små pærer) i forskjellige farger, da belysningsbelastninger og en annen pære (større pære) anses å være en fan for demonstrasjonsformål.
Vi har valgt tast 1 for å veksle relé1, 2 for å veksle relé2, 3 for å veksle relé3, 4 for å veksle relé4, og Vol + for å øke viftehastigheten og Vol- for å redusere viftehastigheten.
Merk: Her har vi brukt 100 watt pære i stedet for en vifte.
Det er mange typer IR-fjernkontroller tilgjengelig for forskjellige enheter, men de fleste av dem fungerer rundt 38 kHz frekvens. Her i dette prosjektet styrer vi husholdningsapparater ved hjelp av IR TV-fjernkontroll, og for å oppdage IR-signalene bruker vi en TSOP1738 IR-mottaker. Denne TSOP1738-sensoren kan registrere 38 KHz frekvenssignal. Arbeidet til IR-fjernkontrollen og TSOP1738 er beskrevet i detalj i denne artikkelen: IR-sender og mottaker
PIC-mikrokontrolleren vår opererer på + 5V og reléene opererer på + 12V, derfor bruker vi en transformator til å trappe ned 220V AC og rette den med en fullbro-likeretter. Denne rektifiserte DC-spenningen reguleres deretter til + 12V og + 5V ved å bruke henholdsvis regulator ICs 7812 og 7805.
For å utløse reléet bruker vi transistorer som BC547, som kan fungere som en elektronisk bryter for å slå PÅ / AV reléene basert på signalet fra PIC-mikrokontrolleren. Videre for å kontrollere hastigheten på viften bruker vi en TRIAC. TRIAC er en kraft halvleder som er i stand til å kontrollere utgangsspenningen. denne funksjonen brukes til å kontrollere hastigheten på viften.
Vi har også brukt en Triac Driver for å kontrollere Triac ved hjelp av PIC-mikrokontrolleren vår. Denne driveren brukes til å gi en skytevinkelpuls til Triac, slik at utgangseffekten kan styres. Her har vi brukt 6 nivåer av hastighetskontroll. Når nivået er 0, vil viften være av. Når nivået vil være 1, vil hastigheten være 1/5 av full hastighet. Når nivået vil være 2, vil hastigheten være 2/5 av full hastighet og henholdsvis for andre. Det aktuelle hastighetsnivået kan overvåkes ved hjelp av det innebygde 7-segment displayet.
Blokkdiagrammet til prosjektet er vist nedenfor.
Komponenter:
Komponentene som kreves for å bygge dette prosjektet er gitt nedenfor:
- PIC18f2520 Microcontroller -1
- TSOP1738 -1
- IR TV / DVD-fjernkontroll -1
- Transistor BC547 -4
- Reléer 12 volt -4
- Pære med holder -5
- Koble ledninger -
- EasyEda PCB -1
- 16x2 LCD
- Strømforsyning 12v
- Terminalkontakt 2-pinners `-8
- Terminal Connector 3 pin -1
- Transformator 12-0-12 -1 -
- Spenningsregulator 7805 -1
- Spenningsregulator 7812 -1
- Kondensator 1000uf -1
- Kondensator 10uf -1
- Kondensator 0.1uf -1
- Kondensator 0.01uf 400V `-1
- 10k -5
- 1k -5
- 100ohm -7
- Vanlig katodesegment -1
- 1n4007 diode -10
- BT136 triac -1
- Mann / kvinne topptekst -
- Lysdioder -6
- Optokobling moc3021 -1
- Optokobling mtc2e eller 4n35 -1
- 20Mhz krystall -1
- 33pf kondensator -2
- 5.1v zenerdiode -1
- 47 ohm 2 watt motstand -1
Alle disse komponentene brukes ofte og kan enkelt kjøpes. Men hvis du er ute etter et best kjøp online, vil vi anbefale deg LCSC.
LCSC er en flott nettbutikk for å kjøpe elektronikkomponenter til alle slags prosjekter. De har omtrent 25 000 typer komponenter, og det beste er at de selger selv små mengder til små prosjekter, og de har også Global Shipping.
Dekoding av IR-fjernkontrollen:
Som sagt tidligere kan du bruke hvilken som helst fjernkontroll til prosjektet ditt. Men vi må vite hva slags signal som genereres for fra den aktuelle fjernkontrollen. For hver enkelt nøkkel på fjernkontrollen vil det være en tilsvarende HEX-verdi for den nøkkelen. Ved å bruke denne HEX-verdien kan vi skille mellom hver nøkkel på vår mikrokontrollerside. Så før vi bestemmer oss for å bruke en fjernkontroll, bør vi vite HEX-verdien for tastene som er forhåndsinnstilt i den aktuelle fjernkontrollen. I dette prosjektet har vi brukt en NEC-fjernkontroll. HEX-verdiene for tastene på en NEC-fjernkontroll er gitt nedenfor.
Som du kan merke, har HEX-verdien 7 tegn, hvorav bare de to siste er forskjellige, og vi kan derfor bare vurdere de to siste sifrene for å skille mellom hver tast.
Kretsdiagram:
Skjematisk for prosjektet er vist nedenfor.
Ovennevnte skjema ble gjort enkelt ved å bruke esayEDA skjematisk redaktør, siden de gir oppsett av alle komponentene som brukes i dette prosjektet. Det krever heller ikke installasjon og kan brukes online mens du er på farten.
Pinouts og komponentverdier er tydelig spesifisert i skjemaet ovenfor. Du kan også laste ned skjematisk fil herfra.
Programmering:
Programmet for dette prosjektet er gjort ved hjelp av MPLABX, koden er også ganske enkel og lett å forstå. Den komplette koden vil bli gitt på slutten av denne veiledningen, ytterligere noen viktige biter av programmet blir forklart nedenfor.
I begynnelsen av koden, bør vi inkludere nødvendige biblioteker, definere pinnene og erklære variablene.
#inkludere
Etter det har vi opprettet en enkel forsinkelsesfunksjon ved å bruke “for” -sløyfen.
ugyldig forsinkelse (int-tid) {for (int i = 0; i
Etter det har vi initialisert timeren ved å bruke følgende funksjon
ugyldig tidtaker () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // Timer Clock Source er fra Prescaler T0CS = 0; // Prescaler får klokke fra FCPU (5MHz) T08BIT = 0; // 16 BIT MODE TMR0IE = 1; // Aktiver TIMER0 Avbryt PEIE = 1; // Enable Peripheral Interrupt GIE = 1; // Aktiver INTs globalt TMR0ON = 1; // Nå starter timeren! }
Nå i hovedfunksjonen har vi gitt veibeskrivelse til de valgte pinnene og initialisert tidtaker og ekstern avbrudd int0 for å oppdage null kryssing.
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; // Avbryt på fallende kant INT0IE = 1; // Aktiver INT0 ekstern avbrudd (RB0) INT0IF = 0; // Fjerner INT0 Eksternt avbruddsflaggbit PEIE = 1; // Enable Peripheral Interrupt GIE = 1; // Aktiver INT globalt
Nå bruker vi her ikke avbrudds- eller fangst- og sammenligningsmodus for å oppdage IR-signal. Her har vi nettopp brukt en digital pin til å lese data akkurat som vi leser en trykknapp. Når signalet går høyt eller lavt, setter vi bare avvisningsmetoden og kjører timeren. Når pin endrer status til en annen, lagres tidsverdiene i en matrise.
IR ekstern sendelogikk 0 som 562.5us og logikk 1 som 2250us. Når timeren leser rundt 562,5 us, antar vi at den er 0 og når timeren leser rundt 2250 us, antar vi den som 1. Da konverterer vi den i hex.
Det innkommende signalet fra fjernkontrollen inneholder 34 bits. Vi lagrer alle byte i matrisen og dekoder deretter den siste byten som skal brukes.
mens (ir == 1); INT0IE = 0; mens (ir == 0); TMR0 = 0; mens (ir == 1); i ++; dat = TMR0; hvis (dat> 5000 && dat <12000) {} annet {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; annet hvis (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
Ovennevnte stykke kode mottar og dekoder IR-signalet ved hjelp av tidsuravbrudd og lagrer den tilsvarende HEX-verdien i variabelen cmd. Nå kan vi sammenligne denne HEX-verdien (cmd-variabel) med våre forhåndsdefinerte HEX-verdier og veksle reléet som vist nedenfor
hvis (cmd == 0xAF) {relé1 = ~ relé1; rly1LED = ~ rly1LED; } annet hvis (cmd == 0x27) {relé2 = ~ relé2; rly2LED = ~ rly2LED; } annet hvis (cmd == 0x07) {relé3 = ~ relé3; rly3LED = ~ rly3LED; } ellers hvis (cmd == 0xCF) {relé4 = ~ relé4; rly4LED = ~ rly4LED; } annet hvis (cmd == 0x5f) {speed ++; hvis (hastighet> 5) {hastighet = 5; }} annet hvis (cmd == 0x9f) {hastighet--; hvis (hastighet <= 0) {hastighet = 0; }}
Nå for å vite hvilken fan vi jobber for øyeblikket, bør vi bruke en 7-segment skjerm. Følgende linjer brukes til å instruere pinnene på 7-segmentet.
hvis (hastighet == 5) // slått av 5x2 = 10ms triger // hastighet 0 {PORTA = 0xC0; // display 0 RB6 = 1; fanLED = 0; } annet hvis (speed == 4) // 8 ms trigger // speed 1 {PORTA = 0xfc; // viser 1 RB6 = 1; fanLED = 1; } annet hvis (hastighet == 3) // 6 ms utløser // hastighet 2 {PORTA = 0xE4; // viser 2 RB6 = 0; fanLED = 1; } annet hvis (speed == 2) // 4ms trigger // speed 3 {PORTA = 0xF0; // viser 3 RB6 = 0; fanLED = 1; } annet hvis (speed == 1) // 2ms trigger // speed 4 {PORTA = 0xD9; // viser 4 RB6 = 0; fanLED = 1; } annet hvis (hastighet == 0) // 0ms utløser // hastighet 5 full effekt {PORTA = 0xD2; // viser 5 RB6 = 0; fanLED = 1; }
Funksjonen nedenfor er for ekstern avbrudd og tidsoverløp. Denne funksjonen er ansvarlig for å oppdage null kryss og kjøre Triac.
ugyldig avbrudd isr () {if (INT0IF) {forsinkelse (hastighet); tric = 1; for (int t = 0; t <100; t ++); tric = 0; INT0IF = 0; } hvis (TMR0IF) // Sjekk om det er TMR0 Overflow ISR {TMR0IF = 0; }}
Den endelige kretskortet for denne IR-fjernstyrte hjemmeautomatiseringen ser ut som vist nedenfor:
Krets- og kretskortdesign ved bruk av EasyEDA:
For å designe denne hjemmeautomatiseringen av fjernkontrollen har vi brukt EasyEDA, som er et gratis online EDA-verktøy for å lage kretser og PCB på en sømløs måte. Vi har tidligere bestilt få PCB-er fra EasyEDA og bruker fortsatt tjenestene deres da vi fant hele prosessen, fra å tegne kretsene til å bestille PCB-ene, mer praktisk og effektiv i sammenligning med andre PCB-fabrikanter. EasyEDA tilbyr kretstegning, simulering, PCB-design gratis og tilbyr også høy kvalitet, men lav pris Tilpasset PCB-tjeneste. Sjekk her for den komplette opplæringen om hvordan du bruker Easy EDA for å lage skjemaer, PCB-oppsett, simulere kretsene etc.
EasyEDA forbedrer seg hver dag; de har lagt til mange nye funksjoner og forbedret den generelle brukeropplevelsen, noe som gjør EasyEDA enklere og brukbart for å designe kretser. De skal snart lansere Desktop-versjonen, som kan lastes ned og installeres på datamaskinen din for offline bruk.
I EasyEDA kan du gjøre krets- og kretskortdesignene dine offentlige slik at andre brukere kan kopiere eller redigere dem og kan dra nytte av det. Vi har også gjort hele krets- og kretskortoppsett offentlig for denne fjernkontrollen hjemmeautomasjon.
Nedenfor er øyeblikksbildet av det øverste laget av PCB-layout fra EasyEDA, du kan se hvilket som helst lag (topp, bunn, toppsilk, bunnmelk osv.) På PCB ved å velge laget fra "Lag" -vinduet.
Beregning og bestilling av PCB-prøver online:
Etter å ha fullført designen av PCB, kan du klikke på ikonet for Fabrication-utdata , som tar deg med på PCB-ordresiden. Her kan du se PCB i Gerber Viewer eller laste ned Gerber-filer på PCB og sende dem til hvilken som helst produsent. Det er også mye enklere (og billigere) å bestille det direkte i EasyEDA. Her kan du velge antall PCB du vil bestille, hvor mange kobberlag du trenger, PCB-tykkelsen, kobbervekten og til og med PCB-fargen. Etter at du har valgt alle alternativene, klikker du på "Lagre i handlekurven" og fullfører bestillingen din, så mottar du PCB-ene dine i løpet av få dager.
Du kan bestille dette PCB direkte eller laste ned Gerber-filen ved hjelp av denne lenken.
Etter noen dager med bestilling av kretskort fikk vi kretskortene. Tavlene vi fikk er vist nedenfor.
Når vi mottok kretskortene, monterte jeg alle nødvendige komponenter over kretskortet, og til slutt har vi vår IR-fjernstyrte hjemmeautomatisering klar, sjekk denne kretsen som fungerer i demonstrasjonsvideo på slutten av artikkelen.