ข้ามไปที่เนื้อหาหลัก

โปรเจค หุ่นยนต์หลบสิ่งกีดขวาง Arduino Nano





โปรเจค หุ่นยนต์หลบสิ่งกีดขวาง Arduino Nano  อุปกรณ์ที่ต้องใช้ก็คือ

      1. 2WD Smart Car Robot Chassis Kits

      2.  Arduino Nano 3.0

      3. Nano Shield for NANO 3.0

      4. Motor Drive Module L298N

     5. สาย Jumper Female to Male ยาว 20cm.

     6. สาย Jumper Female to  Female  ยาว 20cm.
 
     7. สาย Jumper Male to  Male  ยาว 20 cm.

     8. รางถ่านแบบ 18650 ใส่ถ่าน 2 ก้อน

     9. แบตเตอรี่ลิเธียม 18650 จำนวน 2 ก้อน

     10. สกรูหัวกลม+น็อตตัวเมีย ขนาด 3มม ยาว 12 มม.

     11. Ultrasonic Sensor HC-SR04

     12. Mounting Bracket for HC-SR04 แบบสั้น

     13. เซอร์โว MG90S เฟืองโลหะ

     14. Mounting Bracket for Servo SG90


 เรียนรู้ การใช้งาน Arduino Nano 3.0 และ การติดตั้งไดรเวอร์

https://robotsiam.blogspot.com/2016/11/arduino-nano-30.html



เริ่มต้นด้วยการ ประกอบ 2WD Smart Car Robot Chassis Kits



ภาพรวม การประกอบ รางถ่านแบบ 18650 และ เชื่อมต่อ Motor Drive Module L298N  เข้ากับ Nano Shield for NANO 3.0  ตามรูป



เริ่มด้วย ใช้ สกรูหัวกลม+น็อตตัวเมีย ยาว 12 มม. ยึด รางถ่านแบบ 18650 และ เชื่อมต่อ สายสีแดง ขั้วบวก เข้าที่ เพาเวอร์สวิตซ์สำหรับเปิดปิด (ON / OFF )


ประกอบ Motor Drive Module L298N



ใช้ สกรูหัวกลม+น็อตตัวเมีย ยาว 12 มม. ยึด Motor Drive Module L298N


 เชื่อมต่อ สาย Jumper Male to Male (ผู้-ผู้) ยาว 20cm. สีแดง เข้าที่
 เพาเวอร์สวิตซ์สำหรับเปิดปิด (ON / OFF ) อีกด้านที่เหลือ



 เชื่อมต่อ สาย Jumper Male to Male (ผู้-ผู้) ยาว 20cm. สีดำ เข้ากับสายไฟสีดำ ขั้วลบ จากรางถ่าน และ อีกด้าน เข้ากับ กราวด์ GND ของ Motor Drive Module L298N


 เชื่อมต่อ สาย Jumper Male to Male (ผู้-ผู้) ยาว 20cm. จากจุดต่อ มอเตอร์ ของ Motor Drive Module L298N เข้า กับ ขั้วของ มอเตอร์ ทั้ง 2 ตัว จากตัวอย่าง คือ คือสีเหลืองกับสีส้ม และ สีเขียวกับสีน้ำเงิน



ใช้ สกรูหัวกลม+น็อตตัวเมีย ยาว 12 มม. ยึด Nano Shield for NANO 3.0



ประกอบ บอร์ด Arduino Nano 3.0 เข้ากับ Nano Shield for NANO 3.0




ใช้ สาย Jumper Female to  Male (เมีย-ผู้)  ยาว 20cm. เชื่อมต่อ ระหว่าง Motor Drive Module L298N กับ Nano Shield for NANO 3.0



ตัวอย่าง ใช้สายสีเทาเข้ากับ กราวด์ GND ของ Motor Drive Module L298N และ สายสีขาว เข้ากับ 5V ของ Motor Drive Module L298N




และสายสีเทาเข้ากับ กราวด์ GND คือ G ของ Nano Shield for NANO 3.0 และ สายสีขาว เข้ากับ VCC คือ V ของ Nano Shield for NANO 3.0



ภาพ การใช้งาน ขาต่างๆ ของ บอร์ด Arduino Nano 3.0 


ใช้สาย Jumper Female to  Female  (เมีย-เมีย) ยาว 20cm. เชื่อมต่อระหว่าง Motor Drive Module L298N  กับ Nano Shield for NANO 3.0





การเชื่อมต่อ Motor  L298N กับ Nano Shield for NANO 3.0

 IN1  <-> 10
 IN2  <-> 11
 IN3  <->  6
 IN4  <->  5









หลังจากนั้นให้ทดสอบเบื้องต้น ว่าการหมุนของล้อถูกต้องหรือไม่ โดย

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




//Motor A
const int motorPin1  = 11;
const int motorPin2  = 10;
//Motor B
const int motorPin3  = 6;
const int motorPin4  = 5;

//This lets you run the loop a single time for testing
boolean run = true;

void setup() {


}

void loop() {

  if (run) {
 
    delay(2000);
    moveForward();
    delay(500);
    moveBackward();
    delay(500);
    turnLeft();
    delay(500);
    turnRight();
    delay(500);
    moveStop();


    //This stops the loop
    run = false;
  }
}


void moveStop() {
  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, 0);
}

void moveForward() {


  analogWrite(motorPin1, 180);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, 180);
  analogWrite(motorPin4, 0);

}

void moveBackward() {

  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, 180);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, 180);

}

void turnRight() {
  analogWrite(motorPin1, 180);
  analogWrite(motorPin2, 0);
  analogWrite(motorPin3, 0);
  analogWrite(motorPin4, 180);
  delay(300);
  moveForward();

}
void turnLeft() {
  analogWrite(motorPin1, 0);
  analogWrite(motorPin2, 180);
  analogWrite(motorPin3, 180);
  analogWrite(motorPin4, 0);
  delay(300);
  moveForward();
}


เชื่อต่อ สาย USB ระหวาง PC กับ บอร์ด Arduino Nano


เลือก บอร์ด Arduino Nano




*** ถ้ามีปัญหาในการอัพโหลด ***


การใช้ Arduino IDE เวอร์ชั่นที่ใหม่กว่า ถ้ามีปัญหาในการอัพโหลด ให้ไปที่ Processor แล้วเปลี่ยนไปเลือกเป็น ATmega328P (Old Bootloader)





ใส่ แบตเตอรี่ลิเธียม 18650 จำนวน 2 ก้อน ไปที่ รางถ่าน และ ตรวจสอบขั้วของแบตเตอรี่ ใส่ถุกต้องหรือไม่


โค้ดนี้จะทำงานเพียง 1 ครั้ง ถ้าต้องการทดลองใหม่ให้ถอด แบตเตอรี่ออก (หรือ ปิดเปิด สวิทช์ไฟใหม่) แล้วใส่เข้าไปใหม่ เมื่อล้อหมุน ตรวจสอบการหมุน ขอล้อต่างๆถูกต้องหรือไม่ ถ้าต่อวงจรถูกต้อง ล้อ ทั้งสองข้างจะหมุนไปข้างหน้า 1ครั้ง กลับหลัง 1 ครั้ง และ หมุนล้อเดียวข้างละหนึ่งครั้งแล้วจึงหยุด ถ้าไม่ถูกต้องให้แก้ไข เช่นการต่อขั้วของมอเตอร์ผิด เป็นต้น

ถ้าทุกอย่างถูกต้อง ทดลอง ยกลงวางที่พื้นแล้วทดสอบ อีกครั้ง ถอด แบตเตอรี่ออก (หรือ ปิดเปิด สวิทช์ไฟใหม่) แล้วใส่เข้าไปใหม่ ถ้าทุกอย่างถูกต้อง รถจะเคลื่อนที่ไปข้างหน้า-ถอยหลัง แล้ว เลี้ยวซ้าย แล้ว จึง เลี้ยวขวา


วีดีโอผลลัพธ์  ทดสอบการต่อขั้วมอเตอร์และ การหมุนของล้อ



ยึด  Mounting Bracket for Servo SG90



ยึด เซอร์โว MG90S



เชื่อมต่อ เซอร์โว MG90S ที่ ขา D 9 , V และ G







ตั้งค่าองศาของเซอร์โวร์มอเตอร์ ให้เท่ากับ 90 องศา

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


#include <Servo.h>

Servo myservo;  //ประกาศตัวแปร 
myservo เรียกใช้งานคำสั่งจาก Library
 
void setup()
 
{
 
  myservo.attach(9); //ให้ Digital Pin 9 เป็นขาของ Servo
 
}

void loop()
{


  myservo.write(90);  //หมุน 90 องศา
  delay(1000);


}




ยึดชิ้นส่วน ของ  เซอร์โว MG90S



ยึด Mounting Bracket for HC-SR04 แบบสั้น



เชื่อมต่อ Ultrasonic Sensor HC-SR04



ใช้สาย Jumper Female to  Female  ยาว 20cm. เชื่อมต่อระหว่าง Ultrasonic Sensor HC-SR04 กับ Nano Shield for NANO 3.0

HC-SR04 <-> Nano Shield

TRIG   <-> A4
ECHO <-> A5
Vcc <-> V
Gnd <-> G



ใส่ถ่าน 18650 จำนวน 2 ก้อน



ภาพรวม หุ่นยนต์หลบสิ่งกีดขวาง Arduino Nano





การเพิ่มไลบรารี่ NewPing


ไลบรารี่ NewPing คือ ไลบรารี่ ฟังก์ชัน ที่มีผู้พัฒนาเตรียมพร้อมไว้ให้เราแล้ว โดยให้ไปดาวน์โหลด ไลบรารี่ NewPing ได้ที่

  https://bitbucket.org/teckel12/arduino-new-ping/downloads

จากนั้นให้ทำการเพิ่ม ไลบรารี่ NewPing ให้กับ Arduino (IDE) ของเรา ตามรูป



เลือกไฟล์ ไลบรารี่ NewPing  .ZIP ที่เรา ดาวน์โหลดมาอยู่ในคอมพิวเตอร์ของเรา จากนั้นคลิก Open โปรแกรม จะเพิ่ม ไลบรารี่ NewPing เข้าสู่ Arduino (IDE) ของเรา



เมื่อเข้าดูที่ Include Library จะพบ ไลบรารี่ NewPing เพิ่มเข้ามาด้านล่างสุด
(สามารถใช้วิธีการเดียวกันนี้ ในการ การเพิ่ม ไลบรารี่ ฟังก์ชัน อื่นๆ ได้เช่นกัน )



เปิดโปรแกรม Arduino (IDE) และ Upload โค้ด หุ่นยนต์หลบสิ่งกีดขวาง Arduino Nano ไปยัง บอร์ด Arduino Nano





  // Arduino Obstacle Avoiding Robot              
 // Code adapted from http://www.educ8s.tv                                         
 // First Include the NewPing and Servo Libraries 


#include <NewPing.h>
#include <Servo.h> 

#define TRIG_PIN A4 
#define ECHO_PIN A5 
#define MAX_DISTANCE 200 
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); 
Servo myservo;   

boolean goesForward=false;
int distance = 100;
int speedSet = 0;

//Motor A
const int motorPin1  = 11;  
const int motorPin2  = 10;  
//Motor B
const int motorPin3  = 6; 
const int motorPin4  = 5;  

void setup() {

  myservo.attach(9);  
  myservo.write(115); 
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
}

void loop() {
 int distanceR = 0;
 int distanceL =  0;
 delay(40);
 if(distance<=20)
 {
  moveStop();
  delay(100);
  moveBackward();
  delay(300);
  moveStop();
  delay(200);
  distanceR = lookRight();
  delay(200);
  distanceL = lookLeft();
  delay(200);

  if(distanceR>=distanceL)
  {
    turnRight();
    moveStop();
  }else
  {
    turnLeft();
    moveStop();
  }
 }else
 {
  moveForward();
 }
 distance = readPing();
}

int lookRight()
{
    myservo.write(50); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(115); 
    return distance;
}

int lookLeft()
{
    myservo.write(170); 
    delay(500);
    int distance = readPing();
    delay(100);
    myservo.write(115); 
    return distance;
    delay(100);
}

int readPing() { 
  delay(70);
  int cm = sonar.ping_cm();
  if(cm==0)
  {
    cm = 250;
  }
  return cm;
}

void moveStop() {
  analogWrite(motorPin1, 0);
    analogWrite(motorPin2, 0);
    analogWrite(motorPin3, 0);
    analogWrite(motorPin4, 0);
  } 
  
void moveForward() {


    analogWrite(motorPin1, 180);
    analogWrite(motorPin2, 0);
    analogWrite(motorPin3, 180);
    analogWrite(motorPin4, 0);  
  
}

void moveBackward() {
    
    analogWrite(motorPin1, 0);
    analogWrite(motorPin2, 180);
    analogWrite(motorPin3, 0);
    analogWrite(motorPin4, 180);   
  
}  

void turnRight() {
 analogWrite(motorPin1, 180);
    analogWrite(motorPin2, 0);
  analogWrite(motorPin3, 0);
    analogWrite(motorPin4, 180);    
  delay(300);
 moveForward();      
  
void turnLeft() {
  analogWrite(motorPin1, 0);
    analogWrite(motorPin2, 180);   
 analogWrite(motorPin3, 180);
    analogWrite(motorPin4, 0);     
  delay(300);
   moveForward();
}



วีดีโอผลลัพธ์ โปรเจค หุ่นยนต์หลบสิ่งกีดขวาง Arduino Nano
  

โพสต์ยอดนิยมจากบล็อกนี้

การใช้งาน IR Infrared Obstacle Avoidance Sensor Module

โมดูลเซ็นเซอร์แสงสำหรับตรวจจับวัตถุกีดขวาง   IR Infrared Obstacle Avoidance Sensor Module โมดูลเซ็นเซอร์แสงสำหรับตรวจจับวัตถุกีดขวาง    IR Infrared Obstacle Avoidance Sensor Module โดยโมดูลนี้ จะมีตัวรับและตัวส่ง infrared ในตัว ตัวสัญญาณ(สีขาว) infrared จะส่งสัญญาณออกมา และเมื่อมีวัตถุมาบัง คลื่นสัญญาณ infrared  ที่ถูกสั่งออกมาจะสะท้องกลับไปเข้าตัวรับสัญญาณ (สีดำ) สามารถนำมาใช้ตรวจจับวัตถุที่อยู่ตรงหน้าได้ และสามารถปรับความไว ระยะการตรวจจับ ใกล้หรือไกลได้ ภายตัวเซ็นเซอร์แบบนี้จะมีตัวส่ง Emitter และ ตัวรับ Receiver ติดตั้งภายในตัวเดียวกัน ทำให้ไม่จำเป็นต้องเดินสายไฟทั้งสองฝั่ง เหมือนแบบ Opposed Mode ทำให้การติดตั้งใช้งานได้ง่ายกว่า แต่อย่างไรก็ตามจำเป็นต้องติดตั้งตัวแผ่นสะท้อนหรือ Reflector ไว้ตรงข้ามกับตัวเซ็นเซอร์เอง โดยโฟโต้เซ็นเซอร์แบบที่ใช้แผ่นสะท้อนแบบนี้จะเหมาะสำหรับชิ้นงานที่มีลักษณะทึบแสงไม่เป็นมันวาว เนื่องจากอาจทำให้ตัวเซ็นเซอร์เข้าใจผิดว่าเป็นตัวแผ่นสะท้อน และ ทำให้ทำงานผิดพลาดได้ เซ็นเซอร์แบบนี้จะมีช่วงในการทำงาน หรือ ระยะในการตรวจจับจะได้ใกล้กว่าแบบ O

การติดตั้ง Library ของ DHT Sensor DHT11 , DHT21 , DHT22

การติดตั้ง Library ของ DHT Sensor ไลบรารี DHT ใช้สำหรับในการให้เซ็นเซอร์ DHT  อ่านอุณหภูมิและความชื้นด้วย  Arduino หรือ ESP8266 ได้ คลิกที่นี่เพื่อดาวน์โหลดไลบรารี ของเซ็นเซอร์ DHT https://github.com/adafruit/DHT-sensor-library เปิดโปรแกรม Arduino IDE  ไปที่ Skecth -> Include Library -> Add .ZIP Library... ไปที่ ไลบรารี DHT-sensor-library ที่เรา ดาวน์โหลด มา ตรวจสอบที่ Skecth -> Include Library  จะพบ ไลบรารี DHT sensor library เพิ่มเข้ามาใน Arduino IDE ของเรา ไปที่ Skecth -> Include Library -> Manage Libraries... ไปที่ช่องค้นหา พิมพ์ DHT -> Enter (เพื่อค้นหา DHT sensor library ) เมื่อพบ DHT sensor library แล้ว ให้คลิก More info คลิกที่ Select Vers.. ในตัวอย่าง เลือก Version 1.2.3 คลิก Install คลิก Close เพิ่ม #include <DHT.h> ไปที่ส่วนบนสุดของโค้ด #include <DHT.h> void setup() {   // put your setup code here, to run once: } void loop() {   // put your main

ESP32 #2: การติดตั้ง Arduino core for ESP32 WiFi chip

ในบทความนี้จะเป็นการแนะนำการติดตั้งโปรแกรม Arduino IDE ตั้งแต่ต้น ไปจนถึงการติดตั้งชุดพัฒนา Arduino core for ESP32 WiFi chip และ การตรวจสอบว่าติดตั้งสำเร็จหรือไม่ “Arduino” แต่เดิมเป็นแพลตฟอร์มที่ใช้ในการพัฒนาเฟิร์มแวร์ให้กับบอร์ด Arudino เท่านั้น แต่ภายหลังกลุ่มผู้พัฒนาโปรแกรม Arduino IDE ได้เริ่มรองรับการติดตั้งชุดพัฒนาเฟิร์มแวร์ให้กับบอร์ดอื่น ๆ ด้วย ทำให้บอร์ดอื่น ๆ ที่รองรับการเขียนโปรแกรมด้วยภาษา C/C++ สามารถเข้ามาใช้โปรแกรม Arduino IDE ในการพัฒนาได้ นอกจากข้อดีของโปรแกรม Arduino IDE แล้ว ชุดไลบารี่ต่าง ๆ ที่ทำมารองรับกับแพลตฟอร์ม Arduino ก็จะสามารถนำมาใช้งานกับบอร์ดอื่น ๆ ได้ด้วย การจะใช้ Arduino core for ESP32 กับ Arduino IDE ได้นั้น มีขั้นตอนดังนี้ คือ 1. ติดตั้งโปรแกรม Arduino (IDE) ลิงค์ดาวโหลด Arduino (IDE)  https://www.arduino.cc/en/Main/Software 2. ติดตั้ง แพลตฟอร์ม ESP32 ในการเริ่มต้นเราจะต้องอัปเดตผู้จัดการบอร์ดด้วย URL ที่กำหนดเอง เปิด Arduino IDE และไปที่ File > Preferences คัดลอก URL ด้านล่างลงใน Additional Board Manager URLs: แล้ว คลิก