Table des matières:

ROBOCAR INFRAROUGE TÉLÉCOMMANDÉ UTILISANT UN MCU AVR (ATMEGA32): 5 étapes
ROBOCAR INFRAROUGE TÉLÉCOMMANDÉ UTILISANT UN MCU AVR (ATMEGA32): 5 étapes

Vidéo: ROBOCAR INFRAROUGE TÉLÉCOMMANDÉ UTILISANT UN MCU AVR (ATMEGA32): 5 étapes

Vidéo: ROBOCAR INFRAROUGE TÉLÉCOMMANDÉ UTILISANT UN MCU AVR (ATMEGA32): 5 étapes
Vidéo: Comment CONSTRUIRE ta VOITURE RC - Servo Moteur (Part. 3) 2024, Juillet
Anonim
ROBOCAR INFRAROUGE TÉLÉCOMMANDÉ UTILISANT UN MCU AVR (ATMEGA32)
ROBOCAR INFRAROUGE TÉLÉCOMMANDÉ UTILISANT UN MCU AVR (ATMEGA32)

Le présent PROJET décrit la conception et la mise en œuvre d'un RoboCar télécommandé par infrarouge (IR) qui peut être utilisé pour diverses applications de contrôle automatisé sans pilote. J'ai conçu RoboCar télécommandé (mouvement gauche-droite/avant-arrière). L'ensemble du système est basé sur un microcontrôleur (Atmega32) qui rend le système de contrôle plus intelligent et facile à modifier pour d'autres applications. Il permet à l'utilisateur de faire fonctionner ou de contrôler un RoboCar et d'actionner l'interrupteur d'alimentation secteur à une distance d'environ 5 mètres.

Mots clés: décodeur IR, microcontrôleur AVR (Atmega32), télécommande TV, communication sans fil

_

Étape 1: Communication IntraRouge

Communication IntraRouge
Communication IntraRouge

Principe de communication infrarouge:

a) Transmission infrarouge

L'émetteur d'une LED IR à l'intérieur de son circuit, qui émet une lumière infrarouge pour chaque impulsion électrique qui lui est donnée. Cette impulsion est générée lorsqu'un bouton de la télécommande est enfoncé, complétant ainsi le circuit, fournissant une polarisation à la LED. La LED lorsqu'elle est polarisée émet une lumière de la longueur d'onde de 940 nm sous forme d'une série d'impulsions, correspondant au bouton enfoncé. Cependant, étant donné que, avec la LED IR, de nombreuses autres sources de lumière infrarouge telles que les êtres humains, les ampoules, le soleil, etc., les informations transmises peuvent être perturbées. Une solution à ce problème est la modulation. Le signal émis est modulé à l'aide d'une fréquence porteuse de 38 KHz (ou toute autre fréquence comprise entre 36 et 46 KHz). La LED IR est amenée à osciller à cette fréquence pendant la durée de l'impulsion. Les informations ou les signaux lumineux sont modulés en largeur d'impulsion et sont contenus dans la fréquence 38 KHz. La transmission infrarouge fait référence à l'énergie dans la région du spectre du rayonnement électromagnétique à des longueurs d'onde plus longues que celles de la lumière visible, mais plus courtes que celles des ondes radio. En conséquence, les fréquences infrarouges sont plus élevées que celles des micro-ondes, mais inférieures à celles de la lumière visible. Les scientifiques divisent le spectre du rayonnement infrarouge (IR) en trois régions. Les longueurs d'onde sont spécifiées en microns (symbolisé µ, où 1 µ = 10-6 mètre) ou en nanomètres (en abrégé nm, où 1 nm = 10-9 mètre = 0,001 5). La bande proche IR contient de l'énergie dans la gamme de longueurs d'onde les plus proches du visible, d'environ 0,750 à 1 300 5 (750 à 1 300 nm). La bande IR intermédiaire (également appelée bande IR moyenne) est constituée d'énergie comprise entre 1.300 et 3.000 5 (1300 à 3000 nm). La bande IR lointaine s'étend de 2.000 à 14.000 5 (3000 nm à 1.4000 x 104nm).

b) Réception IR

Le récepteur se compose d'un photodétecteur qui développe un signal électrique de sortie lorsque la lumière est incidente sur celui-ci. La sortie du détecteur est filtrée à l'aide d'un filtre à bande étroite qui élimine toutes les fréquences inférieures ou supérieures à la fréquence porteuse (38 KHz dans ce cas). La sortie filtrée est ensuite transmise à l'appareil approprié comme un microcontrôleur ou un microprocesseur qui contrôle des appareils comme un PC ou un robot. La sortie des filtres peut également être connectée à l'oscilloscope pour lire les impulsions.

Applications de la RI:

L'infrarouge est utilisé dans une variété d'applications de communication, de surveillance et de contrôle sans fil. Voici quelques exemples:

· Boîtiers télécommandés pour le divertissement à domicile

· Sans fil (réseaux locaux)

· Liens entre les ordinateurs portables et les ordinateurs de bureau

· Modem sans fil

· Détecteurs d'intrusion

· Détecteurs de mouvement

· Capteurs d'incendie

· Systèmes de vision nocturne

· Matériel de diagnostic médical

· Systèmes de guidage de missiles

· Dispositifs de surveillance géologique

La transmission de données IR d'un appareil à un autre est parfois appelée transmission.

Étape 2: Capteur IR & Protocole NEC Fromat

Capteur IR & Protocole NEC Fromat
Capteur IR & Protocole NEC Fromat
Capteur IR & Protocole NEC Fromat
Capteur IR & Protocole NEC Fromat
Capteur IR & Protocole NEC Fromat
Capteur IR & Protocole NEC Fromat
Capteur IR & Protocole NEC Fromat
Capteur IR & Protocole NEC Fromat

Capteurs infrarouges (Fig1)

TSOP1738, SFH-5110-38 (38 kHz)

Caractéristiques des capteurs TSOP:

  • Le préamplificateur et le photodétecteur sont tous deux dans un seul boîtier
  • Filtre interne pour fréquence PCM
  • Blindage amélioré contre les perturbations du champ électrique
  • Compatibilité TTL et CMOS
  • Sortie active faible Faible consommation d'énergie
  • Haute immunité contre la lumière ambiante
  • Transmission continue des données possible

Protocole NEC:

Le protocole de transmission NEC IR utilise un codage à distance d'impulsion des bits du message. Chaque salve d'impulsions a une longueur de 562,5 µs, à une fréquence porteuse de 38 kHz (26,3 µs). Les bits logiques sont transmis comme suit (Fig2):

  • '0' logique - une rafale d'impulsions de 562,5 µs suivie d'un espace de 562,5 µs, avec un temps de transmission total de 1,125 ms
  • '1' logique - une rafale d'impulsions de 562,5 µs suivie d'un espace de 1,6875 ms, avec un temps de transmission total de 2,25 ms

L'impulsion porteuse se compose de 21 cycles à 38 kHz. Les impulsions ont généralement un rapport marque/espace de 1:4, pour réduire la consommation de courant:

(Fig3)

Chaque séquence de code commence par une impulsion de 9 ms, connue sous le nom d'impulsion AGC. Ceci est suivi d'un silence de 4,5 ms:

(Fig4)

Les données sont alors constituées de 32 bits, une adresse de 16 bits suivie d'une commande de 16 bits, affichées dans l'ordre dans lequel elles sont transmises (de gauche à droite):

(Fig5)

Les quatre octets de bits de données sont chacun envoyés le bit le moins significatif en premier. La figure 1 illustre le format d'une trame de transmission NEC IR, pour une adresse de 00h(00000000b) et une commande de ADh (10101101b).

Un total de 67,5 ms est nécessaire pour transmettre une trame de message. Il lui faut 27ms pour transmettre les 16 bits d'adresse (adresse + inverse) et les 16 bits de commande (commande + inverse).

(Fig6)

Temps nécessaire pour transmettre la trame:

16 bits pour l'adresse (adresse + inverse) nécessitent 27ms pour transmettre le temps. et les 16 bits pour la commande (commande + inverse) nécessitent également 27ms pour transmettre le temps. car (adresse + adresse inverse) ou (commande+commande inverse) contiendra toujours 8 '0's et 8 '1's donc (8 * 1,125ms) + (8 * 2,25ms) == 27 ms. selon ce temps total requis pour transmettre la trame est (9ms +4,5ms +27ms+27ms) = 67,5 ms.

CODES DE RÉPÉTITION: si la touche de la télécommande est maintenue enfoncée, un code de répétition sera émis, généralement environ 40 ms après la rafale d'impulsions qui a signifié la fin du message. Un code de répétition continuera à être envoyé à intervalles de 108 ms, jusqu'à ce que la touche soit finalement relâchée. Le code de répétition se compose des éléments suivants, dans l'ordre:

  • une salve d'impulsions de 9 ms
  • un espace de 2,25 ms
  • une salve d'impulsions de 562,5 µs pour marquer la fin de l'espace (et donc la fin du code de répétition transmis).

(Fig7)

Calcul du délai (1 ms):

Fréquence d'horloge=11.0592 Mhz

Cycle de la machine = 12

Délai=1ms

TimerValue= 65536 - ((Delay * ClockFreq)/Machine Cycle)=65536-((1ms * 11.0592Mhz)/12)

= 65536 - 921 = 0xFC67

Étape 3: Contrôle du moteur à courant continu à l'aide du L293D

Contrôle de moteur à courant continu à l'aide de L293D
Contrôle de moteur à courant continu à l'aide de L293D

Docteur moteur

Un moteur à courant continu convertit l'énergie électrique en énergie mécanique qui peut être utilisée pour effectuer de nombreux travaux utiles. Il peut produire un mouvement mécanique comme Go Forward/Backword de mon RoboCar. Les moteurs à courant continu sont disponibles en différentes puissances telles que 6V et 12V. Il a deux fils ou broches. On peut inverser le sens de rotation en inversant la polarité d'entrée.

Ici, nous préférons le L293D car une valeur nominale de 600 mA est bonne pour piloter de petits moteurs à courant continu et des diodes de protection sont incluses dans le circuit intégré lui-même. La description de chaque broche est la suivante: Broches d'activation: il s'agit de la broche no. 1 et n° de broche. 9. N° de broche. 1 est utilisé pour activer les pilotes Half-H 1 et 2. (Pont en H sur le côté gauche). N° de broche 9 est utilisé pour activer les pilotes de pont en H 3 et 4. (pont en H sur le côté droit).

Le concept est simple, si vous souhaitez utiliser un pont en H particulier, vous devez donner une logique élevée aux broches d'activation correspondantes ainsi qu'à l'alimentation du circuit intégré. Cette broche peut également être utilisée pour contrôler la vitesse du moteur en utilisant la technique PWM. VCC1 (Broche 16): Broche d'alimentation. Connectez-le à l'alimentation 5V. VCC2 (Broche 8): Alimentation du moteur. Appliquez-lui une tension +ve selon la puissance nominale du moteur. Si vous souhaitez piloter votre moteur en 12V, appliquez 12V sur cette broche.

Il est également possible de piloter le moteur directement sur une batterie, autre que celle utilisée pour alimenter le circuit, il suffit de connecter la borne + ve de cette batterie à la broche VCC2 et de rendre GND commun aux deux batteries. (La tension MAX sur cette broche est de 36 V selon sa fiche technique). GND (broches 4, 5, 12, 13): connectez-les au GND commun du circuit. Entrées (broches 2, 7, 10, 15):

Ce sont des broches d'entrée à travers lesquelles les signaux de commande sont fournis par des microcontrôleurs ou d'autres circuits/CI. Par exemple, si sur la broche 2 (entrée du pilote H 1ère moitié) nous donnons Logic 1 (5V), nous obtiendrons une tension égale à VCC2 sur la broche de sortie correspondante du pilote H 1ère moitié, c'est-à-dire la broche no. 3. De même pour Logic 0 (0V) sur la broche 2, 0V sur la broche 3 apparaît. Sorties (broches 3, 6, 11, 14): broches de sortie. Selon le signal d'entrée, le signal de sortie arrive.

Mouvements moteurs A B

-----------------------------------------------------------------------------------------

……………Arrêt: Bas: Bas

……Sens horaire: Bas: Haut

Dans le sens inverse des aiguilles d'une montre: Haut: Bas

……………. Arrêt: Haut: Haut

Étape 4: Schémas de circuit pour le pilote de moteur et le capteur IR

Schémas de circuit pour le pilote de moteur et le capteur IR
Schémas de circuit pour le pilote de moteur et le capteur IR
Schémas de circuit pour le pilote de moteur et le capteur IR
Schémas de circuit pour le pilote de moteur et le capteur IR
Schémas de circuit pour le pilote de moteur et le capteur IR
Schémas de circuit pour le pilote de moteur et le capteur IR

L'ATmega32 est un microcontrôleur CMOS 8 bits basse consommation basé sur l'architecture RISC améliorée AVR. En exécutant des instructions puissantes en un seul cycle d'horloge, l'ATmega32 atteint des débits approchant 1 MIPS par MHz, ce qui permet au concepteur du système d'optimiser la consommation d'énergie par rapport à la vitesse de traitement.

Le noyau AVR combine un riche jeu d'instructions avec 32 registres de travail à usage général. Tous les 32 registres sont directement connectés à l'unité logique arithmétique (ALU), permettant d'accéder à deux registres indépendants en une seule instruction exécutée en un cycle d'horloge. L'architecture résultante est plus efficace en termes de code tout en atteignant des débits jusqu'à dix fois plus rapides que les microcontrôleurs CISC conventionnels.

L'ATmega32 offre les fonctionnalités suivantes:

  • 32 Ko de mémoire de programme flash programmable dans le système avec des capacités de lecture-écriture,
  • EEPROM 1024 octets, SRAM 2K octets,
  • 32 lignes d'E/S à usage général,
  • 32 registres de travail à usage général,
  • une interface JTAG pour Boundaryscan,
  • Prise en charge et programmation du débogage sur puce, trois temporisateurs/compteurs flexibles avec modes de comparaison, des interruptions internes et externes, un USART programmable en série, une interface série à deux fils orientée octet, une interface série à 8 canaux,
  • CAN 10 bits avec étage d'entrée différentiel en option avec gain programmable (package TQFP uniquement),
  • une minuterie de chien de garde programmable avec oscillateur interne,
  • un port série SPI, et
  • six modes d'économie d'énergie sélectionnables par logiciel.

    • Le mode Idle arrête le CPU tout en permettant l'USART,
    • Interface à deux fils, convertisseur A/N,
    • SRAM,
    • Minuterie/Compteurs,
    • port SPI, et
    • système d'interruption pour continuer à fonctionner.
    • Le mode de mise hors tension enregistre le contenu du registre mais gèle l'oscillateur, désactivant toutes les autres fonctions de la puce jusqu'à la prochaine interruption externe ou réinitialisation matérielle.
    • En mode d'économie d'énergie, la minuterie asynchrone continue de fonctionner, permettant à l'utilisateur de maintenir une base de minuterie pendant que le reste de l'appareil est en veille.
    • Le mode de réduction du bruit ADC arrête le CPU et tous les modules d'E/S à l'exception de la minuterie asynchrone et de l'ADC, pour minimiser le bruit de commutation lors des conversions ADC
    • En mode veille, l'oscillateur à cristal/résonateur fonctionne pendant que le reste de l'appareil est en veille. Cela permet un démarrage très rapide combiné à une faible consommation d'énergie.
    • En mode Veille étendue, l'oscillateur principal et le temporisateur asynchrone continuent de fonctionner.

Tous les circuits associés sont donnés ici et le circuit principal (atmega32) est également donné.

Étape 5: Programmes Avr

Programmes Avr
Programmes Avr
Programmes Avr
Programmes Avr

1. Pour « capteur à distance »:

#include #include

#include "télécommande.h"

//Globals volatile unsigned int Time; //Minuterie principale, stocke l'heure en 10us, //Mise à jour par ISR(TIMER0_COMP) caractère volatil non signé BitNo; //Pos of next BIT volatile unsigned char ByteNo; //Pos de l'octet courant

caractère volatile non signé IrData[4]; //Les quatre octets de données du paquet Ir //Adresse de 2 octets Données volatiles non signées IrCmdQ[QMAX]; //Commande finale reçue (tampon)

caractère volatile non signé PrevCmd; //Utilisé pour la répétition

//Variables utilisées pour démarrer la répétition uniquement après avoir appuyé sur une touche pendant un certain temps

caractère volatile non signé Répéter; //1=yes 0=no volatil unsigned char RCount; //Répéter le décompte

caractère volatile QFront=-1, QEnd=-1;

État de caractère volatile non signé; //Etat du récepteur

caractère volatile non signé Edge; //Front d'interruption [RISING=1 OU FALLING=0]

volatil non signé int stop;

/****************************************************** *********************************************/ /* FONCTIONS COMMENCE * / /************************************************ **************************************************/

void RemoteInit() {

car je; pour(i=0;i<4;i++) IrData=0;

arrêt=0; État=IR_VALIDATE_LEAD_HIGH; Bord=0; Répéter=0;

//Configuration du temporisateur1 //------------ TCCR0|=((1<

TIMSK|=(1<

OCR0=TIMER_COMP_VAL; //Définir la valeur de comparaison

unsigned char GetRemoteCmd(char wait) { unsigned char cmd;

if(attendre) while(QFront==-1); else if(QFront==-1) return (RC_NONE);

cmd=IrCmdQ[QFront];

if(QFront==QEnd) QFront=QEnd=-1; else { if(QFront==(QMAX-1)) QFront=0; sinon QFront++; }

retour cmd;

}

2. principal ():

int main(void){

uint8_t cmd=0; DDRB=0x08;

DDRD=0x80;

DDRC=0x0f; PORTC=0x00;

while (1) // Boucle infinie vers le capteur IR actif {

cmd=GetRemoteCmd(1);

commutateur (cmd) {

case xx: { //BOT avance //Ch+ btn forwardmotor();

Pause; // Les deux moteurs en marche avant

}

………………………………………………….

………………………………………………….

………………………………………………….

par défaut: PORTC=0x00; pause; // Les moteurs gauche et droit s'arrêtent }

}

}/*Fin du principal*/

……………………………………………………………………………………………………………………

// C'est un modèle basique, mais je peux l'utiliser en mode PWM.

//…………………………………………….. S'amuser……………………………………………………//

Conseillé: