- Werkende uitleg:
- Componenten:
- Programmeren:
- Circuit- en PCB-ontwerp met EasyEDA:
- Online PCB-monsters berekenen en bestellen:
In dit project gaan we een PIC-microcontroller gebruiken om enkele AC-belastingen op afstand te bedienen door alleen een IR-afstandsbediening te gebruiken. Een soortgelijk project IR-afstandsbediende huisautomatisering is ook al gedaan met Arduino, maar hier hebben we het op PCB ontworpen met behulp van EasyEDA's online PCB-ontwerper en simulator, en hun PCB-ontwerpdiensten gebruikt om de printplaten te bestellen, zoals getoond in het volgende deel van de artikel.
Aan het einde van dit project kunt u elke AC-belasting schakelen (AAN / UIT) met een gewone afstandsbediening vanuit het comfort van uw stoel / bed. Om dit project interessanter te maken, hebben we ook een functie ingeschakeld om de snelheid van de ventilator te regelen met behulp van Triac. Dit alles kan worden gedaan met simpele klikken op uw IR-afstandsbediening. U kunt voor dit project al uw tv- / dvd- / mp3-afstandsbedieningen gebruiken. De verschillende IR-signalen van de afstandsbediening worden ontvangen door de microcontroller die vervolgens de respectieve relais bestuurt via een relaisstuurcircuit. Deze relais worden gebruikt om de AC-belastingen (Lights / Fan) aan en uit te schakelen.
Werkende uitleg:
De werking van dit project is vrij eenvoudig te begrijpen. Wanneer een knop op de IR-afstandsbediening wordt ingedrukt, verzendt deze een codereeks in de vorm van gecodeerde pulsen met behulp van een modulatiefrequentie van 38 kHz. Deze pulsen worden ontvangen door de TSOP1738- sensor en vervolgens gelezen door de controller. De controller decodeert vervolgens de ontvangen reeks pulsen in een hexadecimale waarde en vergelijkt deze met de vooraf gedefinieerde hexadecimale waarden in ons programma.
Als er een match optreedt, voert de controller een relatieve bewerking uit door de respectievelijke Relay / Triac te activeren en het bijbehorende resultaat wordt ook aangegeven door ingebouwde LED's. Hier in dit project hebben we 4 lampen (kleine bollen) van verschillende kleuren gebruikt als verlichtingsbelastingen en een andere lamp (grotere lamp) wordt beschouwd als een ventilator voor demonstratiedoeleinden.
We hebben toets 1 geselecteerd om te schakelen tussen relais1, 2 om te schakelen tussen relais2, 3 om te schakelen tussen relais3, 4 om te schakelen tussen relais4, en Vol + om de ventilatorsnelheid te verhogen en Vol- om de snelheid van de ventilator te verlagen.
Opmerking: hier hebben we een lamp van 100 watt gebruikt in plaats van een ventilator.
Er zijn veel soorten IR-afstandsbedieningen beschikbaar voor verschillende apparaten, maar de meeste werken rond de 38KHz-frequentie. Hier in dit project bedienen we huishoudelijke apparaten met behulp van een IR-tv-afstandsbediening en voor het detecteren van de IR-signalen gebruiken we een TSOP1738 IR-ontvanger. Deze TSOP1738-sensor kan een 38Khz-frequentiesignaal detecteren. De werking van de IR-afstandsbediening en de TSOP1738 wordt in detail behandeld in dit artikel: IR-zender en -ontvanger
Onze PIC-microcontroller werkt op + 5V en de relais werken op + 12V, daarom gebruiken we een transformator om de 220V AC te verlagen en te corrigeren met behulp van een volledige bruggelijkrichter. Deze gelijkgerichte gelijkspanning wordt vervolgens geregeld naar + 12V en + 5V met behulp van respectievelijk de regulator-IC's 7812 en 7805.
Om het relais te activeren maken we gebruik van transistors zoals BC547 die kunnen fungeren als een elektronische schakelaar om de relais AAN / UIT te zetten op basis van het signaal van de PIC-microcontroller. Verder gebruiken we een TRIAC om de snelheid van de ventilator te regelen. TRIAC is een vermogenshalfgeleider die de uitgangsspanning kan regelen; deze mogelijkheid wordt gebruikt om de snelheid van de ventilator te regelen.
We hebben ook een Triac-stuurprogramma gebruikt om de Triac te besturen met behulp van onze PIC-microcontroller. Deze driver wordt gebruikt om Triac een afvuurhoekpuls te geven, zodat het uitgangsvermogen kan worden geregeld. Hier hebben we 6 niveaus van snelheidsregeling gebruikt. Als het niveau 0 is, is de ventilator uitgeschakeld. Wanneer niveau 1 is, is de snelheid 1/5 van de volledige snelheid. Wanneer niveau 2 is, is de snelheid 2/5 van de volle snelheid en respectievelijk voor anderen. Het huidige niveau van de snelheid kan worden gecontroleerd met behulp van het ingebouwde 7-segmentendisplay.
Het blokschema van het project wordt hieronder weergegeven.
Componenten:
De componenten die nodig zijn om dit project te bouwen, worden hieronder weergegeven:
- PIC18f2520 Microcontroller -1
- TSOP1738 -1
- IR-tv / dvd-afstandsbediening -1
- Transistor BC547 -4
- Relais 12 volt -4
- Lamp met houder -5
- Verbindingsdraden -
- EasyEda-printplaat -1
- 16x2 LCD
- Voeding 12v
- Terminal connector 2 pin `-8
- Terminal Connector 3 pin -1
- Transformator 12-0-12-1 -
- Spanningsregelaar 7805-1
- Spanningsregelaar 7812-1
- Condensator 1000uf -1
- Condensator 10uf -1
- Condensator 0.1uf -1
- Condensator 0.01uf 400V `-1
- 10k -5
- 1k -5
- 100ohm -7
- Gemeenschappelijk kathodesegment -1
- 1n4007 diode -10
- BT136 triac -1
- Mannelijke / vrouwelijke header -
- LED's -6
- Opto-koppeling MOC3021 -1
- Opto-koppeling mtc2e of 4n35 -1
- 20Mhz kristal -1
- 33pf condensator -2
- 5,1v zenerdiode -1
- 47 ohm 2 watt weerstand -1
Al deze componenten worden veel gebruikt en kunnen gemakkelijk worden gekocht. Als u echter op zoek bent naar de beste online aankoop, dan raden we u LCSC aan.
LCSC is een geweldige online winkel om uw elektronische componenten voor allerlei projecten te kopen. Ze bevatten ongeveer 25.000 soorten componenten en het beste is dat ze zelfs kleine hoeveelheden artikelen verkopen voor kleine projecten en dat ze ook wereldwijde verzending hebben.
Decodering van de IR-afstandsbediening:
Zoals eerder gezegd, kunt u elke soort afstandsbediening voor uw project gebruiken. Maar we moeten weten voor welk soort signaal er wordt gegenereerd vanaf die specifieke afstandsbediening. Voor elke individuele sleutel op de afstandsbediening is er een equivalente HEX-waarde voor die sleutel. Met behulp van deze HEX-waarde kunnen we onderscheid maken tussen elke toets aan onze microcontrollerzijde. Dus voordat we besluiten om een afstandsbediening te gebruiken, moeten we de HEX-waarde kennen voor de toetsen die in die specifieke afstandsbediening zijn ingesteld. In dit project hebben we een NEC-afstandsbediening gebruikt. De HEX-waarden voor de toetsen op een NEC-afstandsbediening worden hieronder gegeven.
Zoals u kunt zien, heeft de HEX-waarde 7 tekens waarvan alleen de laatste twee verschillen, daarom kunnen we alleen de laatste twee cijfers beschouwen om onderscheid te maken tussen elke sleutel.
Schakelschema:
Het schema voor het project wordt hieronder weergegeven.
Het bovenstaande schema is eenvoudig gemaakt door de esayEDA schematische editor te gebruiken, aangezien deze de lay-outs bieden van alle componenten die in dit project worden gebruikt. Het vereist ook geen installatie en kan onderweg online worden gebruikt.
De pinouts en componentwaarden zijn duidelijk gespecificeerd in het bovenstaande schema. U kunt hier ook het schemabestand downloaden.
Programmeren:
Het programma voor dit project wordt gedaan met MPLABX, de code is ook vrij eenvoudig en gemakkelijk te begrijpen. De volledige code zal aan het einde van deze tutorial worden gegeven, verdere enkele belangrijke delen van het programma worden hieronder uitgelegd.
Aan het begin van de code moeten we de vereiste bibliotheken opnemen, de pinnen definiëren en de variabelen declareren.
# omvatten
Daarna hebben we een eenvoudige vertragingsfunctie gemaakt door de "for" -lus te gebruiken.
ongeldige vertraging (int tijd) {for (int i = 0; i
Daarna hebben we de timer geïnitialiseerd door de volgende functie te gebruiken
ongeldige timer () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // Timer Clock Source is van Prescaler T0CS = 0; // Prescaler krijgt klok van FCPU (5 MHz) T08BIT = 0; // 16 BIT MODUS TMR0IE = 1; // Schakel TIMER0 Interrupt PEIE = 1 in; // Schakel Peripheral Interrupt GIE = 1 in; // INTs globaal inschakelen TMR0ON = 1; // Start nu de timer! }
Nu in de hoofdfunctie, hebben we aanwijzingen gegeven aan de geselecteerde pinnen en de timer en externe interrupt int0 initialiseren om nuldoorgang te detecteren.
ADCON1 = 0b00001111; TRISB1 = 0; TRISB2 = 1; TRISB3 = 0; TRISB4 = 0; TRISB5 = 0; TRISC = 0x00; TRISA = 0x00; PORTA = 0xc0; TRISB6 = 0; RB6 = 1; relais1 = 0; relais2 = 0; relay3 = 0; relay4 = 0; rly1LED = 0; rly3LED = 0; rly2LED = 0; rly4LED = 0; fanLED = 0; i = 0; ir = 0; tric = 0; timer (); INTEDG0 = 0; // Onderbreken bij dalende flank INT0IE = 1; // Schakel de INT0 externe interrupt (RB0) INT0IF = 0 in; // Wist INT0 External Interrupt Flag bit PEIE = 1; // Schakel Peripheral Interrupt GIE = 1 in; // Schakel INT's globaal in
Nu gebruiken we hier geen onderbrekings- of vastleg- en vergelijkingsmodus om het IR-signaal te detecteren. Hier hebben we zojuist een digitale pin gebruikt om gegevens te lezen, net zoals we een drukknop lezen. Telkens wanneer het signaal hoog of laag wordt, plaatsen we de debouncing-methode en voeren we de timer uit. Telkens wanneer de pin van status verandert in een andere, worden de tijdwaarden in een array opgeslagen.
IR-afstandsbediening zendt logica 0 als 562.5us en logica 1 als 2250us. Elke keer dat de timer rond 562.5us leest, nemen we aan dat het 0 is en als de timer rond 2250us leest, nemen we het aan als 1. Vervolgens converteren we het naar hex.
Het inkomende signaal van de afstandsbediening bevat 34 bits. We slaan alle bytes op in de array en decoderen vervolgens de laatste te gebruiken byte.
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; vertraging (50); cmd = 0; voor (j = 26; j <34; j ++) {if (dat> 1000 && dat <2000) cmd << = 1; anders if (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
Het bovenstaande stuk code ontvangt en decodeert het IR-signaal met behulp van timer-interrupts en slaat de bijbehorende HEX-waarde op in de variabele cmd. Nu kunnen we deze HEX-waarde (cmd-variabele) vergelijken met onze vooraf gedefinieerde HEX-waarden en het relais schakelen zoals hieronder wordt weergegeven
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) {snelheid ++; if (snelheid> 5) {snelheid = 5; }} else if (cmd == 0x9f) {snelheid--; if (snelheid <= 0) {snelheid = 0; }}
Om nu te weten waar onze ventilator momenteel draait, moeten we een 7-segment-display gebruiken. De volgende regels worden gebruikt om de pinnen van het 7-segmentendisplay te instrueren.
if (snelheid == 5) // uitgeschakeld 5x2 = 10ms triger // snelheid 0 {PORTA = 0xC0; // weergave 0 RB6 = 1; fanLED = 0; } else if (speed == 4) // 8 ms trigger // snelheid 1 {PORTA = 0xfc; // 1 RB6 = 1 weergeven; fanLED = 1; } else if (snelheid == 3) // 6 ms trigger // snelheid 2 {PORTA = 0xE4; // 2 RB6 = 0 weergeven; fanLED = 1; } else if (snelheid == 2) // 4ms trigger // snelheid 3 {PORTA = 0xF0; // 3 RB6 = 0 weergeven; fanLED = 1; } else if (snelheid == 1) // 2ms trigger // snelheid 4 {PORTA = 0xD9; // 4 RB6 = 0 weergeven; fanLED = 1; } else if (snelheid == 0) // 0ms trigger // snelheid 5 vol vermogen {PORTA = 0xD2; // 5 RB6 = 0 weergeven; fanLED = 1; }
De onderstaande functie is voor externe onderbreking en tijdoverloop. Deze functie is verantwoordelijk voor het detecteren van nuldoorgangen en het besturen van de Triac.
void interrupt isr () {if (INT0IF) {vertraging (snelheid); tric = 1; voor (int t = 0; t <100; t ++); tric = 0; INT0IF = 0; } if (TMR0IF) // Controleer of het TMR0 Overflow ISR {TMR0IF = 0 is; }}
De uiteindelijke print voor deze IR-afstandsbediening domotica ziet er uit zoals hieronder weergegeven:
Circuit- en PCB-ontwerp met EasyEDA:
Om deze domotica met afstandsbediening te ontwerpen, hebben we EasyEDA gebruikt, een gratis online EDA-tool voor het naadloos maken van circuits en PCB's. We hebben eerder enkele PCB's bij EasyEDA besteld en gebruiken nog steeds hun diensten, aangezien we het hele proces, van het tekenen van de schakelingen tot het bestellen van de PCB's, handiger en efficiënter vonden in vergelijking met andere PCB-fabrikanten. EasyEDA biedt gratis circuittekening, simulatie en PCB-ontwerp en biedt ook hoogwaardige maar lage prijs op maat gemaakte PCB-service. Kijk hier voor de volledige tutorial over het gebruik van Easy EDA voor het maken van schema's, PCB-lay-outs, het simuleren van de circuits enz.
EasyEDA verbetert met de dag; ze hebben veel nieuwe functies toegevoegd en de algehele gebruikerservaring verbeterd, waardoor EasyEDA gemakkelijker en bruikbaarder wordt voor het ontwerpen van circuits. Ze zullen binnenkort de desktopversie lanceren, die kan worden gedownload en op uw computer kan worden geïnstalleerd voor offline gebruik.
In EasyEDA kunt u uw circuit- en PCB-ontwerpen openbaar maken, zodat andere gebruikers ze kunnen kopiëren of bewerken en daar hun voordeel mee kunnen doen, we hebben ook onze hele circuit- en PCB-lay-outs openbaar gemaakt voor deze afstandsbediening voor domotica.
Hieronder ziet u de momentopname van de bovenste laag van de PCB-lay-out van EasyEDA, u kunt elke laag (boven, onder, bovenzijde, onderzijde, enz.) Van de PCB bekijken door de laag in het venster 'Lagen' te selecteren.
Online PCB-monsters berekenen en bestellen:
Nadat u het ontwerp van de PCB hebt voltooid, kunt u op het pictogram van Fabrication-output klikken, waarna u naar de PCB-bestelpagina gaat. Hier kunt u uw PCB in Gerber Viewer bekijken of Gerber-bestanden van uw PCB downloaden en naar een willekeurige fabrikant sturen, ook is het een stuk eenvoudiger (en goedkoper) om deze direct in EasyEDA te bestellen. Hier kunt u het aantal PCB's selecteren dat u wilt bestellen, hoeveel koperlagen u nodig heeft, de PCB-dikte, het kopergewicht en zelfs de PCB-kleur. Nadat u alle opties heeft geselecteerd, klikt u op "Opslaan in winkelwagen" en rondt u uw bestelling af, dan ontvangt u uw PCB's binnen enkele dagen.
U kunt deze print direct bestellen of het Gerber-bestand downloaden via deze link.
Na een paar dagen PCB's te hebben besteld, kregen we de PCB's. De borden die we hebben ontvangen, zijn hieronder weergegeven.
Nadat we de PCB's hadden ontvangen, heb ik alle vereiste componenten over de PCB gemonteerd en eindelijk hebben we onze IR-afstandsbediende huisautomatisering klaar, bekijk dit circuit in een demonstratievideo aan het einde van het artikel.