Shortcut03 - Điều khiển Servo từ xa thông qua Button - INPUT_PULLUP

Đây là loạt bài vắn tắt chia sẻ kinh nghiệm giúp các bạn có thể sử dụng các mudule cũng như tiếp cận code một cách ngắn gọn và dễ hiểu hơn smiley

Mục đích bài viết: Hướng dẫn điều khiển một Servo trong các dự án robot từ xa thông qua module NRF24 bằng button (sử dụng INPUT_PULLUPcool

Bài này cho phép bạn thay đổi góc của 1 servo từ xa nhờ 2 button, nhấn giữ để tăng giảm góc một cách dễ dàng devil

Công cụ

  1. Arduino: 2 mạch (bất kì).
  2. Moulde NRF24L01 (truyền/nhận).
  3. Servo bất kì 
  4. Button x2
  5. Dây nốitest board.

Lắp mạch

Mạch gửi

Mạch nhận

Chương trình

Mạch gửi

#include <SPI.h>
#include "RF24.h"
 
const uint64_t pipe = 0xE8E8F0F0E1LL; // địa chỉ để phát
RF24 radio(9,10); //thay 10 thành 53 với mega
int msg[3]; // tạo mảng int lưu giá trị nhận được (không dùng byte nhé vì max byte chỉ 256 giá trị trong khi giá trị truyền analog max 1024 giá trị 
int button1 = A0;
int button2 = A1;
int valpos = 0; // tạo giá trị biến đếm góc ban đầu là 0
 
 void setup(){ 
  radio.begin();                     
  radio.setAutoAck(1);               
  radio.setRetries(1,1);             
  radio.setDataRate(RF24_1MBPS);    // Tốc độ truyền
  radio.setPALevel(RF24_PA_MAX);      // Dung lượng tối đa
  radio.setChannel(10);               // Đặt kênh
  radio.openWritingPipe(pipe);        // mở kênh
  pinMode (button1, INPUT_PULLUP); // INPUT_PULLUP chân button1
  pinMode (button2, INPUT_PULLUP); // INPUT_PULLUP chân button2
  Serial.begin(9600); // mở cổng Serial tiện debug
} 
 
void loop(){
  int buttonstt1 = digitalRead(button1); // đọc trạng thái button 1
  int buttonstt2 = digitalRead(button2); // đọc trạng thái button 2
    if (buttonstt1 == LOW && buttonstt2 == HIGH){  // nếu button1 đã nhấn và button2 chưa nhấn (chỉ đúng khi 1 trong 2 button được nhấn)
      valpos ++; // tăng giá trị biến góc
         if (valpos > 180) // nếu giá trị biến đếm góc lớn hơn 180 thì chặn trên
            valpos = 180;
    }else if (buttonstt2 == LOW && buttonstt1 == HIGH){  // nếu button2 đã nhấn và button1 chưa nhấn (chỉ đúng khi 1 trong 2 button được nhấn) 
       valpos --; // giảm giá trị biến góc
         if (valpos < 0) // nếu giá trị biến đếm góc bé hơn 0 thì chặn dưới
            valpos = 0;
    }
    
  msg[0] = valpos; // gán mảng bằng giá trị đọc được
  radio.write(&msg, sizeof(msg)); // bắt đầu truyền dữ liệu
  Serial.println(*msg); // kiểm tra lệnh gửi hoặc có thể truyền vào msg[0]
  delay(50); // đợi 50ms gửi lần sau
}
 

Mạch nhận

#include "RF24.h"
 #include <Servo.h>      // Thư viện điều khiển servo
 
Servo myservo; // Khai báo đối tượng myservo dùng để điều khiển servo
const uint64_t pipe = 0xE8E8F0F0E1LL; // địa chỉ phát
RF24 radio(9,10);//thay 10 thành 53 với mega
byte msg[3]; // tạo mảng byte lưu giá trị nhận được 

 
void setup(){
  Serial.begin(9600);
  radio.begin();                     
  radio.setAutoAck(1);              
  radio.setDataRate(RF24_1MBPS);    // Tốc độ dữ liệu
  radio.setChannel(10);               // Đặt kênh
  radio.openReadingPipe(1,pipe);     
  radio.startListening();    
  myservo.attach(A0); // cài đặt chân A0 điều khiển servo        

}
 
void loop(){
  if (radio.available()){
    while (radio.available()){
      radio.read(&msg, sizeof(msg));
      int servoPos = msg[0]; // tạo biến servoPos bằng giá trị mảng nhận được
      myservo.write(servoPos);  // Cho servo quay một góc là servoPos độ
      Serial.println(servoPos); // kiểm tra góc tren Serial monitor
      delay(50); // đợi 50ms cho servo chuyển góc
     }
  }
}

Ở bài sau chúng ta sẽ thử sử dụng cảm biến gia tốc MPU6050 để điều khiển servo và một số thiết bị khác nhé cool

Những hình ảnh về dự án: 
Bài viết truyền cảm hứng: 
lên
11 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Xe điều khiển bằng tay game Dual Shock3 thông qua Bluetooth

Vừa bắt đầu với arduino được hơn 1 tuần, có tham khảo qua các nguồn từ "trung ương đến địa phương", nắm được 1 số kiến thức cơ bản nên mình bắt đầu thực hiện 1 sản phẩm để đúc kết kinh nghiệm. Trong số đó thì xe điều khiển là dễ nhất. Kết hợp với cái tay game ps3 nằm lăn lóc ở góc nhà. Thế là có 1 chiếc xe điều khiển từ xa. Bắt đầu nhé.

lên
17 thành viên đã đánh giá bài viết này hữu ích.

Làm xe điều khiển từ xa bằng Bluetooth - Điều khiển bằng Android với App Inventor

Mình rất thích điện tử nhưng không học về ngành điện tử. Rất may là có Adruino, rồi có cộng đồng Adruino Việt Nam, đặc biệt là sự nhiệt tình của tất cả các bạn trong cộng đồng, mình đã làm được 1 chiếc xe điều khiển từ xa. Cho con chơi là lí do phụ thôi, còn tìm hiểu, học tập là chính. Hôm nay chia sẻ cùng các bạn, cùng gửi lời cảm ơn đến tất cả các bạn trong cộng đồng. Có bạn thì giúp đỡ trực tiếp, có bạn thì viết bài, rồi có bạn thì bình luận, nêu câu hỏi. Tất cả đều có giá trị đối với mình.

Ngại viết bài nên mình đăng dưới dạng ảnh.

lên
26 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Giới thiệu Servo SG90 và cách điều khiển bằng biến trở

Servo là một hệ thống truyền chuyển động bao gồm: motor, bánh răng, mạch điều khiển. Cho phép đầu ra dịch chuyển từ 0 đến 180 độ. Nó được ứng dụng trong nhiều lĩnh vực, ví dụ như: điều khiển góc quay của camera quan sát, điều chỉnh góc của một chiếc xe điều khiển từ xa, hay là điều chỉnh góc của cánh tà máy bay, cho đến việc gắp vật / di chuyển cánh tay robot...

lên
46 thành viên đã đánh giá bài viết này hữu ích.

Shortcut01 – Truyền thông số giữa hai module RF 315Mhz

Đây là loạt bài vắn tắt chia sẻ kinh nghiệm giúp các bạn có thể sử dụng các mudule cũng như tiếp cận code một cách ngắn gọn và dễ hiểu hơn smiley.

Mục đích bài viết: Hướng dẫn cách truyền các truyền và nhận giá trị từ cảm biến hoặc một biến số thay đổi giữa hai mạch 315Mhz (433Mhz) cool

lên
16 thành viên đã đánh giá bài viết này hữu ích.