วันจันทร์ที่ 23 กรกฎาคม พ.ศ. 2561

หุ่นยนต์หลบสิ่งกีดขวาง Arduino 2WD







อุปกรณ์หลัก

        Arduino UNO R3

           - Ultrasonic Module HC-SR04

           - Motor Drive Module L298N

           - motor

Wiring diagram




ทดสอบการทำงานของ HC-SR04

#include <NewPing.h>

NewPing sonar(10, 11);

long inches;

void setup() {

Serial.begin(9600);
}

void loop() {
delay(50);

inches = sonar.ping_in();

Serial.print(inches);
Serial.print(" in.");
Serial.print("\n");

}

            Serial Monitor จะแสดงค่า ระยะความห่างของมือเรากับ HC-SR04 หน่วยเป็น นิ้ว (inch) ตามที่เราเครื่อนไหว แสดงว่า โมดูลอัลตร้าโซนิค HC-SR04 ของเรา นั้นพร้อมใช้งานแล้วครับ


อุปกรณ์ที่ต้องเพิ่มเติมก็คือ


1. หลอดไฟ LED สีเขียว จำนวน 1 ตัว

2. หลอดไฟ LED สีแดง จำนวน 1 ตัว
3. หลอดไฟ LED สีเหลือง จำนวน 1 ตัว
4. รีซิสเตอร์ 220 Ohm 1/4 Watt 5%  จำนวน 3 ตัว

ต่อวงจรเพิ่มดังนี้
 





เปิดโปรแกรม Arduino (IDE) และ Upload โค้ดนี้ ไปยัง บอร์ด Arduino UNO R3



#include <NewPing.h>


//Tell the Arduino where the sensor is hooked up
NewPing sonar(10, 11);

int enableA = 3;
int pinA1 = 6;
int pinA2 = 7;

int enableB = 5;
int pinB1 = 8;
int pinB2 = 9;

long inches;

void setup() {
  pinMode(enableA, OUTPUT);
  pinMode(pinA1, OUTPUT);
  pinMode(pinA2, OUTPUT);

  pinMode(enableB, OUTPUT);
  pinMode(pinB1, OUTPUT);
  pinMode(pinB2, OUTPUT);

  pinMode(2, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);

}

void loop() {

  analogWrite(enableA, 200);
  analogWrite(enableB, 200);

  inches = sonar.ping_in();

  if (inches < 5) {
    analogWrite(enableA, 255);
    analogWrite(enableB, 255);
    digitalWrite(2, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, HIGH);
    backward(400);
    coast(200);
    turnLeft(400);
    coast(200);

  }
  else if (inches >= 5  and inches < 30 ) {
    forward(1);
    digitalWrite(2, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(13, LOW);

  }
  else {
    forward(1);
    digitalWrite(2, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
  }
}

//Define high-level H-bridge commands

void enableMotors()
{
  motorAOn();
  motorBOn();
}

void disableMotors()
{
  motorAOff();
  motorBOff();
}

void forward(int time)
{
  motorAForward();
  motorBForward();
  delay(time);
}

void backward(int time)
{
  motorABackward();
  motorBBackward();
  delay(time);
}

void turnLeft(int time)
{
  motorABackward();
  motorBForward();
  delay(time);
}

void turnRight(int time)
{
  motorAForward();
  motorBBackward();
  delay(time);
}

void coast(int time)
{
  motorACoast();
  motorBCoast();
  delay(time);
}

void brake(int time)
{
  motorABrake();
  motorBBrake();
  delay(time);
}
//Define low-level H-bridge commands

//enable motors
void motorAOn()
{
  digitalWrite(enableA, HIGH);
}

void motorBOn()
{
  digitalWrite(enableB, HIGH);
}

//disable motors
void motorAOff()
{
  digitalWrite(enableB, LOW);
}

void motorBOff()
{
  digitalWrite(enableA, LOW);
}

//motor A controls
void motorAForward()
{
  digitalWrite(pinA1, HIGH);
  digitalWrite(pinA2, LOW);
}

void motorABackward()
{
  digitalWrite(pinA1, LOW);
  digitalWrite(pinA2, HIGH);
}

//motor B controls
void motorBForward()
{
  digitalWrite(pinB1, HIGH);
  digitalWrite(pinB2, LOW);
}

void motorBBackward()
{
  digitalWrite(pinB1, LOW);
  digitalWrite(pinB2, HIGH);
}

//coasting and braking
void motorACoast()
{
  digitalWrite(pinA1, LOW);
  digitalWrite(pinA2, LOW);
}

void motorABrake()
{
  digitalWrite(pinA1, HIGH);
  digitalWrite(pinA2, HIGH);
}

void motorBCoast()
{
  digitalWrite(pinB1, LOW);
  digitalWrite(pinB2, LOW);
}

void motorBBrake()
{
  digitalWrite(pinB1, HIGH);
  digitalWrite(pinB2, HIGH);

}

  การแสดงผลของ LED คือ

1. เมื่อไม่มีสิ่งกีดขวาง หรือ
มีสิ่งกีดขวางในระยะมากกว่า 30 นิ้ว LED สีเขียวจะติด
2. เมื่อมีสิ่งกีดขวางในระยะ 5 - 30 นิ้ว LED สีเหลืองจะติด
3. เมื่อมีสิ่งกีดขวางในระยะ น้อยกว่า 5 นิ้ว LED สีแดงจะติด

จ่ทดสอบ




ไม่มีความคิดเห็น:

แสดงความคิดเห็น

งานแก้ไข แยก อธิบายส่วนต่างๆของproject

Hardware 1.Arduino uno r3 2.bluetooth hc 06 3.1N4007 4.2N2222 5.relay 6.load INPUT 1.bluetooth hc 06 OUTPUT 1.relay 2.lo...