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

เครื่องชุดประตูเลื่อนอัตโนมัติ (Automatics door)

เครื่องชุดประตูเลื่อนอัตโนมัติ (Automatics door)

โดย นางสาวสุรัมภา จารัตน์ (surumpa@hotmail.com)
สาขาวิศวกรรมแมคคาทรอนิกส์ ภาควิชาครุศาสตร์เครื่องกล มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าพระนครเหนือ

Download: Simulink Model File (proj13_AutomaticsDoor.7z)

ที่มาและความเป็นมาของโครงงาน

แนวคิดในการออกแบบชุดประตูเลื่อนอัตโนมัติ

การใช้งานประตูเลื่อนอัตโนมัติในปัจจุบันเป็นไปอย่างแพร่หลาย เราจึงคิดวิธีการทาประตูเลื่อนโดยหาวิธีการใหม่ที่ประหยัดต้นทุนมากกว่าประตูอัตโนมัติทั่วไป โดยใช้บอร์ดไมโครคอนโทรลเลอร์เป็นอุปกรณ์หลักในการใช้งาน เพื่อควบคุมการเปิดปิดประตูโดยอัตโนมัติ

คุณสมบัติการทำงานของโครงงาน

  • สามารถเปิดประตูเมื่อมีคนเข้ามาได้อย่างรวดเร็ว
  • สามารถปิดประตูตามเวลาที่กาหนดไว้ได้
  • สามารถเพิ่มลดความเร็วในการเปิดปิดประตูได้ จากการปรับค่าในวงจรภาคกาลัง
  • ประตูจะเปิดเมื่อมีคนเข้าประตูมาและจะปิดเองโดยอัตโนมัติใน 2 วินาที ตามโปรแกรมที่วางไว้
KMUTNB013_001_Automatic Door
รูปที่ 1 ภาพด้านหน้าชิ้นงาน
รูปที่ 2 วงจรการต่อใช้งานจริง
รูปที่ 2 วงจรการต่อใช้งานจริง
รูปที่ 3 วงจรการต่อใช้งานจริงของบอร์ด STM32F407VG
รูปที่ 3 วงจรการต่อใช้งานจริงของบอร์ด STM32F407VG
รูปที่ 4 วงจรการต่อใช้งานจริงของบอร์ดไดร์ฟ
รูปที่ 4 วงจรการต่อใช้งานจริงของบอร์ดไดร์ฟ
รูปที่ 5 วงจรการต่อใช้งานจริงของชุดแปลงไฟ
รูปที่ 5 วงจรการต่อใช้งานจริงของชุดแปลงไฟ

การต่อวงจรสำหรับวงจรขับมอเตอร์อัตโนมัติ

รูปที่ 6 วงจรสมบูรณ์
รูปที่ 6 วงจรสมบูรณ์

วงจรการต่อวงจรที่สมบูรณ์ของโครงงานฯ

จากบอร์ด STM32F407VG ใช้ Port PA0 รับค่าจากเซนเซอร์ มาประมวลผลข้างในโปรแกรม Math lab โดยส่ง out put ออกมาที่ Port PE12 และ Port PE13 ไปยังบอร์ดไดร์ฟมอเตอร์ ส่วน Port PE14 เป็น Port ที่ส่งสัญญาณ PWM ไปยังบอร์ดไดร์ฟมอเตอร์ นำไปเลี้ยง 5V และ Ground ของบอร์ด STM32F407VG ต่อให้กับ Photo Sensor เพื่อไปเลี้ยงเซนเซอร์ด้วย ส่วนไฟเลี้ยงของบอร์ดไดร์ฟมอเตอร์นั้นใช้ไฟเลี้ยงจากแหล่งจ่ายอื่นจ่ายเข้าไปด้วย เนื่องจากที่ต้องนำแหล่งนอกบอร์ด STM32F407VG มาใช้นั้น เป็นเพราะกระแสไม่เพียงพอจะทำให้มอเตอร์ไม่สามารถหมุนได้
โดยส่วนประกอบของวงจรประกอบไปด้วย
  1. บอร์ด STM32F407VG
  2. โฟโต้เซนเซอร์
  3. Limit switch
  4. สายโยงเข้าชุดไดร์ฟมอเตอร์

โปรแกรม Simulink ที่สมบูรณ์ของโครงงานฯ

รูปที่ 7 โปรแกรม Simulink ของโครงงานชุดประตูเลื่อนอัตโนมัติ (Automatics door) จา
รูปที่ 7 โปรแกรม Simulink ของโครงงานชุดประตูเลื่อนอัตโนมัติ (Automatics door)
จากรูปที่ 7 โค้ดโปรแกรม อันดับแรก ทำการเรียก Target Setup ออกมาก่อนจาก Waijung Blackest เพื่อเป็นการบอกว่า ขณะนี้กาลังใช้บอร์ดไมโครคอนโทรลเลอร์ STM32F407VG อยู่ จากนั้นทำการเรียก Digital Output ออกมา เพื่อเป็นการบอกว่า สัญญาณจากตัวเซนเซอร์ของโครงงานนี้มีสัญญาณออกมาเป็นดิจิตอล (1 และ 0)  โดย Port ที่เลือกใช้รับสัญญาณจากเซนเซอร์มานั้น ใช้ Port PA0 เมื่อรับสัญญาณมาแล้ว เราก็เลือกฟังก์ชั่น Embedded เพื่อทำการวางเงื่อนไขให้กับการทำงานตามที่ต้องการ (จะอธิบายส่วนของ Embedded ในรูปที่ 8 ต่อไป) เมื่อเรากำหนดเงื่อนไขตามที่ต้องการเรียบร้อยแล้ว ทำการเรียกฟังก์ชั่น State Flow ออกมาใช้เพื่อทำการหน่วงเวลา (จะทำการหน่วงเวลาในรูปที่ 9 ต่อไป) เมื่อทำการหน่วงเวลาเรียบร้อยแล้ว จะส่งสัญญาณ Output ออกมา 2 Port คือ Port PE12 และ PE13 เพื่อนำไปต่อเข้าที่บอร์ดไดร์ฟ สั่งมอเตอร์ให้หมุนเมื่อมีเงื่อนไขตามที่ตั้งในฟังก์ชั่น Embedded และฟังก์ชั่น State Flow ไว้ อีกส่วนหนึ่งนั้นเป็นส่วนของการจ่ายพัลซ์ให้กับบอร์ดไดร์ฟมอเตอร์เพื่อเป็นการ Tick สัญญาณ เราจึงทำการเรียกใช้งาน Pulse Generator เพื่อทำการจ่ายสัญญาณพัลซ์ออกที่ Port PE14 เพื่อนำสัญญาณจาก Port PE14 นั้นไปต่อเข้าที่บอร์ดไดร์ฟต่อไป
รูปที่ 8 โค้ดของ Embedded Matlab
รูปที่ 8 โค้ดของ Embedded Matlab
จากรูปที่ 8 ในส่วนนี้คือส่วนของฟังก์ชั่น Embedded
KMUTNB013_008-1_Automatic Door
รูปที่ 9 โปรแกรม Simulink ในชุด State flow ของโครงงานชุดประตูเลื่อนอัตโนมัติ (Automatics door)
รูปที่ 9 โปรแกรม Simulink ในชุด State flow ของโครงงาน
จากรูปที่ 9 เริ่มที่
State หมายเลข 1 เป็นการเริ่มต้นการทำงานของ State Flow คำสั่งจะเข้ามาทำที่นี่ก่อนเป็นอันดับแรก
State หมายเลข 2 เป็นการกำหนดเงื่อนไขให้บานประตู โดยสภาพตอนนี้ประตูไม่มีการเปิดและไม่มีการปิด คือไม่มีการทำงานใดๆ ทั้งสิ้นจนกว่าจะได้รับสัญญาณมาจากเซนเซอร์ซึ่งสัญญาณนั้นต้องผ่านฟังก์ชั่น Embedded มาแล้ว
State หมายเลข 3 เป็นการรับเงื่อนไขจากฟังก์ชั่น Embedded ว่าถ้าสัญญาณที่รับเข้ามานั่นเป็น 1 (เซนเซอร์ตรวจพบคนได้) ให้ทำการเปิดประตู (open = 0) ค้างไว้ให้ครบเวลา 4 วินาที เพื่อทำตามเงื่อนไขใน State ต่อไป
State หมายเลข 4 เมื่อครบเวลา 4 วินาที จาก State ที่ผ่านมาแล้ว ต่อไปเป็นการสั่งให้ไม่มีทำงานใดๆ ทั้งสิ้นเหมือนในกรณี State หมายเลข 2 เนื่องจากจะต้องรอสัญญาณว่าเซนเซอร์ตรวจพบคนอีกหรือไม่ ถ้าตรวจพบคน (input=1) ให้ทำใน State หมายเลข 3 ซ้ำอีก แต่ถ้านอกเหนือจากเงื่อนไขที่กล่าวมา ก็จะทำการหน่วงเวลาไปอีก 2 วินาที เพื่อทำ State ต่อไป
State หมายเลข 5 เมื่อครบเวลา 2 วินาทีจาก State ที่ผ่านมาแล้ว ประตูจะทำการปิดเองโดยอัตโนมัติ (close=0) จนครบเวลา 3 วินาที จึงจะหยุดการทำงาน และจะรอสัญญาณเข้ามาดังเช่นเงื่อนไขใน State หมายเลข 2 อีกต่อไป

ขั้นตอนการทำงานอย่างละเอียด

รูปที่ 10 แสดงขั้นตอนการทางานเมื่อมีคนเข้าประตู
รูปที่ 10 แสดงขั้นตอนการทำงานเมื่อมีคนเข้าประตู
จากรูปที่ 10 เมื่อมีคนเข้าประตู Photo Sensor จะทำการรับสัญญาณเพื่อนำไปประมวลผลที่บอร์ด STM32F407VG ต่อไปเส้นสัญญาณเซนเซอร์
รูปที่ 12 แสดงโปรแกรม Simulink ที่ใช้ควบคุมการเปิดปิดของประตู
รูปที่ 12 แสดงโปรแกรม Simulink ที่ใช้ควบคุมการเปิดปิดของประตู
รูปที่ 13 แสดงโปรแกรม Simulink ในฟังก์ชั่น State Flow ที่ใช้ควบคุมการเปิดปิดของประตู
รูปที่ 13 แสดงโปรแกรม Simulink ในฟังก์ชั่น State Flow ที่ใช้ควบคุมการเปิดปิดของประตู
รูปที่ 14 ประตูเปิดเมื่อได้รับคำสั่งจากโปรแกรมที่กำหนดไว้
รูปที่ 14 ประตูเปิดเมื่อได้รับคำสั่งจากโปรแกรมที่กำหนดไว้
จากรูปที่ 12 และรูปที่ 13 เป็นการแสดงโปรแกรมการควบคุมการทางานของการเปิดปิดประตู จากรูปที่ 10 เมื่อมีคนเข้ามาที่ประตูและ Photo Sensor ตรวจจับได้ว่ามีคนเข้า จะส่งสัญญาณมาประมวลผลในโปรแกรม และโปรแกรมจะส่งคำสั่งไปที่ชุดไดร์ฟ เพื่อสั่งให้ประตูเปิดค้างไว้เป็นเวลา 4 วินาที ตามรูปที่ 14 ถ้ามีคนเข้ามามากอย่างต่อเนื่อง ประตูก็ยังคงเปิดค้างไว้แบบนี้จนกว่าคนสุดท้ายจะเดินเข้าเสร็จ และรอเวลาหน่วงประมาณ 2 วินาที จากนั้นประตูจะทำการเลื่อนเปิดเองโดยอัตโนมัติ ตามรูปที่ 15
รูปที่ 15 ประตูเลื่อนปิดเองโดยอัตโนมัติ เมื่อไม่มีคนเข้าประตู
รูปที่ 15 ประตูเลื่อนปิดเองโดยอัตโนมัติเมื่อไม่มีคนเข้าประตู
จากคุณสมบัติการทำงานของโครงงานที่สามารถเพิ่มลดความเร็วในการเปิดปิดประตูได้ จากการปรับค่าในวงจรภาคกำลัง ต่อไปจะเป็นการอธิบายการทำงานในส่วนนี้
รูปที่ 16 ภาคกาลังควบคุมความเร็วของมอเตอร์ รูป
รูปที่ 16 ภาคกำลังควบคุมความเร็วของมอเตอร์รูป
รูปที่ 17 หมุนมอเตอร์ทวนเข็มมอเตอร์หมุนเร็วขึ้น
รูปที่ 17 หมุนมอเตอร์ทวนเข็มมอเตอร์หมุนเร็วขึ้น
รูปที่ 18 หมุนมอเตอร์ตามเข็มมอเตอร์หมุนช้าลง
รูปที่ 18 หมุนมอเตอร์ตามเข็มมอเตอร์หมุนช้าลง
จากรูปที่ 16-18 เป็นรูปแสดงภาคกำลังของมอเตอร์ จะเห็นได้ว่าในส่วนของการแปลงไฟนั้นจะมีการใส่ VR 1kΩ เพื่อปรับลดเพิ่มแรงดันให้เข้ามาเลี้ยงมอเตอร์ในภาคกำลังโดยผ่านบอร์ดไดร์ฟมอเตอร์ ตามรูปที่ 18 ถ้าเกิดมีความต้องการความรวดเร็วในการเปิดปิดประตูให้ทำการหมุน VR ไปทางด้านทวนเข็มนาฬิกา บานประดูจะเลื่อนเปิดปิดอย่างรวดเร็วตามความต้องการ แต่ถ้าหากต้องการให้ประตูมีการเลื่อนเปิดปิดด้วยความเร็วที่ช้าลด ให้หมุน VR มาทางด้านตามเข็มนาฬิกา มอเตอร์ก็จะทำการหมุนเปิดปิดประตูช้าลงตามที่ต้องการ

ข้อมูลเพิ่มเติม

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

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

วันเสาร์ที่ 21 กรกฎาคม พ.ศ. 2561

งานที่ 4


int led = 10;
void setup()
{
  Serial.begin(9600);
  pinMode(led,OUTPUT);   
}
void loop()
{
  int x,y;
  x = analogRead(A0);
  y = map(x,0,1023,0,255);
  Serial.print("x = ");Serial.println(x);
  Serial.print("y = ");Serial.println(y); 
  analogWrite(led,y);
}

งานที่ 3


#include "LedControl.h"
LedControl lc=LedControl(5,7,6,1);
// Pin 5->DIN, 7->CLK, 6->CS(LOAD), 1 = No.of devices
void show4digit(int num)
{
   int seg1,seg2,seg3,seg4;
  seg1 = ((num%1000)%100)%10;
  seg2 = ((num%1000)%100)/10;
  seg3 = (num%1000)/100;
  seg4 = num/1000; 
  lc.setDigit(0,0,seg1,false);
  if (num>=10)
    lc.setDigit(0,1,seg2,false);
    if (num>=100)
        lc.setDigit(0,2,seg3,false);
    if (num>=1000)
        lc.setDigit(0,3,seg4,false); 
    delay(300);
}
void setup()
{
    Serial.begin(9600);
    lc.shutdown(0,false); 
    lc.setIntensity(0,5);
    lc.clearDisplay(0);     
}
void loop()
{
    int num;
    num = analogRead(A0);
    Serial.print("analogRead=");Serial.println(num);
    lc.clearDisplay(0);
    show4digit(num);
}


งานที่ 2


void setup() {
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(9, INPUT);
}
void loop() {
  buttonState = digitalRead(4);
  if (buttonState == HIGH) {
    digitalWrite(13, HIGH);
    digitalWrite(10, HIGH);  
    delay(200);                 
    digitalWrite(12, LOW); 
    digitalWrite(11, LOW);   
    delay(200);
    digitalWrite(12, HIGH); 
    delay(200);                 
    digitalWrite(13, LOW); 
    digitalWrite(10, LOW);   
    delay(200);    
  } else {
    digitalWrite(13, LOW);
    digitalWrite(12, LOW);
  }
}

งานที่ 1


วันเสาร์ที่ 14 กรกฎาคม พ.ศ. 2561

เครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่ว

เครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่วไหล

โดย นาย ยอดรัก ดิษกร (yod_go@windowslive.com)
สาขาวิศวกรรมแมคคาทรอนิกส์ ภาควิชาครุศาสตร์เครื่องกล มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าพระนครเหนือ




รูปที่ 1 วงจรการต่อใช้งานจริง
รูปที่ 1 วงจรการต่อใช้งานจริง
Contents [show]

ที่มาและความเป็นมาของโครงงาน

เครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่วไหล ในปัจจุบันระบบรักษาความปลอดภัยได้เข้ามามีบทบาทสำคัญในการป้องกันอุบัติเหตุที่อาจจะเกิดขึ้นได้อย่างไม่คาดคิดเพื่อลดความเสี่ยงความสูญเสียที่อาจจะขึ้น จากปัญหาแก๊สรั่วไหลซึ่งนำมาสู่การเกิดเพลิงไหม้ทำให้เกิดแนวคิดในการจัดทำเครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่วไหล ที่สามารถเลือกระดับปริมาณแก็สที่จะทำการแจ้งเตือนให้แก่ผู้ปฏิบัติงานได้รับทราบ และสามารถทำการแก้ปัญหาการรั่วไหลของแก๊สไวไฟก่อนจะทำให้เกิดเพลิงไหม้

คุณสมบัติของเครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่วไหล

  • สามารถตรวจจับแก๊สไวไฟได้ทุกชนิด
  • สามารถเลือกระดับปริมาณแก๊สในอากาศเพื่อทำการแจ้งเตือนได้
  • ใช้แรงดัน 5 VDC
  • แสดงปริมาณแก๊สไวไฟเป็นเปอร์เซ็นต์ผ่านจอ LCD

การต่อวงจรสำหรับเครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่วไหล

รูปที่ 2 การต่อวงจรภายในเครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่วไหล
รูปที่ 2 การต่อวงจรภายในเครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่วไหล

การต่อวงจรภายในเครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่วไหล

ส่วนประกอบหลังคือ บอรด์ STM32F4 ซึ่งใช้เป็นตัวประมวลผลกลางสำหรับเครื่องโดยคุณสมบัติของบอรด์นี้ สามารถประมวลผลที่ความเร็วสูงสุดถึง 184 Mhz มี ADC และ DAC ขนาด 12 bit ให้แรงดันไปเลี้ยงสูงสุดไม่เกิน 5VDC ทำงานจริงที่แรงดัน 3.3 VDC ส่วนต่อมาคือ POWER SUPPLY ขนาดแรงดันใช้งานที่ 5 VDC ซึ่งให้เป็นแหล่งจ่ายให้กับ ทั้งวงจร
ส่วนต่อมา คือ เซนเซอร์ตรวจจับแก๊สไวไฟเบอร์ MQ-2 มีคุณสมบัติในการตรวจจับแก๊สไวไฟทุกชนิดโดยให้สัญญาณ OUTPUT เป็นความต้านทานที่เปลี่ยนแปลงไปเมื่อปริมาณแก๊สไวไฟมีปริมาณเปลี่ยนแปลงเราจึงสามารถทำการวัดเทียบเพื่อหาเปอร์เซ็นต์ของแก๊สไวไฟในอากาศได้ ส่วนต่อมาคือ BUSSER หรือสำโพงขนาดเล็กมีหน้าที่สร้างสัญญาณเสียงเพื่อเตือนในกรณีที่ตรวจพบว่าแก๊สไวไฟในบริเวณนั้นมีปริมาณที่มากกว่าที่ได้ตั้งกำหนดค่าใว้ ต่อมาเป็น สวิตช์ขนาดเล็กแบบกดติดปล่อยดับ 2 ตัว เพื่อใช้ในการกำหนดค่าของเปอร์เซ็นต์ในการแจ้งเตือนว่าจะแจ้งเตือนเมื่อตรวจวัดแก๊สได้กี่เปอร์เซ็นต์ ส่วนสุดท้ายเป็นจอแสดงผลขนาด 16X2 ตัวอักษรเพื่อใช้ในการแสดงผลเปอร์เซ็นต์แก๊สที่สามารถตรวจวัดได้จากเซนเซอร์และเปอร์เซ็นต์ที่ทำการตั้งใว้เพื่อให้ทำการแจ้งเตือนออกทางลำโพงขนาดเล็ก

ส่วนประกอบวงจรประกอบไปด้วย

  1. บอร์ด STM32F401VG จำนวน 1 บอร์ด
  2. เซนเซอร์ตรวจวัดแก๊สไวไฟเบอร์ MQ-2 จำนวน 1 ตัว
  3. สำโพงขนาดเล็ก จำนวน 1 ตัว
  4. สวิตช์กดติดปล่อยตับ จำนวน 2 ตัว
  5. จอ LCD ขนาด 16X2 จำนวน 1 ตัว
  6. แหล่งจ่ายไฟขนาด +5 VDC จำนวน 1 ชุด

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

รูปที่ 2 หน้าจอ LCD เมื่อทำการเปิดเครื่อง
รูปที่ 2 หน้าจอ LCD เมื่อทำการเปิดเครื่อง
เมื่อเปิดเครื่องที่หน้าจอ LCD บรรทัดที่ 1 จะแสดงค่าของ เปอร์เซ็นต์ของแก๊สในบรรยากาศในพื้นที่นั้นๆ และในบรรทัดที่สองจะแสดงค่าเปอร์เซ็นต์แก๊สที่ผู้ปฏิบัติงานทำการตั้งค่าระดับเพื่อทำการแจ้งเตือน ดังแสดงในรูปที่ 2
รูปที่ 3 ทำการทดสอบโดยปล่อยแก๊สจากไฟแก๊สใส่หัวเซนเซอร์
รูปที่ 3 ทำการทดสอบโดยปล่อยแก๊สจากไฟแก๊สใส่หัวเซนเซอร์

เราทำการทดสอบโดยการใช้แก๊สไวไฟจากหัวไปแก๊สปล่อยเข้าไปที่หัวของเซนเซอร์เพื่อทำการทดสอบโดยเซนเซอร์นี้จะมีความต้านทานที่แปรผันกับปริมาณของแก๊สเราจึงใช้หลักการของ Voltage Divider มาทำการประยุกต์เพื่อทำการเทียบหาความต้านทานโดยเราส่งแรงดันที่ได้จาก Voltage Divider ไปเข้าที่ ADC ของไมโครคอลโทรลเลอร์และนำไปเข้าสมการที่ได้ทำการคำนวณใว้เพื่อหาค่าความต้านทานหลังจากนั้นเราจึงนำค่าความต้านทานมาเทียบกับปริมาณแก๊สเพื่อหาค่าของเปอร์เซ็นต์แก๊สภายในบรรยากาศ
รูปที่ 4 ผลที่ได้เมื่อทดลองปล่อยแก๊สจากไฟแก๊สใส่หัวเซนเซอร์
รูปที่ 4 ผลที่ได้เมื่อทดลองปล่อยแก๊สจากไฟแก๊สใส่หัวเซนเซอร์
ผลที่ได้เมื่อทำการทดสอบ ค่าเปอร์เซ็นต์แก๊สพุ่งสูงเข้าใกล้ 100 เปอร์เซ็นต์ ดังแสดงในรูปที่ 4 เมื่อเราทำแก๊สไวไฟเข้าใกล้ๆ และค่าจะเริ่มลดลงเมื่อเราทำออกห่างมา

รูปที่ 5 ในสภาวะที่สวิตซ์ไม่ถูกกด
รูปที่ 5 ในสภาวะที่สวิตซ์ไม่ถูกกด
ในสภาวะปกติสวิตช์นั้นไม่ถูกกดทั้ง IN0 และ IN1 ค่า SET ALAM ในหน้าจอ LCD จะไม่มีการเปลี่ยนแปลงจะค้างค่าอยู่ที่ค่าเดิม
รูปที่ 6 ในสภาวะที่กดสวิตซ์ IN0
รูปที่ 6 ในสภาวะที่กดสวิตซ์ IN0
เมื่อทดลองกดสวิตซ์ IN0 สองครั้งจะได้ค่า SET ALAM เพิ่มขึ้นครั้งละ 10 เปอร์เซ็นต์ซึ้งจะได้ 20 เปอร์เซ็นต์
รูปที่ 7 ผลที่ได้จากการกด กดสวิตซ์ IN0
รูปที่ 7 ผลที่ได้จากการกด กดสวิตซ์ IN0
ที่หน้าจอ LCD จะแสดงผลที่หน้าจอ ในส่วนของ SET ALAM จะแสดงค่าเท่ากับ 20 เปอร์เซ็นต์
รูปที่ 8 ในสภาวะที่กดสวิตซ์ IN1
รูปที่ 8 ในสภาวะที่กดสวิตซ์ IN1
เมื่อทดลองกดสวิตซ์ IN1 หนึ่งครั้งจะได้ค่า SET ALAM ลดลงครั้งละ 10 เปอร์เซ็นต์ซึ้งจะได้ 10 เปอร์เซ็นต์
รูปที่ 9 ผลที่ได้จากการกด กดสวิตซ์ IN1
รูปที่ 9 ผลที่ได้จากการกด กดสวิตซ์ IN1
ที่หน้าจอ LCD จะแสดงผลที่หน้าจอ ในส่วนของ SET ALAM จะแสดงค่าเท่ากับ 10 เปอร์เซ็นต์
รูปที่ 10 ทดลองปล่อยแก๊สไปที่เซนเซอร์เมื่อ SET ALAM เท่ากับ 50
รูปที่ 10 ทดลองปล่อยแก๊สไปที่เซนเซอร์เมื่อ SET ALAM เท่ากับ 50
ผลที่ได้คือเมื่อค่า PECENS GAS มีค่ามากกว่าค่า SET ALAM ทำให้ลำโพงขนาดเล็กจะดังขึ้นเพื่อทำการแจ้งเตือนว่ามีแก๊สรั่วในปริมาณมากกว่าที่ได้กำหนดใว้ ดังรูปที่ 10 แต่ถ้า PECENS GAS มีค่าน้อยกว่าค่า SET ALAM ลำโพงจะไม่ดัง

ตัวอย่างในการติดตั้งใช้งาน


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

โปรแกรม Simulink ที่สมบูรณ์ของโครงงานเครื่องตรวจจับและแจ้งเตือนแก๊สไวไฟรั่วไหล


รูปที่ 13 โปรแกรมภาพรวมจาก Simulink
รูปที่ 13 โปรแกรมภาพรวมจาก Simulink

อธิบายโปรแกรมหลัก

หมายเลข 1 เป็นการประกาศเพื่อกำหนด เลือกตัวคอมไพเลอร์ เบอร์ไมโครคอลโทรลเลอร์ที่จะทำการเขียน ความเร็วในการประมวลผมที่จะใช้ และ รูปแบบของการดาวน์โหลดโปรแกรมลงตัว ไมโครคอลโทรลเลอร์
หมายเลข 2, 3, 4 และ 5 เป็นการประการตัวแปรเพื่อจองพื้นที่หน่วยความจำภายในไมโครคอลโทรเลอร์เพื่อเก็บค่าต่างๆที่ใช้ในการแสดงผลออกทางหน้าจอ LCD
หมายเลข 6 และ 7 เป็น sub program ที่ทำงานเกี่ยวข้องกับการแสดงผลออกจากจอ LCD และ การนับขึ้นลงเพื่อนำค่าไปใช้ในการกำหนดเปอร์เซ็นต์ของแก๊สไวไฟเพื่อทำการแจ้งเตือน ซึ่งจะทำการแยกอธิบายอีกครั้ง
หมายเลข 8 เป็นการประกาศใช้ ADC ที่ขา PA1 เพื่อใช้ในการอ่านค่าสัญญาณจากเซนเซอร์
หมายเลข 9 เป็นการคูณค่า 3.3/4095 กับค่าที่ได้จากค่า ADC จากขา PA1 เพื่อแปลงค่าช่วง 0 – 4096 เป็นช่วงแรงดันจากเซนเซอร์ในช่วง 0 – 3.3 V
หมายเลข 10 เป็น MATHLAB function (PECENS GAS) ซึ่งใช้ในการคำนวณค่าเปอร์เซ็นต์ของแก๊สไวไฟในบรรยากาศซึ่งนำค่าแรงดันที่ได้จากเซนเซอร์ มาทำการคำนวณ
หมายเลข 11 เป็นการนำค่าที่คำนวณได้จาก MATHLAB function ไปเก็บใว้ในตัวแปลที่ประกาศใว้ก่อนหน้าและนำค่าไปแสดงผลที่จอ LCD ใน บรรทัดที่ 1
หมายเลข 12 เป็นค่าคงที่ที่ใช้ในการปรับเปอร์เซ็นต์ duty cycle ของ สัญญาณ PWM เพื่อ กำหนดเสียสัญญาณเตือนออกไปที่ลำโพงขนาดเล็ก
หมายเลข 13 เป็นการนำค่าคงที่ PWM มาคูณกับค่า ที่ได้จากการ เปรียบเทียบ หรือ comparator ซึ่งจะมีค่าเพียง 0 และ 1 ซึ่งจะทำให้สัญญาณที่ไปจ่ายให้ duty cycle ของ สัญญาณ PWM มีค่า แค่ 0 และ 50
หมายเลข 14 เป็นการประกาศใช้ PWM ที่ขา PA9 และรับค่าตัวแปรเป็น duty cycle ในช่วง 0-100 เปอร์เซ็นต์
หมายเลข 15 เป็นการคำค่าของตัวแปรที่ได้จาก sub program (COUNT) มาใช้ในการเปรียบเทียบกับค่าที่ได้จากการวัดด้วยเซนเซอร์
หมายเลข 16 เป็นตัวเปรียบเทียบค่าเปอร์เซ็นต์ที่คำนวณได้จากเซนเซอร์ และค่าเปอร์เซ็นต์ที่ได้จากการตั้งค่าจากปุ่มกด
รูปที่ 15 ภายใน Sub Program ของ LCD
รูปที่ 15 ภายใน Sub Program ของ LCD

อธิบาย Sub Program ของ LCD

หมายเลข 6.1 เป็นการประกาศเพื่อกำหนดขาของไมโครคอลโทรลเลอร์เพื่อที่จะทำการเชื่อมต่อกับจอ LCD ซึ่งในที่นี้เราจะใช้การเชื่อมต่อสื่อสารแบบ 4 bit ทางเดียว และกำหนดขาที่จะทำการสื่อสารเป็นขา PE7 – PE9 และ PE12 – PE15
หมายเลข 6.2 และ 6.4 เป็นการกำหนดค่าคงที่ในการแสดงผลให้แก่จอ LCD ซึ่งเป็นการกำหนดแถว บรรทัด แลจุดเริ่มต้นในการแสดงผล
หมายเลข 6.3 และ 6.5 เป็นการนำรูปแบบการแสดงผลข้อความที่จะแสดงผลที่เราได้ตั้งค่ากำหนดค่าใว้แล้วนั้นมาทำการส่งออกออกทางจอ LCD เพื่อแสดงผล ซึ่ง 6.3 จะเป็นบรรทัดที่ 1 และ 6.5 จะเป็นบรรทัดที่ 2
หมายเลข 6.6 และ 6.7 เป็นการนำค่าที่ได้เก็บใว้ในตัวแปรส่งไปแสดงผลที่จอ LCD
รูปที่ 17 ภายใน Sub Program ของ COUNT
รูปที่ 17 ภายใน Sub Program ของ COUNT

อธิบาย Sub Program ของ COUNT

หมายเลข 7.1 เป็นการกำหนดขา DIGITAL INPUT ซึ่งรับสัญญาณจากสวิตซ์ ซึ่งใช้ ขา PD5 รับสัญญาณจาก สวิตซ์ตัวที่ 1 และ ขา PD6 รับสัญญาณจาก สวิตซ์ตัวที่ 2
หมายเลข 7.2 เป็น MATHLAB function (COUNT_FUNCTION) ใช้ในการนับขึ้นลงของสวิตซ์ซึ่งจะทำการอธิบายรายละเอียดอีกครั้ง
หมายเลข 7.3 เป็นการนำค่าที่ได้จาก MATHLAB function (COUNT_FUNCTION) ไปเก็บใว้ในตัวแปร cn1
หมายเลข 7.4 เป็นการนำค่าที่ได้จาก MATHLAB function (COUNT_FUNCTION) ไปเก็บใว้ในตัวแปร comparator
หมายเลข 7.5 นำค่าที่เก็บใว้ในตัวแปร cn1 มาใช้งาน
หมายเลข 7.6 นำค่าจากตัวแปร cn1 ที่ถูกส่งให้ไปแสดงผลที่จอ LCD

รูปที่ 18 MATHLAB FUNCTION (PECENS GAS)
รูปที่ 18 MATHLAB FUNCTION (PECENS GAS)
อธิบาย โค๊ดจาก MATHLAB FUNCTION (PECENS GAS)
Image 016

รูปที่ 19 MATHLAB FUNCTION (COMPARATOR)
รูปที่ 19 MATHLAB FUNCTION (COMPARATOR)
อธิบาย โค๊ดจาก MATHLAB FUNCTION (COMPARATOR)
Image 018
รูปที่ 20 MATHLAB FUNCTION (COUNT_FUNCTION)
รูปที่ 20 MATHLAB FUNCTION (COUNT_FUNCTION)
อธิบาย โค๊ดจาก MATHLAB FUNCTION (COUNT_FUNCTION)
Image 020

สรุปผลการทำโครงงาน

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


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

Code โปรเจครถบังคับ Arduino Nano 3.0 ควบคุมด้วย บลูทูธ HC-06

Code โปรเจครถบังคับ Arduino Nano 3.0 ควบคุมด้วย บลูทูธ HC-06



โปรเจครถบังคับ Arduino Nano 3.0 ควบคุมด้วย App Android  อุปกรณ์ที่ต้องใช้ก็คือ

     1. Small 2WD Smart Car Robot Chassis Kits

     2.  Arduino Nano 3.0

     3. Motor Drive Module L298N

     4. Bluetooth HC-06 Slave

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

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

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

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

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



ประกอบ Small 2WD Smart Car Robot Chassis Kits



ยึด รางถ่านแบบ 18650 แบบ 2 ก้อน



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




ภาพรวมการต่อวงจร




รายละเอียด ขาต่างๆ ของ Arduino Nano 3.0



ต่อสายสีดำจากรางถ่าน เข้า ที่ GND ของ L298N และ และต่อสายสีแดงจากรางถ่าน เข้า ที่ + 12V ของ L298N



เชื่อมต่อ สาย GND ของ L298N ไปที่ (29) GND ของ Arduino Nano 3.0 และ เชื่อมต่อ สาย + 5V ของ L298N ไปที่ (27) + 5V ของ Arduino Nano 3.0



ใช้สาย Jumper Female to Male ยาว 10cm. เชื่อมต่อ จุดเชื่อมต่อ มอเตอร์ ของ L298N ทั้ง 2 ด้าน ไปที่ มอเตอร์ ทั้ง 2 ตัว




การเชื่อมต่อ มอเตอร์ด้านล่าง
 



ภาพรวมการต่อสายระหว่าง  L298N กับ Arduino Nano 3.0




เชื่อมต่อสายระหว่าง  L298N กับ Arduino Nano 3.0
 


เชื่อมต่อสายระหว่าง  Bluetooth HC-06 Slave กับ Arduino Nano 3.0




เชื่อมต่อสาย USB ระหว่าง  คอมพิวเตอร์ กับ Arduino Nano 3.0

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




Upload ซอสโค้ด ด้านล่างเข้าสู่ Arduino Nano 3.0

int izqA = 5;
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 255; // Velocidad de los motores (0-255)
int estado = 'g'; // inicia detenido

void setup() {
Serial.begin(9600); // inicia el puerto serial para comunicacion con el Bluetooth
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);
}

void loop() {

if(Serial.available()>0){ // lee el bluetooth y almacena en estado
estado = Serial.read();
}
if(estado=='a'){ // Boton desplazar al Frente
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
if(estado=='b'){ // Boton IZQ
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
}
if(estado=='c'){ // Boton Parar
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
if(estado=='d'){ // Boton DER
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(izqA, 0);
analogWrite(derA, vel);
}

if(estado=='e'){ // Boton Reversa
analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(derB, vel);
analogWrite(izqB, vel);
}
if (estado =='f'){ // Boton ON se mueve sensando distancia

}
if (estado=='g'){ // Boton OFF, detiene los motores no hace nada
}
}


เลือก Board "Arduino Nano" แล้วจึง Upload



เก็บรัดสายให้เรียบร้อย



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





ใช้สมาร์ทโฟน Android เปิดบลูทูธ ค้นหาอุปกรณ์ HC-06




ถ้าใช้งานครั้งแรก ให้คีย์ 1234




ดาวน์โหลดและติดตั้ง แอพควบคุมรถบังคับ  Arduino Control Car ที่


https://play.google.com/store/apps/details?id=appinventor.ai_el_profe_garcia.Arduino_Control_Car&hl=en

ติดตั้งเหมือนแอพทั่วๆไป



หน้าตาโปรแกรม Arduino Control Car



คลิกที่ปุ่ม Bluetooth แล้วคลิกเลือก  HC-06




ก่อนหน้าไฟ LED สีแดง ของ HC-06 จะติดแบบกระพริบอยู่ หลังจากติดต่อได้ไฟจะติดค้างเป็นสีแดงตลอด จากนั้นทดลองควบคุมดู ถ้าทิศทางการเครื่อนที่ไม่ตรงกับการควบคุบ ให้ตรวจสอบการต่อสายของมอเตอร์ทั้ง 2 ตัว และแก้ไขให้ถูกต้อง

วีดีโอผลลัพธ์การทำงานของ โปรเจครถบังคับ Arduino Nano 3.0 ควบคุมด้วย บลูทูธ HC-06