Tutorial ini adalah bagian dari: Motor Servo
Semua video terkait motor servo yang relevan tercantum di sini. Tautan ke video lain ada di bawah artikel ini.
Mengendalikan Motor Servo Menggunakan Remote Inframerah dengan Arduino
```html
Mengendalikan Motor Servo dengan Remote Inframerah dan Arduino
Proyek ini menunjukkan cara mengendalikan motor servo menggunakan remote inframerah (IR) dan Arduino. Pengaturan ini memungkinkan kontrol nirkabel terhadap posisi servo, menjadikannya ideal untuk berbagai aplikasi.

Berikut adalah beberapa ide proyek yang menggunakan pengaturan ini:
- Menyesuaikan pan dan tilt kamera dari jarak jauh.
- Mengendalikan gerakan lengan robot.
- Mengotomatiskan tirai atau gorden jendela.
- Membuat instalasi seni interaktif.
- Membangun mobil atau kendaraan yang dikendalikan dari jarak jauh.
Perangkat Keras/Komponen
- Papan Arduino (misalnya, Uno, Nano)
- Motor servo
- Remote kontrol IR (remote standar apa pun akan berfungsi, tetapi kode dikonfigurasi untuk remote tertentu)
- Modul penerima IR (misalnya, TSOP1838)
- Kabel jumper
- Breadboard (opsional)
Panduan Pengkabelan
Motor servo memiliki tiga kabel: ground (biasanya coklat atau hitam), daya (biasanya merah), dan sinyal (sering oranye atau putih). Penerima IR juga memiliki tiga kabel: ground, daya (VCC), dan sinyal.
(dalam video pada 01:46)

- Ground Servo ke Ground Arduino
- Daya Servo ke 5V Arduino
- Sinyal Servo ke Pin 8 Arduino (dalam video pada 02:23)
- Ground Penerima IR ke Ground Arduino
- VCC Penerima IR ke 5V Arduino
- Sinyal Penerima IR ke Pin 11 Arduino (dalam video pada 02:38)
Penjelasan Kode
Kode dimulai dengan menyertakan pustaka yang diperlukan untuk komunikasi IR dan kontrol servo. (dalam video pada 03:16)
#include <IRremote.h>
#include <Servo.h>
Selanjutnya, variabel penting didefinisikan. Anda perlu mengonfigurasi ini berdasarkan pengaturan spesifik Anda. (dalam video pada 03:44)
const char type = 'B'; // 'W' untuk remote putih, 'B' untuk remote hitam
const boolean PCB = 0; // 1 jika penerima IR memiliki PCB, 0 jika modul telanjang
const int SERVO_PIN = 8; // Pin yang terhubung ke kabel sinyal servo
int angleStep = 10; // Berapa derajat servo bergerak per penekanan tombol
const int ANGLE_CENTRE = 90; // Posisi tengah/reset servo
(dalam video pada 05:06)
Langkah konfigurasi yang paling penting adalah mencocokkan tombol remote kontrol dengan tindakan tertentu. Kode menyertakan array untuk berbagai jenis remote (putih/hitam, PCB/tanpa PCB) dan kode tombol yang sesuai. Anda perlu mengidentifikasi kode yang benar untuk remote Anda dan menetapkannya ke tindakan yang diinginkan (kanan, kiri, tengah). (dalam video pada 05:16)
const String RIGHT = ">"; // Ganti dengan kode untuk tombol "kanan" Anda
const String LEFT = "<"; // Ganti dengan kode untuk tombol "kiri" Anda
const String CENTRE = "OK"; // Ganti dengan kode untuk tombol "tengah" Anda
(dalam video pada 08:12)
Fungsi servoAction() menangani gerakan servo berdasarkan sinyal IR yang diterima. Fungsi ini memeriksa perintah yang diterima dan menyesuaikan sudut servo sesuai. Variabel angleStep mengontrol kenaikan atau penurunan posisi servo. (dalam video pada 08:06)
Proyek Langsung/Demonstrasi
(dalam video pada 09:56)
Video ini menunjukkan cara mengendalikan servo menggunakan remote yang berbeda. Ini menunjukkan cara menyesuaikan kode untuk berbagai jenis remote dan modul penerima. Demonstrasi juga mencakup cara menangkap kode IR dari remote Anda sendiri dan mengintegrasikannya ke dalam kode. (dalam video pada 12:48)
Bab
- [00:00] Pendahuluan dan Gambaran Proyek
- [00:36] Komponen dan Bahan
- [01:46] Instruksi Pengkabelan
- [03:16] Penjelasan Kode
- [09:56] Demonstrasi Proyek
- [12:48] Menggunakan Remote Anda Sendiri
```
Tutorial ini adalah bagian dari: Motor Servo
- Mengontrol Servo dengan Tombol Tekan Menggunakan Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Mengontrol Servo dengan Potensiometer Menggunakan Arduino
- Mengontrol Servo dengan Potensiometer dan LCD1602 menggunakan Arduino
- Kontrol Motor Servo Arduino Menggunakan Potensiometer
- Mengontrol Posisi Servo dengan Gerakan Tangan untuk Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Cara Menggunakan Servo 360° Kontinu dengan Arduino
- Kode Arduino dan Video untuk Pengontrol Servo PCA9685 16 Saluran 12-Bit V1
- Buat Saklar Toggle Servo Arduino dengan Tombol Tekan
/*
* Original library from - http://arcfn.com
*
* This Arduino code controls a servo motor with an IR remote controller or any TV remote.
*
* You have to select the type of your remote as Black or White in the code below
* and also select your receiver 1838 as either a PCB or bare module. See video for details.
*
* You have to watch this video: https://youtu.be/muAkBQb24NI
* before proceeding with this code.
*
* Modified/Written by Ahmad Shamshiri
* on August 02, 2018 at 20:35 in Ajax, Ontario, Canada
* for Robojax.com
* Watch video instructions for this code: https://youtu.be/Wp7hX9UErSQ
* Get other Arduino codes from Robojax.com
*
*/
#include <IRremote.h>
int RECV_PIN = 11;
const char type ='B';// W for white, B for black. Must keep single quotes like 'B' or 'W'
const boolean PCB = 0;// if receiver is PCB set to 1, if not set to 0. See video for details
boolean displayCode = true;// to display remote code. if not, set to false
//***** Servo settings begins
#include <Servo.h>
Servo RJservo; // create servo object to control a servo
const int SERVO_PIN = 8; // analog pin used to connect the potentiometer
int angle =90; // initial angle for servo
int angleStep =10;
const int ANGLE_CENTRE =90;// the centre/reset angle of your servo
//**** Servo settings ends
// remote settings
const String RIGHT=">";// move servo to the right with this key on remote
const String LEFT ="<";// move servo to the left with this key on remote
const String CENTRE ="OK";// move servo to centre with this key on remote
// remote settings end
IRrecv irrecv(RECV_PIN);
// this is array holding codes for White Remote when used with PCB version of receiver
unsigned int whiteRemotePCB[] ={
0xE318261B, // CH-
0x511DBB, // CH
0xEE886D7F, // CH+
0x52A3D41F, // |<<
0xD7E84B1B, // >>|
0x20FE4DBB, // >||
0xF076C13B, // -
0xA3C8EDDB, // +
0x12CEA6E6, // EQ
0xC101E57B, // 0
0x97483BFB, // 100+
0xF0C41643, // 200+
0x9716BE3F, // 1
0x3D9AE3F7, // 2
0x6182021B, // 3
0x8C22657B, // 4
0x488F3CBB, // 5
0x449E79F, // 6
0x32C6FDF7, // 7
0x1BC0157B, // 8
0x3EC3FC1B // 9
};
// this is array holding codes for White Remote when used with non-PCB version of receiver
unsigned int whiteRemote[] ={
0xFFA25D, // CH-
0xFF629D, // CH
0xFFE21D, // CH+
0xFF22DD, // |<<
0xFF02FD, // >>|
0xFFC23D, // >||
0xFFE01F, // -
0xFFA857, // +
0xFF906F, // EQ
0xFF6897, // 0
0xFF9867, // 100+
0xFFB04F, // 200+
0xFF30CF, // 1
0xFF18E7, // 2
0xFF7A85, // 3
0xFF10EF, // 4
0xFF38C7, // 5
0xFF5AA5, // 6
0xFF42BD, // 7
0xFF4AB5, // 8
0xFF52AD // 9
};
// key lables of white remote
String whiteRemoteKey[] ={
"CH-",
"CH",
"CH+",
"|<<",
">>|",
">||",
"-",
"+",
"EQ",
"0",
"100+",
"200+",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
};
// this is array holding codes for Black Remote when used with non-PCB version of receiver
unsigned int blackRemote[] ={
0xFF629D, // ^
0xFF22DD, // <
0xFF02FD, // OK
0xFFC23D, // >
0xFFA857, // v
0xFF6897, // 1
0xFF9867, // 2
0xF0C41643, // 3
0xFF30CF, // 4
0xFF18E7, // 5
0xFF7A85, // 6
0xFF10EF, // 7
0xFF38C7, // 8
0xFF5AA5, // 9
0xFF42BD, // *
0xFF4AB5, // 0
0xFF52AD // #
};
// this is array holding codes for Black Remote when used with PCB version of receiver
unsigned int blackRemotePCB[] ={
0x511DBB, // ^
0x52A3D41F, // <
0xD7E84B1B, // OK
0x20FE4DBB, // >
0xA3C8EDDB, // v
0xC101E57B, // 1
0x97483BFB, // 2
0xF0C41643, // 3
0x9716BE3F, // 4
0x3D9AE3F7, // 5
0x6182021B, // 6
0x8C22657B, // 7
0x488F3CBB, // 8
0x449E79F, // 9
0x32C6FDF7, // *
0x1BC0157B, // 0
0x3EC3FC1B // #
};
// Black remote key names
String blackRemoteKey[] ={
"^",
"<",
"OK",
">",
"v",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"*",
"0",
"#"
};
decode_results results;
void setup()
{
Serial.begin(9600);
// In case the interrupt driver crashes on setup, give a clue
// to the user what's going on.
Serial.println("Robojax IR Decode");
Serial.println("Servo Control with Remote");
irrecv.enableIRIn(); // Start the receiver
RJservo.attach(SERVO_PIN); // attaches the servo on pin servoPin to the servo object
}
void loop() {
if (irrecv.decode(&results)) {
if(displayCode)Serial.println(results.value, HEX);
robojaxValidateCode(results.value);// used the "robojaxValidateCode" bellow
irrecv.resume(); // Receive the next value
}
delay(50);// 50 millisecond delay
}
/*
* function: robojaxValidateCode
* validates the remote code and prints the correct key name.
* cd is the code passed from the loop.
* Written by A. S. for Robojax
*/
void robojaxValidateCode(int cd)
{
// Robojax IR Remote decoder
int found=0;
if(type =='W' && !PCB)
{
// Robojax IR White Remote decoder
// if type is set to 'W' (white remote) and PCB=0 then check White remote code
for(int i=0; i< sizeof(whiteRemote)/sizeof(int); i++)
{
if(whiteRemote[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(whiteRemoteKey[i]);
servoAction(whiteRemoteKey[i]);// take action
found=1;
}// if matched
}// for
}else if(type =='W' && PCB){
// Robojax IR White Remote decoder
// if type is set to 'W' (white remote) and PCB=1 then check White remote code
for(int i=0; i< sizeof(whiteRemotePCB)/sizeof(int); i++)
{
if(whiteRemotePCB[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(whiteRemoteKey[i]);
servoAction(whiteRemoteKey[i]);// take action
found=1;
}// if matched
}// for
}else if(type =='B' && PCB){
// Robojax IR Black Remote decoder
// if type is set to 'B' (black remote) and PCB=1 then check Black remote code
for(int i=0; i< sizeof(blackRemotePCB)/sizeof(int); i++)
{
// Robojax IR black Remote decoder
if(blackRemotePCB[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(blackRemoteKey[i]);
servoAction(blackRemoteKey[i]);// take action
found=1;
}// if matched
}// for
}else{
// if type is set to 'B' (black remote) and PCB =0 then check Black remote code
for(int i=0; i< sizeof(blackRemote)/sizeof(int); i++)
{
// Robojax IR black Remote decoder
if(blackRemote[i] ==cd)
{
Serial.print("Key pressed:");
Serial.println(blackRemoteKey[i]);
servoAction(blackRemoteKey[i]);// take action
found=1;
}// if matched
}// for
}// else
if(!found){
if(cd !=0xFFFFFFFF)
{
Serial.println("Key unknown");
}
}// found
}// robojaxValidateCode end
/*
*
* servoAction()
* receives string "value" as input and based on the settings,
* sends translates it to servo value and controls servo, either by:
* rotating servo to the right
* rotating servo to the left
* moving the servo to the middle
*
*/
void servoAction(String value)
{
// Servo button demo with IR remote by Robojax.com
while(value == RIGHT){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
RJservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}// if
value =".";
delay(100);
}// while for RIGHT
while(value == LEFT){
// Servo button demo with IR remote by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
RJservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
value =".";
delay(100);
}// while for LEFT
if(value == CENTRE)
{
angle = ANGLE_CENTRE;
RJservo.write(angle); // move the servo to centre at 90 degree angle
}
// Robojax IR Servo control
}//servoAction end
Hal-hal yang mungkin Anda butuhkan
-
Amazon
-
eBay
Sumber daya & referensi
Belum ada sumber daya.
Berkas📁
Tidak ada file tersedia.