Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Lesen des RC-Empfänger-PPM-Signals mit Arduino

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

RC-Sender ist sehr gut geeignet für Projekte, die eine drahtlose Verbindung erfordern, da er verschlüsselte Verbindungen mit einer guten Reichweite hat.

Alle RC-Empfänger sind für den Antrieb von Servomotoren ausgelegt. Es gibt also 3 Pins für jeden Kanal:Masse, Vcc und Signal. hier wird eine besondere Art von Signal verwendet. Es sendet Impulse in einem bestimmten Intervall. Wenn das Servo einen 1,5-ms-Impuls empfängt, wird es auf 90 Grad eingestellt und durch Variieren dieses Wertes von 1-2 ms geht das Servo auf den minimalen und maximalen Wert. (Auf dem obigen Foto ist ein 6-Kanal-Empfänger mit PPM-Pin dargestellt)

Die einfache Methode besteht darin, die Pulsbreite an jedem Pin zu messen und diese Daten nach Bedarf abzubilden. aber hier ist das Problem:

  • Für jeden Kanal des Empfängers müssen wir ein Kabel mit dem Arduino-Pin verbinden. Dies erfordert nicht nur viele Verbindungen, sondern verbraucht auch viele Pins auf einem Arduino.
  • Die meisten Arduinos haben nur 2 Interrupt-Pins. Wenn wir also mehr als 2 Kanäle verwenden, lesen Sie sie, um unserem Code eine Verzögerung hinzuzufügen, was für einige Anwendungen problematisch sein kann.

Um dieses Problem zu lösen, werden viele Empfänger mit einem zusätzlichen Pin namens PPM geliefert. Dieser PPM-Pin überträgt Daten aller Kanäle in einem einzigen Signal.

Wie setzt sich das PPM-Pin-Signal zusammen?

Dieses Signal besteht aus durch Leerzeichen getrennten Datenpaketen. Hier repräsentiert der Abstand zwischen den Spitzen den Wert des Kanals. In diesem Fall habe ich einen 6-Kanal-Empfänger verwendet, sodass es 7 Impulse gibt.

In unserem Code müssen wir also zuerst den Trennungsraum erkennen und dann mit der Aufzeichnung von Daten aus den Impulsen für jeden Kanal beginnen.

Wie im zweiten Bild zu sehen ist,

alle Daten werden mit ca. 11500 Mikrosekunden Zeit getrennt. als 6 Werte sind für jeden Kanal.

Verwenden des Codes:

Hier read_me() als Funktion angegeben:

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; } } 

Dieser Teil läuft auf dem Interrupt-Pin und nimmt 15 Zeitwerte und speichert sie in einem Array.

eine andere Funktion read_rc()

Dieser Teil sucht nach jedem Leerzeichen, das höher als 10000 Mikrosekunden ist. In unserem Fall erkennt es Trennungsraum und bewegt sich, wenn er diesen Leerzeichen-Code erkennt, zum nächsten Abschnitt.

nach diesem Leerzeichen sind die nächsten 6 Werte für jede Kanalposition, die im Array namens ch[ Kanalnummer] gespeichert ist, hier ch[1], ch[2], ch[3], ch[4], ch[5 ], ch[6] stellt den Wert jedes Kanals dar.

Code

  • Code für das Lesen des RC-Empfängerkanals
Code für RC-Empfängerkanal lesenArduino
unsigned long int a,b,c;int x[15],ch1[15],ch[7],i;//angeben von Arrays und Variablen zum Speichern von Werten void setup() {Serial.begin(9600); pinMode(2, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(2), read_me, FALLING); // Unterbrechung an Pin 2 aktivieren}void loop() {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() { // Dieser Code liest den Wert vom RC-Empfänger vom PPM-Pin (Pin 2 oder 3) // Dieser Code gibt Kanalwerte von 0-1000 Werten // -:ABHILASH:- // a =micros (); // Zeitwert a speichern, wenn der Pin-Wert fälltc =a-b; // Berechnung der Zeit zwischen zwei Peaksb =a; // x[i]=c; //Speichern von 15 Werten in Arrayi=i+1; if(i==15){for(int j=0;j<15;j++) {ch1[j]=x[j];} i=0;}}//kopiere alle Werte aus dem temporären Array ein anderes Array nach 15 Lesen void read_rc(){int i,j,k=0; for(k=14;k>-1;k--){if(ch1[k]>10000){j=k;}} //Erkennen des Trennraums 10000us in diesem anderen Array for(i=1;i<=6;i++){ch[i]=(ch1[i+j]-1000);}} // 6 Kanalwerte nach dem Trennzeichen zuweisen

Herstellungsprozess

  1. Überwachen Sie Ihre Haustemperatur mit Ihrem Raspberry Pi
  2. DTMF-Decoder, der nur Arduino verwendet
  3. Erstellen von Monitor-Ambilight mit Arduino
  4. ULTRASCHALLLEVITATION-Maschine mit ARDUINO
  5. Programmieren der Atmel AT89-Serie über Arduino
  6. DIY-Voltmeter mit Arduino und Smartphone
  7. Herzfrequenzmesser mit IoT
  8. WebServerBlink mit Arduino Uno WiFi
  9. Autozähler mit Arduino + Processing + PHP
  10. Herzschlaganzeige mit EKG