Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

PPM-signaal van de RC-ontvanger lezen met Arduino

Componenten en benodigdheden

Arduino UNO
× 1

Apps en online services

Arduino IDE

Over dit project

RC-zender is zeer geschikt voor projecten waarvoor een draadloze verbinding vereist is, omdat deze versleutelde verbindingen met een goed bereik heeft.

Alle RC-ontvangers zijn gemaakt om servomotoren aan te drijven. er zijn dus 3 pinnen voor elk kanaal:aarde, Vcc en signaal. hier wordt een speciaal soort signaal gebruikt. Het zendt pulsen met een bepaald interval. Wanneer de servo een puls van 1,5 ms ontvangt, wordt deze ingesteld op 90 graden en door deze waarde te variëren van 1-2 ms, gaat de servo naar de minimale en maximale waarde. (In de bovenstaande foto wordt een 6-kanaals ontvanger weergegeven met PPM-pin)

De eenvoudige methode is om de pulsbreedte op elke pin te meten en die gegevens volgens de vereisten in kaart te brengen. maar hier is het probleem dat:

  • Voor elk kanaal van de ontvanger moeten we een draad aansluiten op de Arduino-pin. Dit vereist niet alleen veel verbinding, maar verbruikt ook veel pinnen op een Arduino.
  • De meeste Arduino hebben slechts 2 interrupt-pins, dus als we meer dan 2 kanalen gebruiken, lees deze dan om wat vertraging aan onze code toe te voegen, wat voor sommige toepassingen problematisch kan zijn.

Om dit probleem op te lossen worden veel ontvangers geleverd met een extra pin genaamd PPM. deze PPM-pin verzendt gegevens van alle kanalen in een enkel signaal.

Hoe is het PPM-pinsignaal samengesteld?

Dit signaal bestaat uit datapakketten gescheiden door spatie. Hier vertegenwoordigt de ruimte tussen de pieken de waarde van het kanaal. in dit geval heb ik een 6-kanaals ontvanger gebruikt, dus er zijn 7 pulsen.

Dus in onze code moeten we eerst de scheidingsruimte detecteren en vervolgens beginnen met het opnemen van gegevens van de pulsen voor elk kanaal.

Zoals te zien is in de tweede afbeelding,

alle gegevens worden gescheiden met ongeveer 11500 microseconden tijd. dan 6 waarden zijn voor elk kanaal.

De code gebruiken:

Hier read_me() gespecificeerd als functie:

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

dit deel draait op een interrupt-pin en neemt 15 tijdwaarden en slaat het op in een array.

een andere functie read_rc()

dit deel zoekt naar elke spatie die groter is dan 10000 microseconde, in ons geval detecteert het de scheidingsruimte en als het die spatie detecteert, gaat het naar de volgende sectie.

na deze spatie zijn de volgende 6 waarden voor elke kanaalpositie, deze wordt opgeslagen in de array met de naam ch[ channel no], hier ch[1], ch[2], ch[3], ch[4], ch[5 ], ch[6] vertegenwoordigt de waarde van elk kanaal.

Code

  • Code voor gelezen kanaal RC-ontvanger
Code voor RC-ontvangerkanaal gelezenArduino
unsigned long int a,b,c;int x[15],ch1[15],ch[7],i;//arrays en variabelen specificeren om waarden op te slaan void setup() {Serial.begin(9600); pinMode (2, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(2), read_me, FALLING); // interrupt inschakelen op pin 2}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() { // deze code leest de waarde van de RC-ontvanger van de PPM-pin (Pin 2 of 3) //deze code geeft kanaalwaarden van 0-1000 waarden // -:ABHILASH:- //a=micros(); // bewaar tijdwaarde a wanneer pinwaarde fallc =a-b; // het berekenen van de tijd tussen twee piekenb=a; // x[i]=c; // 15 waarde opslaan in arrayi=i+1; if(i==15){for(int j=0;j<15;j++) {ch1[j]=x[j];} i=0;}}//kopieer alle waarden van tijdelijke array een andere array na 15 lezen ongeldig read_rc(){int i,j,k=0; for(k=14;k>-1;k--){if(ch1[k]>10000){j=k;}} //detectie van scheidingsruimte 10000us in die andere array for(i=1;i<=6;i++){ch[i]=(ch1[i+j]-1000);}} // 6 kanaalwaarden toewijzen na scheidingsruimte

Productieproces

  1. Bewaak je huistemperatuur met je Raspberry Pi
  2. DTMF-decoder met alleen Arduino
  3. Maak Monitor Ambilight met Arduino
  4. ULTRASONE LEVITATION-machine die ARDUINO gebruikt
  5. Atmel AT89-serie programmeren via Arduino
  6. DIY voltmeter met Arduino en smartphone
  7. Hartslagmeter met IoT
  8. WebServerBlink met Arduino Uno WiFi
  9. Autoteller met Arduino + Processing + PHP
  10. Hartslagindicator met ECG
  11. Geautomatiseerd Dino-spel met arduino