Sơ đồ mạch điện của Robotics Car

Cập nhật vào : Thứ bảy - 05/01/2019 03:46


Sơ đồ mạch điện của Robotics Car

Lập trình

#include <Servo.h>// Thư viện điều khiển servo 
// Khai báo đối tượng myservo dùng để điều khiển servo
Servo gServo;          
#define SERVO_PIN 9

const int trig = 8;     // chân trig của HC-SR04
const int echo = 10;     // chân echo của HC-SR04

#define IN1 4
#define IN2 5
#define IN3 6
#define IN4 7
#define MAX_SPEED 255 //từ 0-255
#define MIN_SPEED 0

//vat can o huong
int huong_trai = 0;
int huong_thang = 0;
int huong_phai = 0;

void setup ()
{
    pinMode(trig,OUTPUT); // chân trig sẽ phát tín hiệu
    pinMode(echo,INPUT); // chân echo sẽ nhận tín hiệu
    //dieu khien dong co
    pinMode(IN1, OUTPUT);
    pinMode(IN2, OUTPUT);
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);  
    //giao tiếp Serial với baudrate 9600
    //Cài đặt chức năng điều khiển servo cho chân servoPin  
    Serial.begin(9600);
    gServo.attach(SERVO_PIN);
    gServo.write(90);
}

void quay_tim_doi_tuong()
{
    gServo.write(10);delay(500);
    huong_trai = tinh_khoang_cach();
    gServo.write(90);delay(500);
    huong_thang = tinh_khoang_cach();
    gServo.write(170);delay(500);
    huong_phai = tinh_khoang_cach();
    gServo.write(90);
}

int tinh_khoang_cach()
{
    /* Phát xung từ chân trig */
    digitalWrite(trig,0);   // tắt chân trig
    delayMicroseconds(2);
    digitalWrite(trig,1);   // phát xung từ chân trig
    delayMicroseconds(5);   // xung có độ dài 5 microSeconds
    digitalWrite(trig,0);   // tắt chân trig
    /* Tính toán thời gian */
    // Đo độ rộng xung HIGH ở chân echo. 
    unsigned long duration = pulseIn(echo,HIGH);  
    // Tính khoảng cách đến vật.
    int distance = int(duration/2/29.412);
    return distance;
}

void motor_1_Dung() {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
}
 
void motor_2_Dung() {
  digitalWrite(IN3, LOW);
  digitalWrite(IN4, LOW);
}
 
void motor_1_Tien(int speed) { //speed: từ 0 - MAX_SPEED
  speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
  digitalWrite(IN1, HIGH);// chân này không có PWM
  analogWrite(IN2, 255 - speed);
}
 
void motor_1_Lui(int speed) {
  speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
  digitalWrite(IN1, LOW);// chân này không có PWM
  analogWrite(IN2, speed);
}
 
void motor_2_Tien(int speed) { //speed: từ 0 - MAX_SPEED
  speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
  analogWrite(IN3, speed);
  digitalWrite(IN4, LOW);// chân này không có PWM
}
 
void motor_2_Lui(int speed) {
  speed = constrain(speed, MIN_SPEED, MAX_SPEED);//đảm báo giá trị nằm trong một khoảng từ 0 - MAX_SPEED - http://arduino.vn/reference/constrain
  digitalWrite(IN3, LOW);// chân này không có PWM
  analogWrite(IN4, speed);
}

void xe_dung ()
{
  motor_1_Dung();
  motor_2_Dung();
}
void xe_tien (int speed)
{
  motor_1_Tien(speed); // motor 1 tiến
  motor_2_Tien(speed); // motor 2 tiến
}
void xe_lui (int speed)
{
  motor_1_Lui(speed); // motor 1 lui
  motor_2_Lui(speed); // motor 2 lui
}
void xe_lui_trai (int speed)
{
  motor_1_Lui(speed); // motor 1 lui
  motor_2_Dung();
}
void xe_lui_phai (int speed)
{
  motor_2_Lui(speed); // motor 1 lui
  motor_1_Dung();
}
void xe_xoay_tron (int speed)
{
  motor_1_Tien(speed); // motor 1 tiến
  motor_2_Lui(speed); // motor 2 lui
}
void xe_re_trai (int speed)
{
  motor_1_Tien(speed); // motor 1 tiến
  motor_2_Dung(); // motor 2 dung
}
void xe_re_phai(int speed)
{
  motor_2_Tien(speed); // motor 2 tiến
  motor_1_Dung(); // motor 1 dung
}

void di_chuyen()
{
   int tr = 0;
   int pt = 0;
   int th = 0;
   huong_thang = tinh_khoang_cach();
   if ( huong_thang <= 15) 
   {
     xe_dung ();
     quay_tim_doi_tuong(); 
     if ( huong_phai > huong_trai )
     {
        xe_lui(MAX_SPEED); delay(300); xe_dung ();
        xe_lui_trai(MAX_SPEED); pt = 1;
        delay(500); xe_dung ();
     }
     else
     {
        xe_lui(MAX_SPEED); delay(300); xe_dung ();
        xe_lui_phai(MAX_SPEED); tr = 1;
        delay(500); xe_dung ();
     }
   }
   else
   { 
     xe_tien(MAX_SPEED);
     th = 1;
   }
   if ( pt == 0 && tr == 0 && th == 0 )
   {
     xe_lui(MAX_SPEED); delay(1000); xe_dung (); 
   }
}
void loop ()
{       
   di_chuyen();
}

 


Sửa lần cuối vào : Thứ bảy - 05/01/2019 03:46

 

HỖ TRỢ 24/7

Kinh doanh:

Di động: 086.924.3838

Email: info@vinagon.com

VĂN PHÒNG HÀ NỘI

  • P628 HH1A Linh Đàm - Hoàng Mai - Hà Nội
  • 086.924.3838 Fax: 086.924.3838
  • Kinh Doanh : info@vinagon.com

XƯỞNG SẢN XUẤT

  • C6,C7 Khuất Duy Tiến, Thanh Xuân Bắc, Thanh Xuân, Hà Nội.
  • Hotline: 085.99999.25