Bàn tay Robot - Robot Arm

Một cuộc thi rất hữu ích để khuyến khích mọi người cùng tham gia học tập và phấn đấu vào nền khoa họ của nước nhà, đồng thời Khuyến khích các bạn nhỏ ở các tỉnh thành được tham gia một cuộc thi sáng tạo vui tươi và giúp các bạn được tiếp cận lần đầu tiên với Arduino, hướng đến phục vụ sự phát triển của cộng đồng điện tử Việt Nam.

 

I. Giới thiệu

1. Servo

Servo là một dạng động cơ điện đặc biệt. Không giống như động cơ thông thường cứ cắm điện vào là quay liên tục, servo chỉ quay khi được điều khiển (bằng xung ppm) với góc quay nằm trong khoảng bất kì từ 0 độ đến 180 độ. Mỗi loại servo có kích thước, khối lượng và cấu tạo khác nhau. Có loại thì nặng chỉ 9g (chủ yếu dùng trên máy bay mô mình), có loại thì sở hữu một momen lực bá đạo (vài chục Newton/m), hoặc có loại thì khỏe và nhông sắc chắc chắn,...

   Bạn có thể học cách điều khiển một Servo theo cách thông thường tại đây.

2. Module NRF24L01

Module NRF24L01 cũng là một module khá quen thuộc với chúng ta.

Sơ lược:

  • Khoảng cách thu phát khoảng 100m (với điều kiện trống trải), khoảng 30-50m (trong nhà). Với một số phiên bản đặc biệt ví dụ như loại NRF24L01+ thì khoảng cách có thể lên tới 1km. Khá thích  hợp cho các bộ điều khiển cầm tay.
  • Có anten sẵn trên bảng mạch rất tiện và đẹp.
  • Có khả năng truyền tín hiệu 2 chiều. Tức là một module vừa có thể là transmitter vừa có thể là receiver. Khác biệt so với loại 433Mhz là phải có 2 module riêng biệt.
  • Giá thành thấp khoảng 10k VNĐ/cái (tôi mua trên Aliexpress.com) tức rẻ hơn module 433Mhz một chút.
  • Ít gặp sự cố.

Các bạn có thể xem thêm tại đây.

II. Phần cứng

1. Linh kiện

  • 2 board arduino.
  • 5 biến trở.
  • 2 NRF24L01.
  • 5 Servo(loại nào tùy ý,bạn thích là được).

2. Lắp mạch

Đầu tiên chúng ta kết nối NRF24L01 với arduino:

 

a. Mạch phát

b. Mạch thu

III. Code

download thư viện cho NRF24L01 nhé.

Code ở đây là mình tham khảo của Trương Trọng Thân nhé

1. Code mạch thu

#include <SPI.h>
#include <Servo.h> 
#include "RF24.h"
const uint64_t pipe = 0xE8E8F0F0E1LL; // địa chỉ phát
RF24 radio(9,10);
unsigned char msg[5];
Servo s1;
Servo s2;
Servo s3;
Servo s4;
Servo s5;
int data; 
int pos;
    
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();            
    s1.attach(2); 
    s2.attach(3);
    s3.attach(4); 
    s4.attach(5);
    s5.attach(6);
}
    
void loop(){
    if (radio.available()) {
        radio.read(&msg, sizeof(msg));
        s1.write(msg[0]);
        s2.write(msg[1]);
        s3.write(msg[2]);
        s4.write(msg[3]);
        s5.write(msg[4]);
    }
}

2. Code mạch phát

#include <SPI.h>
#include "RF24.h"
const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(9,10);
unsigned char msg[10];
const int potpin_1 = A0;
const int potpin_2 = A1;
const int potpin_3 = A2;
const int potpin_4 = A3;
const int potpin_5 = A4;
const int potpin_6 = A5;
const int potpin_7 = 2;
int val_1, val_2, val_3, val_4, val_5,val_6,val_7;
void setup(){ 
  Serial.begin(9600);
  ///////////////
  radio.begin();                     
  radio.setAutoAck(1);               
  radio.setRetries(1,1);             
  radio.setDataRate(RF24_1MBPS);    
  radio.setPALevel(RF24_PA_MAX);     
  radio.setChannel(10);              
  radio.openWritingPipe(pipe);      
}
void loop() { 
  ///////////////////////////
  val_1 = analogRead(potpin_1);
  val_1 = map(val_1, 0, 1023, 0, 180);
  msg[0] = val_1;
  /////////////////////////////
  val_2 = analogRead(potpin_2);
  val_2 = map(val_2, 0, 1023, 0, 180);
  msg[1] = val_2;
  ///////////////////////////
  val_3 = analogRead(potpin_3);
  val_3 = map(val_3, 0, 1023, 0, 180);
  msg[2] = val_3;
  ////////////////////////////
  val_4 = analogRead(potpin_4);
  val_4 = map(val_4, 0, 1023, 0, 180);
  msg[3] = val_4;
  /////////////////////////
  val_5 = analogRead(potpin_5);
  val_5 = map(val_5, 0, 1023, 0, 180);
  msg[4] = val_5;
  /////////////////////////
  Serial.println(msg[6]);
  radio.write(&msg, sizeof(msg));
}

IV. Kết luận

Chúng ta có vô vàn cách sáng tạo với Arduino,servo,... Và đây là một số hình ảnh về sản phẩm của tôi:

Chúc các bạn thành công!

Những hình ảnh về dự án: 
Bài viết truyền cảm hứng: 
lên
10 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

Select any filter and click on Apply to see results