Điều khiển Servo từ xa thông qua Button - INPUT_PULLUP - LẬP TRÌNH ARDUINO

Banner quảng cáo

12/9/17

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

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

  1. #include <SPI.h>
  2. #include "RF24.h"
  3.  
  4. const uint64_t pipe = 0xE8E8F0F0E1LL; // địa chỉ để phát
  5. RF24 radio(9,10); //thay 10 thành 53 với mega
  6. 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ị 
  7. int button1 = A0;
  8. int button2 = A1;
  9. int valpos = 0; // tạo giá trị biến đếm góc ban đầu là 0
  10.  
  11.  void setup(){ 
  12.   radio.begin();                     
  13.   radio.setAutoAck(1);               
  14.   radio.setRetries(1,1);             
  15.   radio.setDataRate(RF24_1MBPS);    // Tốc độ truyền
  16.   radio.setPALevel(RF24_PA_MAX);      // Dung lượng tối đa
  17.   radio.setChannel(10);               // Đặt kênh
  18.   radio.openWritingPipe(pipe);        // mở kênh
  19.   pinMode (button1, INPUT_PULLUP); // INPUT_PULLUP chân button1
  20.   pinMode (button2, INPUT_PULLUP); // INPUT_PULLUP chân button2
  21.   Serial.begin(9600); // mở cổng Serial tiện debug
  22. } 
  23.  
  24. void loop(){
  25.   int buttonstt1 = digitalRead(button1); // đọc trạng thái button 1
  26.   int buttonstt2 = digitalRead(button2); // đọc trạng thái button 2
  27.     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)
  28.       valpos ++; // tăng giá trị biến góc
  29.          if (valpos > 180) // nếu giá trị biến đếm góc lớn hơn 180 thì chặn trên
  30.             valpos = 180;
  31.     }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) 
  32.        valpos --; // giảm giá trị biến góc
  33.          if (valpos < 0) // nếu giá trị biến đếm góc bé hơn 0 thì chặn dưới
  34.             valpos = 0;
  35.     }
  36.     
  37.   msg[0] = valpos; // gán mảng bằng giá trị đọc được
  38.   radio.write(&msg, sizeof(msg)); // bắt đầu truyền dữ liệu
  39.   Serial.println(*msg); // kiểm tra lệnh gửi hoặc có thể truyền vào msg[0]
  40.   delay(50); // đợi 50ms gửi lần sau
  41. }

Mạch nhận

  1. #include "RF24.h"
  2. #include <Servo.h> // Thư viện điều khiển servo
  3. Servo myservo; // Khai báo đối tượng myservo dùng để điều khiển servo
  4. const uint64_t pipe = 0xE8E8F0F0E1LL; // địa chỉ phát
  5. RF24 radio(9,10);//thay 10 thành 53 với mega
  6. byte msg[3]; // tạo mảng byte lưu giá trị nhận được
  7.  
  8. void setup(){
  9. Serial.begin(9600);
  10. radio.begin();
  11. radio.setAutoAck(1);
  12. radio.setDataRate(RF24_1MBPS); // Tốc độ dữ liệu
  13. radio.setChannel(10); // Đặt kênh
  14. radio.openReadingPipe(1,pipe);
  15. radio.startListening();
  16. myservo.attach(A0); // cài đặt chân A0 điều khiển servo
  17.  
  18. }
  19. void loop(){
  20. if (radio.available()){
  21. while (radio.available()){
  22. radio.read(&msg, sizeof(msg));
  23. int servoPos = msg[0]; // tạo biến servoPos bằng giá trị mảng nhận được
  24. myservo.write(servoPos); // Cho servo quay một góc là servoPos độ
  25. Serial.println(servoPos); // kiểm tra góc tren Serial monitor
  26. delay(50); // đợi 50ms cho servo chuyển góc
  27. }
  28. }
  29. }
Ở 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

    1 nhận xét:

    Post Bottom Ad

    LIÊN HỆ VỚI LÝ ĐỂ ĐĂNG QUẢNG CÁO NHÉ