- Explication de travail:
- Composants:
- La programmation:
- Conception de circuits et de circuits imprimés avec EasyEDA:
- Calcul et commande d'échantillons de PCB en ligne:
Dans ce projet, nous allons utiliser un microcontrôleur PIC pour contrôler à distance quelques charges CA en utilisant simplement une télécommande IR. Un projet similaire de domotique télécommandé IR a déjà été réalisé avec Arduino également, mais ici nous l'avons conçu sur PCB en utilisant le concepteur et simulateur de PCB en ligne d'EasyEDA, et avons utilisé leurs services de conception de PCB pour commander les cartes PCB comme indiqué dans la section suivante du article.
À la fin de ce projet, vous serez en mesure de basculer (ON / OFF) n'importe quelle charge CA à l'aide d'une télécommande ordinaire dans le confort de votre chaise / lit. Pour rendre ce projet plus intéressant, nous avons également activé une fonction permettant de contrôler la vitesse du ventilateur à l'aide de Triac. Tout cela peut être fait avec de simples clics sur votre télécommande infrarouge. Vous pouvez utiliser n'importe quelle télécommande TV / DVD / MP3 pour ce projet. Les différents signaux IR de la télécommande sont reçus par le microcontrôleur qui commande alors les relais respectifs via un circuit d'attaque de relais. Ces relais sont utilisés pour connecter et déconnecter les charges CA (lumières / ventilateur).
Explication de travail:
Le fonctionnement de ce projet est assez simple à comprendre. Lorsqu'un bouton est enfoncé sur la télécommande IR, elle envoie une séquence de code sous forme d'impulsions codées en utilisant une fréquence de modulation de 38Khz. Ces impulsions sont reçues par le capteur TSOP1738 puis lues par le contrôleur. Le contrôleur décode alors le train reçu des impulsions en une valeur hexadécimale et le compare aux valeurs hexadécimales prédéfinies dans notre programme.
Si une correspondance se produit, le contrôleur effectue une opération relative en déclenchant le relais / triac respectif et le résultat correspondant est également indiqué par les LED intégrées. Ici, dans ce projet, nous avons utilisé 4 ampoules (petites ampoules) de couleurs différentes comme charges d'éclairage et une autre ampoule (ampoule plus grosse) est considérée comme un ventilateur à des fins de démonstration.
Nous avons sélectionné la touche 1 pour basculer le relais1, 2 pour basculer le relais2, 3 pour basculer le relais3, 4 pour basculer le relais4 et Vol + pour augmenter la vitesse du ventilateur et Vol- pour diminuer la vitesse du ventilateur.
Remarque: Ici, nous avons utilisé une ampoule de 100 watts au lieu d'un ventilateur.
Il existe de nombreux types de télécommandes infrarouges disponibles pour différents appareils, mais la plupart d'entre elles fonctionnent autour de la fréquence 38KHz. Ici, dans ce projet, nous contrôlons les appareils ménagers à l'aide d'une télécommande IR TV et pour détecter les signaux IR, nous utilisons un récepteur IR TSOP1738. Ce capteur TSOP1738 peut détecter un signal de fréquence 38Khz. Le fonctionnement de la télécommande IR et du TSOP1738 est couvert en détail dans cet article: Émetteur et récepteur IR
Notre microcontrôleur PIC fonctionne à + 5V et les relais fonctionnent à + 12V, nous utilisons donc un transformateur pour abaisser le 220V AC et le rectifier à l'aide d'un redresseur en pont complet. Cette tension continue redressée est ensuite régulée à + 12V et + 5V en utilisant respectivement les circuits intégrés de régulation 7812 et 7805.
Pour déclencher le relais, nous utilisons des transistors comme le BC547 qui peuvent agir comme un interrupteur électronique pour activer / désactiver les relais en fonction du signal du microcontrôleur PIC.En outre, pour contrôler la vitesse du ventilateur, nous utilisons un TRIAC. TRIAC est un semi-conducteur de puissance capable de contrôler la tension de sortie; cette capacité est utilisée pour contrôler la vitesse du ventilateur.
Nous avons également utilisé un pilote Triac pour contrôler le Triac à l'aide de notre microcontrôleur PIC. Ce pilote est utilisé pour donner une impulsion d'angle de tir au Triac, de sorte que la puissance de sortie puisse être contrôlée. Ici, nous avons utilisé 6 niveaux de contrôle de vitesse. Lorsque le niveau est de 0, le ventilateur est éteint. Lorsque le niveau sera 1, la vitesse sera 1/5 de la pleine vitesse. Lorsque le niveau sera de 2, la vitesse sera de 2 / 5e de la pleine vitesse et respectivement pour les autres. Le niveau actuel de la vitesse peut être surveillé à l'aide de l'affichage à 7 segments intégré.
Le schéma fonctionnel du projet est présenté ci-dessous.
Composants:
Les composants requis pour construire ce projet sont donnés ci-dessous:
- Microcontrôleur PIC18f2520 -1
- TSOP1738 -1
- Télécommande IR TV / DVD -1
- Transistor BC547 -4
- Relais 12 volts -4
- Ampoule avec support -5
- Fils de connexion -
- PCB EasyEda -1
- Écran LCD 16x2
- Alimentation 12v
- Connecteur de borne 2 broches `-8
- Connecteur de borne 3 broches -1
- Transformateur 12-0-12 -1 -
- Régulateur de tension 7805-1
- Régulateur de tension 7812-1
- Condensateur 1000 uf -1
- Condensateur 10 uf -1
- Condensateur 0,1 uf -1
- Condensateur 0.01uf 400V `-1
- 10 km -5
- 1k -5
- 100ohm -7
- Segment de cathode commun -1
- Diode 1n4007 -10
- BT136 triac -1
- Embase mâle / femelle -
- LED -6
- Opto-coupleur moc3021 -1
- Optocoupleur mtc2e ou 4n35 -1
- Cristal 20Mhz -1
- Condensateur 33pf -2
- Diode zener 5.1v -1
- 47 ohms résistance 2 watts -1
Tous ces composants sont couramment utilisés et peuvent être facilement achetés. Cependant, si vous recherchez un meilleur achat en ligne, nous vous recommandons LCSC.
LCSC est une excellente boutique en ligne pour acheter vos composants électroniques pour toutes sortes de projets. Ils comportent environ 25 000 types de composants et la meilleure chose est qu'ils vendent même des articles en petite quantité pour de petits projets et qu'ils ont également une expédition mondiale.
Décodage de la télécommande IR:
Comme dit précédemment, vous pouvez utiliser n'importe quel type de télécommande pour votre projet. Mais nous devons savoir pour quel type de signal est généré cette télécommande particulière. Pour chaque clé individuelle de la télécommande, il y aura une valeur HEX équivalente pour cette clé. En utilisant cette valeur HEX, nous pouvons distinguer chaque clé du côté de notre microcontrôleur. Donc, avant de décider d'utiliser une télécommande, nous devons connaître la valeur HEX des touches prédéfinies dans cette télécommande particulière. Dans ce projet, nous avons utilisé une télécommande NEC. Les valeurs HEX des touches d'une télécommande NEC sont indiquées ci-dessous.
Comme vous pouvez le remarquer, la valeur HEX comporte 7 caractères dont seuls les deux derniers diffèrent, nous ne pouvons donc considérer que les deux derniers chiffres pour distinguer chaque clé.
Schéma:
Le schéma du projet est présenté ci-dessous.
Le schéma ci-dessus a été rendu facile en utilisant l'éditeur de schémas esayEDA car ils fournissent les dispositions de tous les composants utilisés dans ce projet. Il ne nécessite pas non plus d'installation et peut être utilisé en ligne lors de vos déplacements.
Les brochages et les valeurs des composants sont clairement spécifiés dans le schéma ci-dessus. Vous pouvez également télécharger le fichier schématique à partir d'ici.
La programmation:
Le programme de ce projet est réalisé avec MPLABX, le code est également assez simple et facile à comprendre. Le code complet sera donné à la fin de ce tutoriel, quelques autres morceaux importants du programme sont expliqués ci-dessous.
Au début du code, nous devrions inclure les bibliothèques requises, définir les broches et déclarer les variables.
#comprendre
Après cela, nous avons créé une fonction de délai simple en utilisant la boucle «for».
délai vide (int time) {for (int i = 0; i
Après cela, nous avons initialisé la minuterie en utilisant la fonction suivante
vide timer () // 10 -> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; // La source d'horloge de la minuterie provient du Prescaler T0CS = 0; // Le Prescaler obtient l'horloge du FCPU (5MHz) T08BIT = 0; // MODE 16 BITS TMR0IE = 1; // Activer l'interruption TIMER0 PEIE = 1; // Activer l'interruption de périphérique GIE = 1; // Activer les INT globalement TMR0ON = 1; // Maintenant, lancez le chronomètre! }
Maintenant, dans la fonction principale, nous devons donner des directions aux broches sélectionnées et initialiser le temporisateur et l'interruption externe int0 pour détecter le passage à zéro.
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; relais3 = 0; relais4 = 0; rly1LED = 0; rly3LED = 0; rly2LED = 0; rly4LED = 0; fanLED = 0; i = 0; ir = 0; tric = 0; minuteur(); INTEDG0 = 0; // Interruption sur front descendant INT0IE = 1; // Activer l'interruption externe INT0 (RB0) INT0IF = 0; // Efface le bit d'indicateur d'interruption externe INT0 PEIE = 1; // Activer l'interruption de périphérique GIE = 1; // Activer les INT globalement
Maintenant, ici, nous n'utilisons aucun mode d'interruption ou de capture et de comparaison pour détecter le signal IR. Ici, nous venons d'utiliser une broche numérique pour lire les données comme nous lisons un bouton-poussoir. Chaque fois que le signal devient haut ou bas, nous mettons simplement une méthode anti-rebond et exécutons la minuterie. Chaque fois que la broche change son état en un autre, les valeurs de temps seront enregistrées dans un tableau.
La télécommande IR envoie la logique 0 comme 562.5us et la logique 1 comme 2250us. Chaque fois que la minuterie lit environ 562,5us, nous supposons qu'elle est 0 et lorsque la minuterie lit environ 2250us, nous l'assumons comme 1. Ensuite, nous la convertissons en hexadécimal.
Le signal entrant de la télécommande contient 34 bits. Nous stockons tous les octets du tableau puis décodons le dernier octet à utiliser.
tandis que (ir == 1); INT0IE = 0; tandis que (ir == 0); TMR0 = 0; tandis que (ir == 1); i ++; dat = TMR0; if (dat> 5000 && dat <12000) {} else {i = 0; INT0IE = 1; } si (i> = 33) {GIE = 0; retard (50); cmd = 0; pour (j = 26; j <34; j ++) {if (dat> 1000 && dat <2000) cmd << = 1; sinon si (dat> 3500 && dat <4500) {cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
Le morceau de code ci-dessus reçoit et décode le signal IR en utilisant des interruptions de minuterie et stocke la valeur HEX correspondante dans la variable cmd. Nous pouvons maintenant comparer cette valeur HEX (variable cmd) avec nos valeurs HEX prédéfinies et basculer le relais comme indiqué ci-dessous
if (cmd == 0xAF) {relais1 = ~ relais1; rly1LED = ~ rly1LED; } sinon si (cmd == 0x27) {relay2 = ~ relay2; rly2LED = ~ rly2LED; } sinon si (cmd == 0x07) {relay3 = ~ relay3; rly3LED = ~ rly3LED; } sinon si (cmd == 0xCF) {relay4 = ~ relay4; rly4LED = ~ rly4LED; } else if (cmd == 0x5f) {speed ++; if (vitesse> 5) {vitesse = 5; }} else if (cmd == 0x9f) {vitesse--; if (vitesse <= 0) {vitesse = 0; }}
Maintenant, pour savoir à quel stade fonctionne notre ventilateur, nous devons utiliser un affichage à 7 segments. Les lignes suivantes sont utilisées pour indiquer les broches de l'affichage à 7 segments.
if (speed == 5) // désactivé 5x2 = 10ms triger // vitesse 0 {PORTA = 0xC0; // affiche 0 RB6 = 1; fanLED = 0; } else if (speed == 4) // 8 ms trigger // vitesse 1 {PORTA = 0xfc; // affichage de 1 RB6 = 1; fanLED = 1; } else if (vitesse == 3) // Déclenchement 6 ms // vitesse 2 {PORTA = 0xE4; // affichage de 2 RB6 = 0; fanLED = 1; } else if (speed == 2) // Déclenchement 4ms // vitesse 3 {PORTA = 0xF0; // affichage de 3 RB6 = 0; fanLED = 1; } else if (speed == 1) // Déclenchement 2ms // vitesse 4 {PORTA = 0xD9; // affichage de 4 RB6 = 0; fanLED = 1; } else if (speed == 0) // Déclenchement 0ms // vitesse 5 pleine puissance {PORTA = 0xD2; // affichage de 5 RB6 = 0; fanLED = 1; }
La fonction ci-dessous est pour l'interruption externe et le dépassement de temps. Cette fonction est responsable de la détection du passage à zéro et de la conduite du Triac.
void interruption isr () {if (INT0IF) {delay (speed); tric = 1; pour (int t = 0; t <100; t ++); tric = 0; INT0IF = 0; } if (TMR0IF) // Vérifie s'il s'agit de TMR0 Overflow ISR {TMR0IF = 0; }}
Le PCB final pour cette domotique télécommandée IR ressemble à celui ci-dessous:
Conception de circuits et de circuits imprimés avec EasyEDA:
Pour concevoir cette domotique télécommandée, nous avons utilisé EasyEDA, un outil EDA en ligne gratuit permettant de créer des circuits et des PCB de manière transparente. Nous avons précédemment commandé quelques PCB à EasyEDA et utilisons toujours leurs services car nous avons trouvé l'ensemble du processus, du dessin des circuits à la commande des PCB, plus pratique et plus efficace que d'autres fabricants de PCB. EasyEDA propose gratuitement le dessin de circuits, la simulation, la conception de circuits imprimés et propose également un service de circuits imprimés personnalisés de haute qualité mais à bas prix. Consultez ici le tutoriel complet sur l'utilisation d'Easy EDA pour créer des schémas, des mises en page de circuits imprimés, simuler les circuits, etc.
EasyEDA s'améliore de jour en jour; ils ont ajouté de nombreuses nouvelles fonctionnalités et amélioré l'expérience utilisateur globale, ce qui rend EasyEDA plus facile et utilisable pour la conception de circuits. Ils vont bientôt lancer sa version Desktop, qui peut être téléchargée et installée sur votre ordinateur pour une utilisation hors ligne.
Dans EasyEDA, vous pouvez rendre publics vos conceptions de circuits et de circuits imprimés afin que d'autres utilisateurs puissent les copier ou les éditer et en profiter, nous avons également rendu public l'ensemble de nos dispositions de circuits et de circuits imprimés pour cette domotique télécommandée.
Vous trouverez ci-dessous un instantané de la couche supérieure de la disposition du PCB d'EasyEDA, vous pouvez afficher n'importe quelle couche (supérieure, inférieure, Topsilk, Bottomsilk, etc.) du PCB en sélectionnant la couche dans la fenêtre `` Couches ''.
Calcul et commande d'échantillons de PCB en ligne:
Après avoir terminé la conception du PCB, vous pouvez cliquer sur l'icône de la sortie de fabrication , qui vous mènera sur la page de commande de PCB. Ici, vous pouvez visualiser votre PCB dans Gerber Viewer ou télécharger les fichiers Gerber de votre PCB et les envoyer à n'importe quel fabricant, c'est aussi beaucoup plus facile (et moins cher) de le commander directement dans EasyEDA. Ici, vous pouvez sélectionner le nombre de PCB que vous souhaitez commander, le nombre de couches de cuivre dont vous avez besoin, l'épaisseur du PCB, le poids du cuivre et même la couleur du PCB. Après avoir sélectionné toutes les options, cliquez sur «Enregistrer dans le panier» et terminez votre commande, vous recevrez vos PCB en quelques jours.
Vous pouvez directement commander ce PCB ou télécharger le fichier Gerber en utilisant ce lien.
Après quelques jours de commande de PCB, nous avons obtenu les PCB. Les tableaux que nous avons reçus sont indiqués ci-dessous.
Une fois que nous avons reçu les PCB, j'ai monté tous les composants requis sur le PCB, et enfin nous avons notre domotique télécommandée IR prête, vérifiez ce circuit fonctionnant en vidéo de démonstration à la fin de l'article.