Hướng dẫn làm robot tự tránh vật cản sử dụng cảm biến siêu âm
Bạn nghĩ sao về một chiếc xe có thể tự động tránh vật cản phía trước?
Ở bài trước chúng tôi đã hướng dẫn các bạn chế tạo một chiếc xe điều khiển từ xa bằng Smartphone. Trong bài ngày hôm nay chúng tôi sẽ hướng dẫn các bạn làm một chiếc xe có khả năng tự động tránh vật cản. Nghe thôi đã thấy thú vị rồi phải không nào? Chúng ta cùng bắt tay vào việc ngay thôi.
Chuẩn bị:
Một bộ khung xe robot 3 bánh
Một cảm biến siêu âm SRF 04 hoặc SRF05
Một Broad Arduini UNO R3
Một module điều khiển động cơ
Một Servo SG90
Khung đỡ cảm biến siêu âm
Khung đỡ Servo
Dây nối đực-cái, cái -cái
Bước 1
Các bạn hàn dây cho mô tơ sau đó lắp ráp bộ khung xe lại, phần lắp ráp này khá đơn giản.
Sau khi lắp ráp bộ khung và hàn dây cho mô tơ xong chúng ta sẽ được như thế này
Bước 2
Tiếp theo chúng ta sẽ lắp động cơ servo lên khung xe. Các bạn dùng bộ khung và ốc dành cho servo để cố định lên khung robot Động cơ servo này có nhiệm vụ xoay cảm biến siêu âm để giúp robot phát hiện vật cản ở các hướng.
Sau khi đã cố định Servo xong chúng ta lắp khung đỡ cảm biến siêu âm lên servo. Các bạn có thể dùng keo nến để dán phần khung đỡ cảm biến siêu âm này với servo.
Bước 3
Do phải đặt module L293 lên Broad Arduino như thế này nên chúng ta sẽ bị thiếu chân cắm vào Arduino. Vì vậy chúng ta phải hàn thêm chân kết nối ở trên L293
Trên module L293 đã có lỗ chờ sẵn các bạn chỉ việc đặt jump vào và dùng mỏ hàn lại.
Bước 4
Các bạn dán Broad Arduno UNO R3 lên khung robot
Sau đó đặt Module L293 lên trên.
Bước 5
Tiếp theo các bạn nối dây động cơ vào cọc M2 và M4
Sau đó chúng ta sẽ nối dây cho cảm biến siêu âm và Arduino
Dây GND nối với GND, VCC nối với 5V, Trig nối với A0, Echo nối với A1
Và cuối cùng là nối dây cho Servo hoạt động. Các bạn cắm dây của servo vào chân Jump có ghi SER1. Trên mạch có ghi các kí hiệu (- + và S, S là dây tín hiệu của servo) các bạn nhớ cắm cho đúng, dây tín hiệu của servo thường có màu vàng cam.
Bước 6
Sau đó đặt vào khe chờ sẵn trên khung.
Bước 7
Dán pin lên khung robot và tiến hành nối dây. Các bạn có thể dùng sẵn bộ khung 4 pin tiểu 1.5V được tặng kèm khi mua bộ khung hoặc mua 2 pin cell 18650 như thế này để có thể sạc lại pin sau khi pin hết.
Giờ các bạn nối đầu dây âm của pin ( dây màu đen) vào chân GND trên module L293. Đầu dây dương còn lại của pin các bạn nối vào một đầu dây của công tắc. Đầu dây còn lại của công tắc các bạn nối với chân M+ trên Module L293
Bước 8
Do Arduino không có sẵn thư viện NewPing và thư viện AFMotor vậy nên chúng ta cần phải thêm vào Arduino.
Các bạn tải thư viện NewPing về tại đây và thư viện AFMotor tại đây
Sau khi thêm thư viện xong các bạn copy đoạn code này vào Arduino trên máy tính
#include < AFMortor.h>
#include < Servo.h>
#include < NewPing.h>
#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE_POSSIBLE 1000
#define MAX_SPEED 150
#define MOTORS_CALIBRATION_OFFSET 3
#define COLL_DIST 20
#define TURN_DIST COLL_DIST 10
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE_POSSIBLE);
AF_DCMotor leftMotor(4, MOTOR12_8KHZ);
AF_DCMotor rightMotor(2, MOTOR12_8KHZ);
Servo neckControllerServoMotor;
int pos = 0;
int maxDist = 0;
int maxAngle = 0;
int maxRight = 0;
int maxLeft = 0;
int maxFront = 0;
int course = 0;
int curDist = 0;
String motorSet = "";
int speedSet = 0;
void setup() {
neckControllerServoMotor.attach(10);
neckControllerServoMotor.write(90);
delay(2000);
checkPath();
motorSet = "FORWARD";
neckControllerServoMotor.write(90);
moveForward();
}
void loop() {
checkForward();
checkPath();
}
void checkPath() {
int curLeft = 0;
int curFront = 0;
int curRight = 0;
int curDist = 0;
neckControllerServoMotor.write(144);
delay(120);
for(pos = 144; pos >= 36; pos-=18)
{
neckControllerServoMotor.write(pos);
delay(90);
checkForward();
curDist = readPing();
if (curDist < COLL_DIST) {
checkCourse();
break;
}
if (curDist < TURN_DIST) {
changePath();
}
if (curDist > curDist) {maxAngle = pos;}
if (pos > 90 && curDist > curLeft) { curLeft = curDist;}
if (pos == 90 && curDist > curFront) {curFront = curDist;}
if (pos < 90 && curDist > curRight) {curRight = curDist;}
}
maxLeft = curLeft;
maxRight = curRight;
maxFront = curFront;
}
void setCourse() {
if (maxAngle < 90) {turnRight();}
if (maxAngle > 90) {turnLeft();}
maxLeft = 0;
maxRight = 0;
maxFront = 0;
}
void checkCourse() {
moveBackward();
delay(500);
moveStop();
setCourse();
}
void changePath() {
if (pos < 90) {lookLeft();}
if (pos > 90) {lookRight();}
}
int readPing() {
delay(70);
unsigned int uS = sonar ping();
int cm = uS/US_ROUNDTRIP_CM;
return cm;
}
void checkForward() { if (motorSet=="FORWARD") {leftMotor.run(FORWARD); rightMotor.run(FORWARD); } }
void checkBackward() { if (motorSet=="BACKWARD") {leftMotor.run(BACKWARD); rightMotor.run(BACKWARD); } }
void moveStop() {leftMotor.run(RELEASE); rightMotor.run(RELEASE);}
void moveForward() {
motorSet = "FORWARD";
leftMotor.run(FORWARD);
rightMotor.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet =2)
{
leftMotor.setSpeed(speedSet MOTORS_CALIBRATION_OFFSET);
rightMotor.setSpeed(speedSet);
delay(5);
}
}
void moveBackward() {
motorSet = "BACKWARD";
leftMotor.run(BACKWARD);
rightMotor.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet =2)
{
leftMotor.setSpeed(speedSet MOTORS_CALIBRATION_OFFSET);
rightMotor.setSpeed(speedSet);
delay(5);
}
}
void turnRight() {
motorSet = "RIGHT";
leftMotor.run(FORWARD);
rightMotor.run(BACKWARD);
delay(400);
motorSet = "FORWARD";
leftMotor.run(FORWARD);
rightMotor.run(FORWARD);
}
void turnLeft() {
motorSet = "LEFT";
leftMotor.run(BACKWARD);
rightMotor.run(FORWARD);
delay(400);
motorSet = "FORWARD";
leftMotor.run(FORWARD);
rightMotor.run(FORWARD);
}
void lookRight() {rightMotor.run(BACKWARD); delay(400); rightMotor.run(FORWARD);}
void lookLeft() {leftMotor.run(BACKWARD); delay(400); leftMotor.run(FORWARD);}
Ấn vào biểu tượng V để dịch code
Ấn vào biểu tượng mũi tên để nạp code
Vậy là chúng ta đã hoàn thành rồi. Đây là thành quả của chúng ta.
Các tin khác
- Chính sách bán hàng trên Robocon.Vn (16:41 21/10/2024)
- Hướng dẫn thanh toán đơn hàng trên Robocon.Vn (16:40 21/10/2024)
- Sửa Chữa Đồ Điện Tử, Điện Gia Dụng Uy Tín Hà Nội (12:11 04/01/2024)
- Các sản phẩm đồ điện cũ được thu mua tại Robocon (12:05 04/01/2024)
- Những việc cần làm sau khi đặt hàng Robocon thành công (10:47 04/01/2024)
- Cuộn Cảm Là Gì? những điều bạn chưa biết. (10:47 04/01/2024)
- Hướng dẫn mua Online trên website robocon.vn (10:47 04/01/2024)
- Tụ điện – Phân loại và cách kiểm tra (10:47 04/01/2024)
- Sử dụng LM2576 làm mạch nguồn ổn áp 5v (3A) (10:47 04/01/2024)
- Các loại mạch chuyển đổi dc-dc (10:47 04/01/2024)
Giỏ Hàng
- Không có sản phẩm
Xem giỏ hàng - Hàng đã mua
Danh sách chuyên mục
- Module Bo Mạch KIT
- Tool Sáng Tạo - Phụ Kiện Sáng Tạo
- Động Cơ - Motor
- Bộ inverter DC to AC - Kích Điện
- Sản phẩm Combo
- Máy Hàn Cell Pin - Phụ kiện
- Phụ Kiện Âm Thanh
- Smart Home
- Pin - Sạc pin - Sạc ác quy - Phụ kiện pin
- Đồng Hồ Vạn Năng
- Mỏ Hàn - Trạm Hàn - Máy Khò Nhiệt
- Máy Cấp Nguồn Đa Năng
- Mạch thu phát IR - RF - 2.4G
- LK Nồi Cơm Điện
- LK Lò Vi Sóng - Lò Nướng
- LK Quạt Điện - Quạt Hơi Nước
- LK Bếp Từ - Bếp Hồng Ngoại
- LK Ấm Siêu Tốc - Bình Nóng Lạnh
- Linh Kiện RC - Ôtô -Tàu - Máy bay - Flycam - Quadcopter
- Pulley Bánh Răng - Dây Đai Curoa
- Máy Khoan - Máy Bulong bắt vít
- Sản Phẩm Công Nghệ
- Tự Làm Mạch in
- Linh kiện Robot
- IGBT
- Diode
- Transistors (BJT)
- Mosfet-Fets
- Tụ Điện - Capacitor
- Triac - Thyristor - Diac
- Opto/Photocouplers
- IC Nguồn - IC Công suất
- Biến Trở - Chiết Áp
- Cuộn Cảm
- Điện Trở - Resistor
- IC - IC Chức Năng (DIP - SOIC)
- Vi Điều Khiển
- LED - Chip LED - LED COB - Đèn LED
- Cảm Biến - Bộ Cảm Biến
- Còi - Loa - Buzzer
- Nút nhấn - công tắc - switch
- Thạch anh
- Conecter - Jack - Dây Cáp - Kẹp Cá Sấu
- Relay
- Nguồn - Biến Áp - Adapter
- Cầu Chì
- Aptomat - Khởi động từ
- Màn Hình LCD
- PCB - Mạch tự ráp
- Quạt Tản Nhiệt - Nhôm Tản Nhiệt
- Băng Dính - Keo Kafuter 704 - Sơn Phủ Mạch
- Gen Co Nhiệt - Gen Thủy Tinh - Amiang
- Sò Nóng Lạnh-Tản Nhiệt Sò
- Đầu Nối - Trục Nối - Đầu Kẹp - Mũi Khoan
- Vòng Bị - Gối Đỡ Vòng Bị
- Máy Phun Sương - Máy Bơm Nước - Van Nước Từ
- Tool Công Cụ - Kìm - Tua Vít - Cảo - Eto - Ốc
- Kính Lúp - Kính Soi Mạch
- Dây Điện - Dây Đồng
- Thiết Bị Điện Công Nghiệp
- Máy tiện - Máy khắc - CNC
- Pin Năng Lượng Mặt Trời - Điều Khiển
Hỗ trợ trực tuyến
Tin tức nổi bật
Tin tức mới
- Chính sách bán hàng trên Robocon.Vn
- Hướng dẫn thanh toán đơn hàng trên Robocon.Vn
- Sửa Chữa Đồ Điện Tử, Điện Gia Dụng Uy Tín Hà Nội
- Các sản phẩm đồ điện cũ được thu mua tại Robocon
- Những việc cần làm sau khi đặt hàng Robocon thành công
- Cuộn Cảm Là Gì? những điều bạn chưa biết.
- Hướng dẫn mua Online trên website robocon.vn
- Tụ điện – Phân loại và cách kiểm tra
- Sử dụng LM2576 làm mạch nguồn ổn áp 5v (3A)
- Các loại mạch chuyển đổi dc-dc
Sản phẩm quan tâm
- 01MDL130 Dimmer WTB-4000W AC 0-220V Có Led ...345.000 VNĐ
- 02PKK573 Khớp Nối Động Cơ Mặt Bích ...25.000 VNĐ
- 03PKK632 Máy Hàn Và Khò KS-8586 Chính ...995.000 VNĐ
- 04LKGD73 Tấm MaySo Nhiệt Cho Tủ Sấy ...85.000 VNĐ
- 05MDL422 Mạch Chuyển Đổi Nguồn DC Sang ...45.000 VNĐ