CODE ARDUINO

Dự án Arduino Radar với cảm biến siêu âm + Servo, P1

Dự án Arduino Radar với cảm biến siêu âm + Servo

Trong dự án Arduino radar với cảm biến siêu âm và động cơ servo, Ad xin được chia làm 2 phần:

  • Phần 1: Cơ cấu cơ học và cách đọc giá trị cảm biến siêu âm (ultrasonic sensor)
  • Phần 2: Phần mềm Processing IDE kết nối dữ liệu với Arduino và hiển thị lên máy tính qua cổng Serial.

Phần 1: Cơ cấu cơ học và cách đọc giá trị cảm biến siêu âm với Arduino

Tất cả những gì bạn cần cho dự án này là:

  • Arduino Mega (Bạn có thể sử dụng Arduino Uno thay thế)
  • Động cơ Servo
  • Cảm biến siêu âm
  • Một số dây dẫn

Bước 1: Thiết kế cơ học

Trước tiên, ta làm một hộp bìa giấy các tông để kết nối cảm biến siêu âm với động cơ Servo như hình bên dưới:

Nối header 4 chân với dây dẫn như hình:

Cố định board và các module lên breadboard:

Sơ đồ nối dây

Nối dây Arduino và cảm biến siêu âm như hình bên dưới:

Trong board này ta sử dụng Arduino Mega tuy nhiên bạn vẫn có thể sử dụng Arduino Uno. Khi kết nối chân điều khiển động cơ servo và Arduino Uno, bạn nên sử dụng những chân có dấu “~”. Đây chính là chân có khả nhân xuất ra tín hiệu Analog hay PWM.

Mã nguồn, Source Code:

// Includes the Servo library
#include <Servo.h>. 

// Defines Tirg and Echo pins of the Ultrasonic Sensor
const int trigPin = 10;
const int echoPin = 11;
// Variables for the duration and the distance
long duration;
int distance;

Servo myServo; // Creates a servo object for controlling the servo motor

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600);
  myServo.attach(12); // Defines on which pin is the servo motor attached
}
void loop() {
  // rotates the servo motor from 15 to 165 degrees
  for(int i=15;i<=165;i++){  
  myServo.write(i);
  delay(30);
  distance = calculateDistance();// Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree
  
  Serial.print(i); // Sends the current degree into the Serial Port
  Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  Serial.print(distance); // Sends the distance value into the Serial Port
  Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  }
  // Repeats the previous lines from 165 to 15 degrees
  for(int i=165;i>15;i--){  
  myServo.write(i);
  delay(30);
  distance = calculateDistance();
  Serial.print(i);
  Serial.print(",");
  Serial.print(distance);
  Serial.print(".");
  }
}
// Function for calculating the distance measured by the Ultrasonic sensor
int calculateDistance(){ 
  
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  distance= duration*0.034/2;
  return distance;
}

Như vậy, ta sẽ nhận được các giá trị cho góc và khoảng cách được đo bởi cảm biến từ Arduino thông qua Serial. Các giá trị này sẽ được sử dụng để vẽ radar, các đường thẳng và các đối tượng đã phát hiện.

Link download mã nguồn – Source code: Download

Xem thêm các dự án khác tại: https://www.abcarduino.com/category/arduino-code/

Nguồn: howtomechatronics.com