Arduino Baca Signal PPM Remote RC Receiver

Dalam tutorial ini, MatGyver akan tunjukkan Step-by-Step bagaimana menggunakan Arduino UNO untuk membaca Signal PPM dari Radio RC jenis FlySky.

RADIO SISTEM FLYSKY FS-I6

Dalam Tutorial ini, kami akan gunakan Model Transmitter FS-i6 (atau FS-i10) dan Receiver FS-iA6B.

Penting untuk menggunakan Receiver Model FSiA6B kerana ia mempunyai Fungsi-Signal-Protocol PPM , yang akan kita gunakan untuk mendapatkan bacaan signalnya melalui Arduino.

Model lain juga boleh digunakan, selagi Receivernya mempunyai fungsi PPM.

Seperti gambar di atas, Model Receiver FS-iA6 TIDAK mempunyai Fungsi- Protocol PPM.

WIRING CONNECTION

Mungkin masih ramai yang tidak tahu berkenaan komponen-komponen Chip di atas sebuah Board Arduino.

Channel 1 dari Receiver berkongsi dengan Port PPM.
Jadi mengikut setup wiring di atas, Pin Tengah kita sambung pada punca 5V Arduino untuk memberi Power kepada receiver, Ground pada Ground Arduino, dan Pin Signal CH1, kita sambungkan pada Pin Digital 3 Arduino UNO.

LIBRARY PPM RECEIVER & LIBRARY INTERRUPT

Terdapat 2 Library yang perlu kita download untuk membaca signal PPM pada Arduino.
(Klik untuk download Library)

Library PPMReader

Library Interrupt Handler

2 Library ini berasal dari GITHUB dan dibuat oleh Nikkilae. Boleh rujuk source library asal dari link GitHub di bawah:

https://github.com/Nikkilae/PPM-reader

Kami terpaksa buat beberapa perubahan MINOR pada Library Nikkilae, supaya ia lebih Beginner-Friendly. Library yang asal, terdapat kekeliruan dari segi kaedah install, dan tambahan pula tiada Example-Coding.

Kami telah menambahkan example coding yang Beginner-Friendly.

Disebabkan Library ini dalam bentuk file .zip , gunakan fungsi Add .ZIP Library dalam Arduino IDE, untuk install/tambahkan library ini dalam computer.

PERSEDIAAN UNTUK KE CODING ARDUINO

Project ini, kami TIDAK sarankan untuk mereka yang TIADa langsung Asas atau Fundamental Arduino, untuk terus lompat buat project ini.

Ini kerana, dalam menggunakan Arduino, kita perlu tahu dahulu Fundamental Hardware dan juga Fundamental C++ Coding supaya kita dapat kenal-pasti sebarang masalah atau error-error basic yang bakal terjadi ketika membuat project ini.

CODING BASIC MEMBACA PPM

Coding basic bagi menggunakan Library ini ada dalam bahagian example Library.
Hanya perlu navigasi ke:

File > Examples > PPMReader > PPM_Receiver_6CH

Ataupun, anda boleh terus Copy dan Paste coding di bawah ini, hanya selepas Library telah di-Install.

#include <PPMReader.h>

// Initialize a PPMReader on digital pin 3 with 6 expected channels.
int interruptPin = 3; //untuk Arduino UNO/NANO gunakan pin 3
int channelAmount = 6;
PPMReader ppm(interruptPin, channelAmount); //PPM Library Object


//VARIABLE SIMPAN DATA CHANNEL
int CH1 = 1500;
int CH2 = 1500;
int CH3 = 1500;
int CH4 = 1500;
int CH5 = 1500;
int CH6 = 1500;

void setup() {
  //MULAKAN SERIAL MONITOR
  Serial.begin(9600);
    
}//END VOID SETUP

void loop() {
 
  /***DAPATKAN MAKLUMAT PPM UNTUK SETIAP CHANNEL***/
  CH1 = ppm.latestValidChannelValue(1, 0);
  CH2 = ppm.latestValidChannelValue(2, 0);
  CH3 = ppm.latestValidChannelValue(3, 0);
  CH4 = ppm.latestValidChannelValue(4, 0);
  CH5 = ppm.latestValidChannelValue(5, 0);
  CH6 = ppm.latestValidChannelValue(6, 0);
  /***DAPATKAN MAKLUMAT PPM UNTUK SETIAP CHANNEL***/

  //LAKUKAN SEBARANG AKTIVITI PROJECT SELEPAS DATA CHANNEL DITERIMA
  //>Code di sini
  //>Code di sini
  //>Code di sini
  //>Code di sini
  
  
  //SERIAL MONITOR/PRINT SEMUA MAKLUMAT CHANNEL
  //Serial Print sebarang aktiviti selepas semua pemprosesan selesai
  Serial.print("CH1:");
  Serial.print(CH1);
  Serial.print(" CH2:");
  Serial.print(CH2);
  Serial.print(" CH3:");
  Serial.print(CH3);
  Serial.print(" CH4:");
  Serial.print(CH4);
  Serial.print(" CH5:");
  Serial.print(CH5);
  Serial.print(" CH6:");
  Serial.print(CH6);
  Serial.println();
}//END VOID LOOP

Selepas Coding telah diUpload,
nyalakan Transmitter dan buka Serial Monitor.

Serial Monitor patut menunjukkan bacaan Signal-PWM untuk setiap channel RC dari CH1 sehingga CH6.

CODING UNTUK AKTIFKAN RELAY

Dalam aktiviti ini, 2 relay disambungkan pada Digital Pin 4 dan Digital Pin 5 Arduino.

#include <PPMReader.h>

// Initialize a PPMReader on digital pin 3 with 6 expected channels.
int interruptPin = 3; //untuk Arduino UNO/NANO gunakan pin 3
int channelAmount = 6;
PPMReader ppm(interruptPin, channelAmount); //PPM Library Object


//VARIABLE SIMPAN DATA CHANNEL
int CH1 = 1500;
int CH2 = 1500;
int CH3 = 1500;
int CH4 = 1500;
int CH5 = 1500;
int CH6 = 1500;

void setup() {
  //MULAKAN SERIAL MONITOR
  Serial.begin(9600);

  //DECLARE PIN RELAY
  digitalWrite(4, HIGH); //OFFKAN RELAY
  digitalWrite(5, HIGH); //OFFKAN RELAY
  
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);

    
}//END VOID SETUP

void loop() {
 
  /***DAPATKAN MAKLUMAT PPM UNTUK SETIAP CHANNEL***/
  CH1 = ppm.latestValidChannelValue(1, 0);
  CH2 = ppm.latestValidChannelValue(2, 0);
  CH3 = ppm.latestValidChannelValue(3, 0);
  CH4 = ppm.latestValidChannelValue(4, 0);
  CH5 = ppm.latestValidChannelValue(5, 0);
  CH6 = ppm.latestValidChannelValue(6, 0);
  /***DAPATKAN MAKLUMAT PPM UNTUK SETIAP CHANNEL***/

  //LAKUKAN SEBARANG AKTIVITI PROJECT SELEPAS DATA CHANNEL DITERIMA
  //>Code di sini
  //>Code di sini
  //RELAY 1 PADA PIN 4
  if(CH5 < 1400){
    digitalWrite(4, LOW); //ONKAN RELAY
  }
  if(CH5 > 1600){
    digitalWrite(4, HIGH); //OFFKAN RELAY
  }

  //RELAY 2 PADA PIN 5
  if(CH6 < 1400){
    digitalWrite(5, LOW); //ONKAN RELAY
  }
  if(CH6 > 1600){
    digitalWrite(5, HIGH); //OFFKAN RELAY
  }
  
  
  //SERIAL MONITOR/PRINT SEMUA MAKLUMAT CHANNEL
  //Serial Print sebarang aktiviti selepas semua pemprosesan selesai
  Serial.print("CH1:");
  Serial.print(CH1);
  Serial.print(" CH2:");
  Serial.print(CH2);
  Serial.print(" CH3:");
  Serial.print(CH3);
  Serial.print(" CH4:");
  Serial.print(CH4);
  Serial.print(" CH5:");
  Serial.print(CH5);
  Serial.print(" CH6:");
  Serial.print(CH6);
  Serial.println();
}//END VOID LOOP

CODING UNTUK GERAKKAN DC MOTOR LAIN DENGAN CONTROLLER

Komponen untuk bahagian ini adalah:

  • DC Motor
  • L298N Motor Controller
  • Battery 7V atau 12V
  • Arduino UNO
  • beberapa Jumper Cable

Pastikan Connection-Wiring dibuat mengikut diagram di bawah.

Untuk sesiapa yang belum mempunyai pengalaman mengawal DC Motor dengan Arduino, kami sarankan anda baca dan buat tutorial di bawah ini dahulu, sebelum mencuba untuk gandingkan dengan Remote Flysky.

Coding ini, akan mengawal Forward dan Reverse DC Motor, termasuk mengawal KADAR-KELAJUAN bahagian reverse serta bahagian forward.

#include <PPMReader.h>

// Initialize a PPMReader on digital pin 3 with 6 expected channels.
int interruptPin = 3; //untuk Arduino UNO/NANO gunakan pin 3
int channelAmount = 6;
PPMReader ppm(interruptPin, channelAmount); //PPM Library Object


//VARIABLE SIMPAN DATA CHANNEL
int CH1 = 1500;
int CH2 = 1500;
int CH3 = 1500;
int CH4 = 1500;
int CH5 = 1500;
int CH6 = 1500;

//VARIABLE MOTOR CONTROLLER
#define ENA 6
#define IN1 5
#define IN2 4

int MotorPWM;

void setup() {
  //MULAKAN SERIAL MONITOR
  Serial.begin(9600);

  //OFFKAN SEMUA KAWALAN MOTOR
  digitalWrite(ENA, LOW); //OFFKAN CONTROLLER
  digitalWrite(IN1, LOW); //OFFKAN CONTROLLER
  digitalWrite(IN2, LOW); //OFFKAN CONTROLLER

  //DECLARE PIN MOTOR CONTROLLER
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
 
}//END VOID SETUP

void loop() {
 
  /***DAPATKAN MAKLUMAT PPM UNTUK SETIAP CHANNEL***/
  CH1 = ppm.latestValidChannelValue(1, 0);
  CH2 = ppm.latestValidChannelValue(2, 0);
  CH3 = ppm.latestValidChannelValue(3, 0);
  CH4 = ppm.latestValidChannelValue(4, 0);
  CH5 = ppm.latestValidChannelValue(5, 0);
  CH6 = ppm.latestValidChannelValue(6, 0);
  /***DAPATKAN MAKLUMAT PPM UNTUK SETIAP CHANNEL***/

  //LAKUKAN SEBARANG AKTIVITI PROJECT SELEPAS DATA CHANNEL DITERIMA
  //>Code di sini
  //>Code di sini

  if(CH2 > 1550){
    MotorPWM = map(CH2, 1550,2000,0,255);
    forward();
  }
  if(CH2 < 1450){
    MotorPWM = map(CH2, 1000,1450,255,0);
    reverse();
  }
  if(CH2 > 1450 && CH2 < 1550){
    brake();
  }
  
  //SERIAL MONITOR/PRINT SEMUA MAKLUMAT CHANNEL
  //Serial Print sebarang aktiviti selepas semua pemprosesan selesai
  Serial.print("CH1:");
  Serial.print(CH1);
  Serial.print(" CH2:");
  Serial.print(CH2);
  Serial.print(" CH3:");
  Serial.print(CH3);
  Serial.print(" CH4:");
  Serial.print(CH4);
  Serial.print(" CH5:");
  Serial.print(CH5);
  Serial.print(" CH6:");
  Serial.print(CH6);
  Serial.println();
}//END VOID LOOP

void forward(){
  analogWrite(ENA, MotorPWM); //OFFKAN CONTROLLER
  digitalWrite(IN1, LOW); //OFFKAN CONTROLLER
  digitalWrite(IN2, HIGH); //OFFKAN CONTROLLER

}//END FORWARD

void reverse(){
  analogWrite(ENA, MotorPWM); //OFFKAN CONTROLLER
  digitalWrite(IN1, HIGH); //OFFKAN CONTROLLER
  digitalWrite(IN2, LOW); //OFFKAN CONTROLLER

}//END FORWARD

void brake(){
  digitalWrite(ENA, LOW); //OFFKAN CONTROLLER
  digitalWrite(IN1, LOW); //OFFKAN CONTROLLER
  digitalWrite(IN2, LOW); //OFFKAN CONTROLLER

}//END BRAKE

Dalam keadaan Joystick Transmitter di posisi tengah, Motor akan terhenti.

Jika anda mempunyai sebarang PERTANYAAN berkenaan artikel ini, anda boleh maklumkan dalam bahagian COMMENT.

Selamat Bermain RC Radio Control!


Jika anda menyukai artikel-artikel keluaran MatGyver.my, kami mohon jasa baik tuan/cikpuan untuk sumbangkan like pada page FaceBook kami,
dan juga Subscribe ke YouTube Channel kami !

Dapatkan Tips-tips DIY dan Arduino dari FB Page Kami.
Konten Video Tips DIY Hobby MatGyver Official Channel.


Published by Mat Gyver

Peneraju Komuniti Digital Maker Malaysia. Pembangunan Komuniti diUtamakan.

4 thoughts on “Arduino Baca Signal PPM Remote RC Receiver

  1. Assalamualaiku, saya dah beli FS-i6 dan FS-IA6B, dan ikut steps dalam ni, tapi semua CH display 0 dalam Serial Monitor. Saya baru beli remote ni.. tak tahu cara setup, untuk communicate dengan arduino. boleh ajarkan cara first time setup,ada nak kena bind apa2 ka, setup dalam transmitter apa2 ka.. Terima Kasih.

    Like

  2. Assalamualaikum ..
    Tuan sya berminat untuk beljar coding… APA persediaan yg diperlukan..dan bgaimana untuk daptkan kelas daripada Tuan… ?

    Like

Tinggalkan Jawapan

Masukkan butiran anda dibawah atau klik ikon untuk log masuk akaun:

WordPress.com Logo

Anda sedang menulis komen melalui akaun WordPress.com anda. Log Out /  Tukar )

Facebook photo

Anda sedang menulis komen melalui akaun Facebook anda. Log Out /  Tukar )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: