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 FS–iA6B 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.

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)
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 !

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.
LikeLike
Tuan ada satu servo motor tak ?
Arduino tuan pernah guna ?
Nak tak kalau saya guide dalam Facebook Live ?
Sambung PM dalam facebook page kami.
https://www.facebook.com/matgyvermy
LikeLike
Assalamualaikum ..
Tuan sya berminat untuk beljar coding… APA persediaan yg diperlukan..dan bgaimana untuk daptkan kelas daripada Tuan… ?
LikeLike
Wsalam tuan. Terima kasih atas comment. Buat masa ini, kelas kami untuk peserta luar hanya melalui E-learning kami
pembelajaran secara 100% online, tetapi dah terbukti membantu ramai beginners https://school.matgyver.my/courses/kit-e-kursus-pemantapan-asas-arduino/
LikeLike