Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Lecture du signal PPM du récepteur RC à l'aide d'Arduino

Composants et fournitures

Arduino UNO
× 1

Applications et services en ligne

Arduino IDE

À propos de ce projet

L'émetteur RC est très bien adapté aux projets nécessitant une liaison sans fil car il dispose de liaisons cryptées avec une bonne portée.

Tous les récepteurs RC sont conçus pour entraîner des servomoteurs. il y a donc 3 broches pour chaque canal :masse, Vcc et signal. ici, un type spécial de signal est utilisé. Il envoie des impulsions à un certain intervalle. Lorsque le servo reçoit une impulsion de 1,5 ms, il se règle à 90 degrés et en faisant varier cette valeur de 1 à 2 ms, le servo passe aux valeurs minimale et maximale. (Sur la photo ci-dessus, un récepteur à 6 canaux est montré avec une broche PPM)

Une méthode si simple consiste à mesurer la largeur d'impulsion sur chaque broche et à mapper ces données selon les besoins. mais ici le problème est que :

  • Pour chaque canal du récepteur, nous devons connecter un fil à la broche Arduino. Cela nécessite non seulement beaucoup de connexion, mais consomme également beaucoup de broches sur un Arduino.
  • La plupart des Arduino n'ont que 2 broches d'interruption, donc si nous utilisons plus de 2 canaux, lisez-les pour ajouter un certain délai à notre code, ce qui peut être problématique pour certaines applications.

Pour résoudre ce problème, de nombreux récepteurs sont livrés avec une broche supplémentaire appelée PPM. cette broche PPM transmet les données de tous les canaux en un seul signal.

Comment le signal de broche PPM est-il composé ?

Ce signal est constitué de paquets de données séparés par un espace vide. Ici, l'espace entre les pics représente la valeur du canal. dans ce cas, j'ai utilisé un récepteur 6 canaux donc il y a 7 impulsions.

Ainsi, dans notre code, nous devons d'abord détecter l'espace de séparation, puis commencer à enregistrer les données des impulsions pour chaque canal.

Comme on peut le voir sur la deuxième image,

toutes les données sont séparées avec environ 11 500 microsecondes de temps. plus de 6 valeurs sont pour chaque canal.

Utilisation du code :

Ici lisez-moi() spécifié comme fonction :

a=micros(); c=a-b; b=a; x[i]=c; i=i+1 ; if(i==15){for(int j=0;j<15;j++) {ch1[j]=x[j];} i=0; } } 

cette partie s'exécute sur la broche d'interruption et prend 15 valeurs temporelles et les stocke dans un tableau.

une autre fonction read_rc()

cette partie recherche tout espace supérieur à 10000 microsecondes, dans notre cas, elle détecte l'espace de séparation, et comme elle détecte cet espace, le code passe à la section suivante.

après cet espace, les 6 valeurs suivantes sont pour chaque position de canal, il est stocké dans un tableau nommé ch[ channel no], ici ch[1], ch[2], ch[3], ch[4], ch[5 ], ch[6] représente la valeur de chaque canal.

Code

  • Code pour la lecture du canal du récepteur RC
Code pour la lecture du canal du récepteur RCArduino
unsigned long int a,b,c;int x[15],ch1[15],ch[7],i;//spécifier des tableaux et des variables pour stocker les valeurs void setup() {Serial.begin(9600); pinMode(2, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(2), read_me, FALLING); // activation de l'interruption sur la broche 2}boucle vide() {read_rc();Serial.print(ch[1]);Serial.print("\t");Serial.print(ch[2]);Serial.print ("\t");Serial.print(ch[3]);Serial.print("\t");Serial.print(ch[4]);Serial.print("\t");Serial.print (ch[5]);Serial.print("\t");Serial.print(ch[6]);Serial.print("\n");delay(100);}void read_me() { // ce code lit la valeur du récepteur RC à partir de la broche PPM (broche 2 ou 3) //ce code donne des valeurs de canal de 0 à 1000 valeurs // -:ABHILASH :- //a=micros(); //stocker la valeur de temps a lorsque la valeur de la broche tombec=a-b; //calcul du temps entre deux picsb=a; // x[i]=c; //stockage de la valeur 15 dans arrayi=i+1; if(i==15){for(int j=0;j<15;j++) {ch1[j]=x[j];} i=0;}}//copie stocker toutes les valeurs du tableau temporaire un autre tableau après 15 lectures void read_rc(){int i,j,k=0; for(k=14;k>-1;k--){if(ch1[k]>10000){j=k;}} //détection de l'espace de séparation 10000us dans cet autre tableau for(i=1;i<=6;i++){ch[i]=(ch1[i+j]-1000);}} //attribuer 6 valeurs de canal après l'espace de séparation

Processus de fabrication

  1. Surveillez la température de votre maison à l'aide de votre Raspberry Pi
  2. Décodeur DTMF utilisant uniquement Arduino
  3. Créer un moniteur Ambilight à l'aide d'Arduino
  4. Machine à LÉVITATION ULTRASONIQUE utilisant ARDUINO
  5. Programmation de la série Atmel AT89 via Arduino
  6. Voltmètre DIY utilisant Arduino et Smartphone
  7. Moniteur de fréquence cardiaque utilisant l'IoT
  8. WebServerBlink avec Arduino Uno WiFi
  9. Compteur de voitures utilisant Arduino + Traitement + PHP