วันพฤหัสบดีที่ 29 มีนาคม พ.ศ. 2561

ใบงานที่ 6 การควบคุม Servo Motor (SG90) ด้วย Arduino UNO R3

นางสาว กัญญารัตน์  สังขพันธ์ 1สทค.2 6031280023

นาย  จารุเดช  สังข์ประไพ 1สทค.2 6031280027


Servo Motor (SG90)

Servo คืออุปกรณ์มอเตอร์ ที่สามารถควบคุมการหมุนที่แม่นยำ เซอร์โว SG90 มีขนาดเล็กแรงบิด 1.2-1.4 kg/cm

   สีน้ำตาลเป็นสายกราวด์ สีแดงเป็นไฟเข้า 4.8-7.2V สีส้มเป็นสัญญาณอินพุต  หมุน 0-180องศา ถ้าทำให้หมุ่น 360 ต่อเนื่่อง องศาให้ใช้ 2.2K ohm


สเปคของ Servo Motor (SG90)


ขนาด 21.5mmx11.8mmx22.7mm

น้ำหนัก 9 กรัม
ความเร็วเมื่อไม่มีโหลด 0.12 วินาที/ุ60องศา (4.8V)
แรงบิด 1.2-1.4 kg/cm (4.8V)
ทำงานที่อุณหภูมิ -30-60 องศาเซลเซียส
เวลาหยุดก่อนรับคำสั่งใหม่ 7 มิลลิวินาที
ทำงานที่ไฟ 4.8V - 6V


นิยมใช้ร่วมกับ


Mounting Bracket for Servo SG90
Switching Power supply แหล่งจ่ายไฟ 5V 5.5A
Switching Power supply แหล่งจ่ายไฟ 5V 10A
Switching Power supply แหล่งจ่ายไฟ 5V 20A



การควบคุม Servo Motor (SG90) ด้วย Arduino UNO R3

อุปกรณ์

1. Servo Motor (SG90) 1 ตัว




2. ใบพัด 1 ใบ




3. สายไฟผู้-ผู้




4. บอร์ด Arduino 1 บอร์ด







รูปวงจร


Download Frizing file  ที่นี่

Code Program Arduino

สั่งให้มอเตอร์หมุนตั้งแต่ 0-180 องศา

#include <Servo.h>

Servo servo;
int angle = 10;

void setup() {
  servo.attach(8);
  servo.write(angle);
}

void loop() 

 // scan from 0 to 180 degrees
  for(angle = 0 ; angle < 180; angle++)  
  {                                  
    servo.write(angle);               
    delay(15);                   
  } 
  // now scan back from 180 to 0 degrees
  for(angle = 180; angle > 0; angle--)    
  {                                
    servo.write(angle);           
    delay(15);       
  } 
  } 

Download Arduino Code ที่นี่

สั่งให้มอเตอร์หมุนตั้งแต่ 45-135 องศา

#include <Servo.h>

Servo servo;
int angle = 10;

void setup() {
  servo.attach(8);
  servo.write(angle);
}

void loop() 

 // scan from 0 to 180 degrees
  for(angle = 45 ; angle < 135; angle++)  
  {                                  
    servo.write(angle);               
    delay(15);                   
  } 
  // now scan back from 180 to 0 degrees
  for(angle = 135; angle > 45; angle--)    
  {                                
    servo.write(angle);           
    delay(15);       
  } 
  } 

Download Arduino Code ที่นี่

สั่งให้มอเตอร์หมุนตั้งแต่ 90-180 องศา

#include <Servo.h>

Servo servo;
int angle = 10;

void setup() {
  servo.attach(8);
  servo.write(angle);
}


void loop() 

 // scan from 0 to 180 degrees
  for(angle = 90 ; angle < 180; angle++)  
  {                                  
    servo.write(angle);               
    delay(15);                   
  } 
  // now scan back from 180 to 0 degrees
  for(angle = 180; angle > 90; angle--)    
  {                                
    servo.write(angle);           
    delay(15);       
  } 
  } 

Download Arduino Code ที่นี่

อธิบายวงจร 

เมื่อเรากำหนดมุมในโปรแกรม Arduino for(angle = มุมที่ต้องการเริ่ม ; angle < มุมที่ต้องการให้หยุด; angle++) หลังจากกำหนดจุดเริ่มหมุนเสร็จ ต่อมาก็กำหนดจุดหมุนกลับที่  for(angle = มุมที่ต้องการให้หมุนกลับ; angle > มุมที่ต้องการให้หยุดหมุนกลับ; angle--) จากนั้นเมื่อกด Upload ตัว Servo Motor (SG90) จะเริ่มหมุนใบพัดตามมุมที่เราตั้งไว้ ซึ่ง SG90 จะหมุนได้เพียง 180 องศา 

วิดีโอประกอบ

วิดีโอมอเตอร์หมุนตั้งแต่ 0-180 องศา




วิดีโอมอเตอร์หมุนตั้งแต่ 45-135 องศา




วิดีโอมอเตอร์หมุนตั้งแต่ 90-180 องศา


วันอังคารที่ 27 มีนาคม พ.ศ. 2561

ใบงานที่ 5 HC-SR04 with Buzzer

นางสาว กัญญารัตน์  สังขพันธ์ 1สทค.2 6031280023

นาย  จารุเดช  สังข์ประไพ 1สทค.2 6031280027

Buzzer

 Buzzer (บัซเซอร์) คือ ลำโพงแบบแม่เหล็กหรือ แบบเปียโซที่มีวงจรกำเนิดความถี่ (oscillator ) อยู่ภายในตัว ใช้ไฟเลี้ยง 3.3 - 5V สามารถสร้างเสียงเตือนหรือส่งสัญญาณที่เป็นรูปแบบต่างๆได้


โครงสร้างภายใน

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




การนำ Buzzer และ เซนเซอร์ HC-SR04 มาใช้งาน

อุปกรณ์

1. ลำโพง Buzzer 1 ตัว




2. HC-SR04 1 ตัว




3. บอร์ด Arduino 1 บอร์ด




4. สายไฟผู้-ผู้




5. โปรโตรบอร์ด 1 บอร์ด




6. ตัวต้านทาน 220 Ω 1 ตัว




7. LED 1 ตัว




รูปวงจร


Download Frizing file ที่นี่

Code Program Arduino

const int trigPin = 9;
const int echoPin = 10;
int led1=2;
int buzzer=3;
float duration, distance;

void setup()
 {
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(led1,OUTPUT);
 pinMode (buzzer,OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  distance = (duration*.0343)/2;
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.print(" cm ");
  Serial.println();
  Serial.print(distance* 0.39370);
  Serial.println(" inch ");
  delay(20);
  
  if (distance <=30 && distance >=21)
  {
  digitalWrite (buzzer,HIGH);
  digitalWrite (led1,HIGH);
  delay(1000);
  digitalWrite (buzzer,LOW);
  digitalWrite (led1,LOW);
  delay(1000);
  }
  if (distance<=20 && distance >=11)
  {
  digitalWrite (buzzer,HIGH);
  digitalWrite (led1,HIGH);
  delay(500);
  digitalWrite (buzzer,LOW);
  digitalWrite (led1,LOW);
  delay(500);
  }
  else
  {
    digitalWrite (led1,LOW);
    digitalWrite (buzzer,LOW);
  }
   if (distance<=10 && distance >=6)
   {
  digitalWrite (buzzer,HIGH);
  digitalWrite (led1,HIGH);
  delay(200);
  digitalWrite (buzzer,LOW);
  digitalWrite (led1,LOW);
  delay(200);
  }
  else
  {
  digitalWrite (buzzer,LOW);
  digitalWrite (led1,LOW);
  }
  if (distance <=5)
   {
  digitalWrite (buzzer,HIGH);
  digitalWrite (led1,HIGH);
   }
  else
  {
  digitalWrite (buzzer,LOW);
  digitalWrite (led1,LOW);
  }
   if (distance>=31)
   {
   digitalWrite (buzzer,LOW);
   
   digitalWrite (led1,LOW);
  
   }
   }

Download Arduino Code ที่นี่

อธิบายวงจร

เป็นการนำเซนเซอร์ตรวจจับระยะ HC-SR04 มาใช้งาน กับ Buzzer โดยเมื่อวัตถุเข้ามาในระยะที่กำหนด คือตั้งแต่ 6 ซม.ลงมา LED และ Buzzer จะติดค้างไว้ตลอด และเมื่อเพิ่มระยะห่างของวัตถุตั้งแต่ 6 ซม. ขึ้นไป LED และ Buzzer จะติดครั้งละ 0.2 วินาที หากเพิ่มระยะไปอีกเป็นระยะตั้งแต่ 11-20 ซม. LED และ Buzzer จะติดครั้งละ 0.5 วินาที และเมื่อเพิ่มระยะเป็นระยะตั้งแต่ 21-30 ซม. LED และ Buzzer จะติดครั้งละ 1 วินาที สุดท้ายหากนำวัตถุห่างจากระยะเซนเซอร์ตั้งแต่ 31 ซม. ขึ้นไป LED และ Buzzer จะไม่ติดเลยทั้งคู่


วิดีโอประกอบ










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

ใบงานที่ 4 การใช้งานเซนเซอร์วัดระยะทาง HC-SR04 - ถ้า ระยะทางตั้งแต่ 21 – 30 ซม. Led สีเขียวติด 2 ดวง - ถ้า ระยะทางตั้งแต่ 11 – 20 Led สีเหลืองติด 2 ดวง (สีเขียว ยังคงติด) - ถ้า ระยะทางตั้งแต่ 6 - 10 Led สีแดงติด 2 ดวง (สีเขียว และ เหลือง ยังคงติด) - ถ้า ระยะทาง น้อยกว่า 6 ให้ Led กระพริบทั้ง 6 ดวง (ติด 0.3 วินาที ดับ 0.3 วินาที) - ถ้าเงื่อนไขนอกจากนี้ให้ Led ดับทั้งหมด บน serial monitor ให้แสดงระยะทางหน่วยเป็น ซม.

นางสาว กัญญารัตน์  สังขพันธ์ 1สทค.2 6031280023

นาย  จารุเดช  สังข์ประไพ 1สทค.2 6031280027



HC-SR04

หลักการทำงาน

กกกกกกกกHC-SR04 เป็นเซนเซอร์โมดูลสำหรับตรวจจับวัตถุและวัดระยะทางแบบไม่สัมผัส [1-2] โดยใช้คลื่นอัลตราโซนิก ซึ่งเป็นคลื่นเสียงความถี่สูงเกินกว่าการได้ยินของมนุษย์ วัดระยะได้ตั้งแต่ 2 – 400 เซนติเมตร หรือ 1 – 156 นิ้ว สามารถต่อใช้งานกับไมโครคอนโทรลเลอร์ได้ง่าย ใช้พลังงานต่ำ เหมาะกับการนำไปประยุกต์ใช้งานด้านระบบควบคุมอัตโนมัติ หรืองานด้านหุ่นยนต์ หลักการทำงาน จะเหมือนกันกับการตรวจจับวัตถุด้วยเสียงของค้างคาว ตามรูปที่ 1 โดยจะประกอบไปด้วยตัว รับ-ส่ง อัลตราโซนิก ตัวส่งจะส่งคลื่นความถี่ 40 kHz ออกไปในอากาศด้วยความเร็วประมาณ 346 เมตรต่อวินาที และตัวรับจะคอยรับสัญญาณที่สะท้อนกลับจากวัตถุ เมื่อทราบความเร็วในการเคลื่อนที่ของคลื่น, เวลาที่ใช้ในการเดินทางไป-กลับ (t) ก็จะสามารถคำนวณหาระยะห่างของวัตถุ (S) ได้จาก

 S = 346 × 0.5t 

เพื่อให้การคำนวณหาระยะเป็นไปด้วยความง่าย โมดูลเซนเซอร์นี้จึงได้ประมวลผลให้เรียบร้อยแล้ว และส่งผลลัพธ์ของการคำนวณเป็นสัญญาณพัลส์ที่มีความกว้างสัมพันธ์กับระยะทางที่วัดได้

การต่อใช้งาน

โมดูลนี้มีจุดต่อใช้งานทั้งหมด 4 จุด การใช้งานบอร์ด STM32F4DISCOVERY การทดลองในเบื้องต้นสามารถต่อวงจรอย่างง่ายได้โดยใช้โปรโตบอร์ดและสายไฟต่อวงจรตามรูปที่ 2 ทั้งนี้ต้องตรวจสอบคุณสมบัติของพอร์ตของไมโครคอนโทรลเลอร์จากดาต้าชีท [3] ว่าสามารถทนระดับแรงดันลอจิก High (5V) ได้

1. ขา VCC สำหรับต่อแรงดันไฟเลี้ยงไม่เกิน 5V
2. ขา Trig เป็นขาอินพุตรับสัญญาณพัลส์ความกว้าง 10 ไมโครวินาทีเพื่อกระตุ้นการสร้างคลื่นอัลตราโซ  นิกความถี่ 40KHz ออกสู่อากาศจากตัวส่ง
3. ขา Echo เป็นขาเอาต์พุตสำหรับส่งสัญญาณพัลส์ออกจากโมดูลไปยังไมโครคอนโทรลเลอร์ เพื่อตรวจ จับความกว้างของสัญญาณพัลส์และคำนวณเป็นระยะทาง
4. ขา GND สำหรับต่อจุดกราวด์ร่วมแรงดันและสัญญาณ




dddddddตามคุณลักษณะของเซนเซอร์ จะต้องสร้างสัญญาณพัลส์ความกว้างไม่น้อยกว่า 10 msec ป้อนเข้าที่ขา Trig หลังจากนั้นอีกประมาณ 1.4 msec จึงจะเริ่มมีสัญญาณพัลส์เกิดขึ้นที่ขา Echo มีความกว้างของสัญญาณตั้งแต่ 150 usec – 25 msec ซึ่งถ้าหากกว้างกว่านี้จะถือว่าตรวจไม่พบวัตถุ หลังจากนั้นควรหน่วงเวลาออกไปอีก 10 mS จึงจะส่งสัญญาณ Trig ออกไปอีกรอบ


การตรวจจับความกว้างของสัญญาณใช้โมดูล PWM Capture ซึ่งให้เอาต์พุตออกมาเป็นเวลาในหน่วยวินาที และใช้สมการ (2) หรือ (3) เพื่อคำนวณหาระยะทางระหว่างวัตถุที่ตรวจพบ

ระยะทาง (cm) = ความกว้างของสัญญาณ Echo * 106 /58                         (2)

ระยะทาง (inch) = ความกว้างของสัญญาณ Echo * 106 /148                     (3)


การใช้งานเซนเซอร์วัดระยะทาง HC-SR04

อุปกรณ์

1. ตัวต้านทาน 220 Ω 6 ตัว




2. สายไฟผู้-ผู้




3. เซนเซอร์อัลตราโซนิก HC-SR04




4. บอร์ด Arduino 1 บอร์ด




5. โปรโตรบอร์ด 1 บอร์ด




6. LED 6 ดวง




รูปวงจร


Download Frizing file ที่นี่

Code Program Arduino

const int trigPin = 9;
const int echoPin = 10;
int ledGreen1=2;
int ledGreen2=3;
int ledYellow1=4;
int ledYellow2=5;
int ledRed1=6;
int ledRed2=7;
float duration, distance;

void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode (ledGreen1, OUTPUT);
  pinMode (ledGreen2, OUTPUT);
  pinMode (ledYellow1, OUTPUT);
  pinMode (ledYellow2, OUTPUT);
  pinMode (ledRed1, OUTPUT);
  pinMode (ledRed2, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  distance = (duration*.0343)/2;
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.print(" cm");
  Serial.println();
  if (distance >=21)
  {
  digitalWrite(ledGreen1, HIGH);
  digitalWrite(ledGreen2, HIGH);
  }
  else
  {
    digitalWrite(ledYellow1,LOW);
    digitalWrite (ledYellow2,LOW);
    digitalWrite (ledRed1,LOW);
    digitalWrite (ledRed2,LOW); 

    
  }

  if (distance >=11)
  {
  digitalWrite (ledYellow1,HIGH);
  digitalWrite (ledYellow2,HIGH);
  }
  else
  {
   
    digitalWrite (ledRed1,LOW);
    digitalWrite (ledRed2,LOW); 
  }
  if (distance >=6)
  {
    digitalWrite (ledRed1,HIGH);
    digitalWrite (ledRed2,HIGH);
  }
  if (distance <=6)
{
  digitalWrite (ledGreen1, HIGH);
    digitalWrite (ledGreen2, HIGH);
    digitalWrite(ledYellow1,HIGH);
    digitalWrite (ledYellow2,HIGH);
    digitalWrite (ledRed1,HIGH);
    digitalWrite (ledRed2,HIGH);

     delay(300);
      digitalWrite (ledGreen1, LOW);
    digitalWrite (ledGreen2, LOW);
    digitalWrite(ledYellow1,LOW);
    digitalWrite (ledYellow2,LOW);
    digitalWrite (ledRed1,LOW);
    digitalWrite (ledRed2,LOW); 
}
   if (distance>30)
  {
    digitalWrite (ledGreen1, LOW);
    digitalWrite (ledGreen2, LOW);
    digitalWrite(ledYellow1,LOW);
    digitalWrite (ledYellow2,LOW);
    digitalWrite (ledRed1,LOW);
    digitalWrite (ledRed2,LOW); 
  }

  delay(100);
}

Download Arduino Code ที่นี่

อธิบายวงจร


เมื่อเรานำสิ่งของมาบังเซนเซอร์วัดระยะทาง HC-SR04ตามระยะทางที่กำหนดคือ 21-30 ซม. LED หลอดสีเขียวจะติด และเมื่อเข้าใกล้มาอีกเป็นระยะทางตั้งแต่ 11-20 ซม. LED หลอดสีเหลืองจะติด และ LED สีเขียวก็ยังคงติดอยู่เช่นกัน ต่อมาก็ขยับเข้ามาเป็นระยะตั้งแต่ 6-10 ซม. หลอด LED สีแดง จะติดรวมทั้งสีเหลืองและสีเขียวด้วย และเมื่อเข้าใกล้มากกว่า 6 ซม. หลอดไฟทั้ง 6 ดวง จะกระพริบพร้อมกัน 0.3 วินาที และ Serial Monitor ในโปรแกรม Arduino  ก็จะแสดงระยะทางของเซ็นเซอร์

วิดีโอประกอบ