งานที่20 ชุดอุปกรณ์ป้องกันการขโมยจักยาน

ชุดอุปกรณ์ป้องกันการขโมยจักยาน

ผู้ทำโครงงาน นาย กิตติศักดิ์    แตงเกษม  รหัสนักศึกษา  5502013630065    TT2RA
Simulink model File miniProject2014
1
รูปที่ 1 วงจรการต่อใช้งานจริง

ที่มาและความเป็นมาของโครงงาน
เนื่องจากในโลกปัจจุบันนี้  ความอุดมสมบูรณ์ของธรรมชาติได้ลดน้อยลง  อันเนื่องมาจากการถูกทำลายจากฝีมือมนุษย์ทั้งทางตรง อาทิ  การตัดต้นไม้  และทางอ้อม  อาทิ การปล่อยมลพิษทางอากาศจากโรงงาน หรือรถยนต์ทำให้มีการรณรงค์ปั่นจักรยาน  เพื่อลดปริมาณรถยนต์ในท้องถนน อันส่งผลถึงการลดปัญหามลพิษทางอากาศจากยานพาหนะ และยกระดับคุณภาพอากาศให้ดีขึ้น รวมทั้งช่วยลดค่าใช้จ่ายและเวลาในการเดินทางและส่งผลต่อการประหยัดพลังงานน้ำมัน ทำให้มีคนหันมาใช้จักรยานกันเพิ่มมากขึ้น  แต่ก็หนีไม่พ้นการขโมยจักรยานไปขาย หลายคนอาจใช้ที่คล้องล๊อคจักรยานกับสิ่งต่างๆ  แต่ในบางครั้งต้องคล้องล๊อคตัวถังกับล้อแทน  ทำให้โจรยกขโมยจักรไปโดยไม่มีอะไรเตือน     และไม่อะไรบ่งบอกว่ามีการขโมยเกิดขึ้น เพราะคนรอบข้างอาจนึกว่าเป็นเจ้าของมายกจักรยานไป
จากเหตุการณ์ดังกล่าวทำให้เกิดไอเดียในการสร้างชุดอุปกรณ์ป้องกันการขโมยจักรยาน  โดยใช้เซนเซอร์ aMG IMU-9A ซึ่งเป็นเซนเซอร์วัดอัตราเร่ง เป็นตัวรับรู้การเคลื่อนที่ของจักรยาน  แล้วส่งสัญญาณ Output ไปที่ไมโครคอนโทเลอร์เป็นตัวประมวลผล  เมื่อประมวลผลเสร็จก็จะส่งสัญญาณ Output  ไปที่ Buzzer ที่เป็นตัวส่งเสียงเตือนให้รู้ว่าจักรยานนั้นได้ถูกขโมย
คุณสมบัติการทำงานของโครงงาน
  • สามารถบอกองศาการเอียงของจักรยานที่ค่าเริ่มต้นและค่าปัจจุบันทั้งแกน X  และแกน Y
  • ค่าความผิดพลาดขององศาเมื่อคนโดนรถจักรยาน +_ 20 องศา
  • มีเสียงและข้อความเตือนเมื่อถูกขโมย
หลักการและทฤษฎีที่เกี่ยวข้อง
  1. สัญญาณI2C หรือInter-Integrated Circuit เป็นการรับส่งข้อมูลความเร็วต่ำระหว่างอุปกรณ์ต่างๆเช่นเครื่องบันทึกเสียงโทรศัพท์มือถือรวมถึงหน่วยความจำอย่าง EEPROM เป็นต้นการสื่อสารแบบ I2C มีจุดเด่นคือการเชื่อมต่อกันเป็นระบบบัสและรับส่งข้อมูลระหว่างอุปกรณ์ได้เป็นจำนวนมากโดยใช้สายสัญญาณเพียงสองเส้นซึ่งสามารถลดจำนวนสายสัญญาณและขนาดของอุปกรณ์จึงเป็นที่นิยมในระบบสมองกลฝังตัวขนาดเล็ก   การสื่อสาร I2Cนั้นจะใช้สายส่งดิจิตอลแบบBidirectional Open-drain line ซึ่งสามารถรับส่งข้อมูลได้ในเส้นเดียวกัน จำนวน 2 ชุดคือ Serial Data Line (SDA) ใช้ทำหน้าที่ส่งข้อมูลและ Serial Clock Line (SCL) ทำหน้าที่ส่งสัญญาณนาฬิกาความเร็วของการรับส่งข้อมูลนั้นขึ้นอยู่กับความถี่ของสัญญาณนาฬิกาในสายSCLสำหรับบอร์ด  STM32F4 สามารถส่งสัญญาณนาฬิกาที่มีความถี่100kHz(Standard) หรือ400kHz (Fast)
2

รูปที่  2   การต่อขาสัญญาณ  I2C  กับบอร์ด STM32F4
  1. หลักการเกี่ยวกับKeypad เราต้องรู้ก่อนว่า Keypad ที่เราใช้นั้นเป็นแบบใด 4*4 หรือ 3*4 และเป็นแบบดิจิตอลหรือแบบอนาล็อกต่อแบบ Pull up หรือ Pull downเพื่อที่จะได้ง่ายต่อการขียนโปรแกรมควบคุมซึ่งKeypadที่ได้นำมาใช้นี้เป็นแบบดิจิตอล 4*4 โดยจะมีPINใช้ต่อกับไมโครคอนโทรลเลอร์ทั้งหมด8 PIN โดย PIN1-PIN4(Column) จะใช้ต่อเป็น Input  เข้าบอร์ดไมโครเพื่อให้ไมโครอ่านค่ารหัสของคีย์ที่ถูกกดส่วนPIN5-PIN8 (ROW) ใช้ต่อเป็น Output  จากบอร์ดไมโครเพื่อให้ไมโครส่งลอจิก “0” มาทำการสแกนคีย์ในแต่ละแถวการทำงานนั้นไมโครจะอ่านสถานะทางลอจิกของคีย์แต่ละหลักเข้ามาทางPIN1-PIN4 ซึ่งถ้าไม่มีการกดคีย์จะอ่านลอจิกได้ “1” ถ้ามีการกดคีย์ลอจิกที่อ่านได้ในหลักนั้นจะเป็น“0” แต่ก่อนที่จะอ่านค่าลอจิกแต่ละหลักไมโครจะต้องให้ลอจิก“0” แก่แถวของคีย์แต่ละแถว (PIN5-PIN8)ในการอ่านลอจิกเข้ามาแต่ละครั้งเสมอ
3
รูปที่  3ตำแหน่ง PIN  และวงจร Keypad
          หลักการที่เกี่ยวข้องกับการกดตัวเลขป้อนค่าใน Keypad  โดยเราจะต้องทำการป้อนค่าของข้อมูลลงไปในตัวKeypadสมมุติว่าเราจะป้อนค่ำ 198ให้กับ Keypadหลักการในการกดตัวเลขนั้นเราจะต้องกดหลักร้อยก่อนคือจะต้องกดที่ตัวอักษร  “ ร ” แล้วตามด้วยเลข 1  ต่อมาหลักสิบคือจะต้องกดที่ตัวอักษร  “ ส ” แล้วตามด้วยเลข 9   หลักจากนั้นหลักหน่วยเป็นตัวสุดท้ายคือจะต้องกดที่ตัวอักษร  “ ห ” แล้วตามด้วยเลข 8
4
รูปที่  4ตำแหน่งตัวเลขและตัวอักษรบนแป้น  Keypad
5
รูปที่  5ตาราง True table  ค่าลอจิกของตัวเลขละตัวอักษรบน Keypad
หลักการทำงานชุดอุปกรณ์ป้องกันการขโมยรถจักรยาน
ชุดอุปกรณ์ป้องกันการขโมยรถจักรยานจะเริ่มทำการส่งสัญญาณเตือน  เมื่อขยับรถจักรยานในแกน X หรือแกน Y  เกิน 20 องศาจากค่าเริ่มต้นของเซนเซอร์  โดยเซนเซอร์จะส่งค่าความเร่งไปที่บอร์ดไมโคร  หลังจากนั้นบอร์ดไมโครจะทำการแปลงค่าความเร่งเป็นองศา  ถ้ามีค่าเกิน 20 องศาจากค่าเริ่มต้น  ไมโครจะส่งสัญญาณไปทิกให้  Buzzerดัง  การที่จะทำให้  Buzzer นั้นหยุดดังมีอยู่  2 วิธี คือปิดสวิตซ์จ่ายไฟเลี้ยง  และกด Keypad  เพื่อปลดล็อค  ซึ่งได้ทำการเซตรหัสผ่านเป็น 198  หากกดผิด Buzzer จะไม่หยุดดังจนกว่าจะกดรหัสที่ถูกต้องเสียก่อน
การต่อวงจรชุดอุปกรณ์ป้องกันการขโมยรถจักรยาน

6
รูปที่ 6วงจรสมบูรณ์ส่วนที่ 1 และส่วนที่ 2
7
รูปที่ 7วงจรสมบูรณ์ส่วนที่ 3
8
รูปที่ 8วงจรสมบูรณ์ส่วนที่ 4
9
รูปที่ 9วงจรสมบูรณ์ส่วนที่ 5 ส่วนที่ 6  และส่วนที่ 7

การต่อวงจรที่สมบูรณ์ของโครงงาน
ส่วนที่ 1   เป็นขาของบอร์ด  STM32F4  ซึ่งขาของบอร์ดจะถูกเชื่อมต่อกับอุปกรณ์ต่างๆ  ดังนี้
  • LCD : PE7 , PE8 , PE9 , PE12 , PE13 , PE14 , PE15 , 5V , GND
  • Keypad : PD0 , PD1 , PD2 , PD3 , PE2 , PE4 , PE5 , PE6 ,VDD , GND
  • Accelerometer Sensor IMU9A : PB6 , PB7 , VDD , GND
  • Regulator : 5V , GND
  • Switch : PA2 , 3.3V , GND
  • Buzzer : PA1 , GND
ส่วนที่ 2   เป็น LCD 16*4  ที่ใช้แสดงผลมุมองศาของเซนเซอร์  รหัสผ่าน  และข้อความเตือน  เมื่อค่านั้นได้มีการเปลี่ยนแปลงเกิดขึ้น  เพื่อให้ได้รับรู้ถึงข้อมูลที่แท้จริงว่าเป็นเช่นไร
ส่วนที่ 3   เป็น  Accelerometer Sensor IMU9A   ที่ใช้วัดความเร่งของการเคลื่อนที่ของวัตถุ  ซึ่งการต่อขานั้นทางด้านขวามือของรูปตรง P1  จะมีหมายเลข 1-5   โดยหมายเลข1 คือ ขา SDA ให้ต่อกับ ขา PB7  หมายเลข2  คือ ขา SCL ให้ต่อกับขา PB6    หมายเลข3  คือ ขา GND   หมายเลข4  คือ  ขา 3.3V  ให้ต่อกับ VDD  และหมายเลข5  คือ 4.5 – 9V  ไม่ต้องต่อกับบอร์ด  STM32F4  เนื่องจากได้ต่อไฟเลี้ยง 3.3V  แล้วที่หมายเลข4
ส่วนที่ 4  เป็น Keypad 4*4  ใช้เพื่อการเข้ารหัสเพื่อปลดล็อคเสียงของ  Buzzer  ให้หยุดดัง  ซึ่งขาของ Keypad  มีทั้งหมด 10 PIN   โดย PIN1 ต่อกับ PD0  ,  PIN2 ต่อกับ PD1  ,  PIN3 ต่อกับ PD2  ,  PIN4 ต่อกับ PD3  ,  PIN5 ต่อกับ PE6  ,  PIN6 ต่อกับ PE5  ,  PIN7 ต่อกับ PE4  ,  PIN8 ต่อกับ PE2  ,  PIN9 ต่อกับ VDD   PIN10 ต่อกับ GND
ส่วนที่ 5   เป็น Regulator   เพื่อจ่ายไฟ  5V  ให้กับบอร์ด STM32F4  ได้ทำงาน   โดยลดไฟจาก7.5 V ของ  Battery  ผ่านสวิตซ์เปิด-ปิด การจ่ายไฟ  แล้วเข้า IC 7805 ให้เหลือไฟ 5V  ผ่าน connector  ซึ่งช่องขาบวกต่อกับ 5V  และช่องขาลบต่อกับ GND
ส่วนที่ 6   เป็น  Buzzer  เพื่อส่งเสียงเตือนคนรอบข้างรู้ว่าจักรยานนั้นได้ถูกขโมย  โดยที่ขาบวกต่อกับ  PA1  ส่วนอีกขาที่เหลือต่อกับ GND
ส่วนที่ 7  เป็น Switch  เพื่อสั่งให้เริ่มบันทึกค่าเริ่มต้น   และสั่งให้ระบบป้องกันการขโมยทำงาน  โดยมีไฟสีเขียวเป็นตัวบอกว่าได้เริ่มทำงานแล้ว   ซึ่งจะต่อขาทางด้าน ON  กับขา 3.3V    ตำแหน่งกลางต่อกับขา PA2   และหลอด LED   แล้วหลอด LED ก็ต่อเข้ากับขา  GND  อีกที
ส่วนประกอบของวงจรประกอบไปด้วย
  1. บอร์ด STM32F4 DISCOVERY
  2. Keypad 4*4
  3. LCD 16*4
  4. Accelerometer Sensor ( IMU_9A )
  5. Battery 7.5V
  6. Regulator ( IC7805 )
  7. หลอด LED
  8. Switch
  9. Buzzer


10
รูปที่  10ส่วนประกอบของวงจร
โปรแกรม Simulink ของโครงงาน
11
รูปที่ 11โปรแกรม Simulink  ของโครงงาน

การใช้โปรแกรม  Matlab   เขียน Code Simulink  โดยใช้ Block Diagram  ซึ่งภายใน  Simulink  นั้นจะถูกแบ่งเป็น 4 ส่วน  คือ  1. เป็นการอ่านค่าจากเซนเซอร์วัดอัตราเร่ง  2. เป็นนำค่าที่ได้จากเซนเซอร์มากเก็บเข้าเงื่อนไขและคำนวณองศาการเอียง  3. เป็นการใช้ Keypad ปลดล็อครหัส  4. เป็นการเข้าเงื่อนไขเพื่อให้ Buzzer  ทำงานและหยุดทำงาน

12
รูปที่ 12โปรแกรม Simulink  ภายในบล็อค  Demo_IMU9A

ส่วนที่ 1 เป็นการอ่านค่าจากเซนเซอร์  ( accelerometer_imu9a )  ซึ่งเป็นโค้ดสำเร็จรูปสามารถนำมาใช้งานได้ทันที  โดยค่าที่ออกมานั้นขึ้นอยู่กับการเอียงเซนเซอร์  ซึ่งจะอยู่ในช่วง +_1 mg  ( g = 9.81 m/s^2 ค่าความเร่งเนื่องจากแรงโน้มถ่วงของโลก )   เมื่อเซนเซอร์ขนานกับแกนโดยตั้งฉากกับพื้นโลกค่าที่ออกมาจะเท่ากับ0 แต่ถ้านำเซนเซอร์ชี้ลงล่างจะมีค่าเท่ากับ  1    และถ้านำชี้ขึ้นบนจะมีค่าเท่ากับ  -1 ซึ่งในโครงงานชุดอุปกรณ์ป้องกันการขโมยรถจักรยานนี้จะใช้พิจารณาเพียงสองแกน  คือแกน X และแกน Y

13
รูปที่ 13โปรแกรม Simulink  ภายในบล็อค  Accelerometer

ส่วนที่ 2  เป็นการนำค่าที่อ่านได้จาดเซนเซอร์มาเก็บเข้าเงื่อนไขและคำนวณค่าองศา  โดยใช้บล็อค In  เป็นการรับค่าที่อ่านได้จากเซนเซอร์  จากนั้นเข้าบล็อค Gain  เพื่อให้ค่าความเร่งเท่ากับ9.81 m/s^2 แล้วผ่านบล็อค Lowpass Filterเพื่อเป็นตัวกรองสัญญารบกวนหรือสัญญาที่เราไม่ต้องการนำไปใช้ให้เป็นสัญญาที่มีค่าคว่มผิดพลาดน้อยลงแล้วส่งไปเข้าบล็อคส่วนที่2.1  และ2.2ซึ่งค่าที่ออกมานั้นจะเป็นมุมองศาของเซนเซอร์  โดยค่าที่ออกมาจากบล็อค  find angleform first value   จะเป็นมุม ณ ตำแหน่งเซนเซอร์ปัจจุบัน แล้วส่งไปที่บล็อค  String Buffer Processing  เป็นการแปลงค่าให้เป็น String แล้วนำไปเก็บไว้ที่บล็อค Volatile Data Storageหลังจากนั้นใช้บล็อคVolatile Data Storage Readเป็นตัวอ่านค่าที่ถูกเก็บไว้และส่งค่าไปที่บล็อค Character LCD Write เป็นการเขียนค่าที่รับมานำไปแสดงที่หน้าจอ LCD  ในตำแหน่งที่ 9  แกนX  จะโชว์บรรทัดที่ 1  แกนY  จะโชว์บรรทัดที่ 2  ส่วนบล็อค  find angleform change value จะเป็นมุมของเซนเซอร์ ณ ตำแหน่งเริ่มต้นที่จอดจักรยานแล้วส่งไปที่บล็อค  String Buffer Processing   เป็นการแปลงค่าให้เป็น String แล้วนำไปเก็บไว้ที่บล็อค Volatile Data Storage   หลังจากนั้นใช้บล็อค  Volatile Data Storage Read เป็นตัวอ่านค่าที่ถูกเก็บไว้และส่งค่าไปที่บล็อค Character LCD Write เป็นการเขียนค่าที่รับมานำไปแสดงที่หน้าจอ LCD  ในตำแหน่งที่ 1  แกนX  จะโชว์บรรทัดที่ 1  แกนY    จะโชว์บรรทัดที่ 2

14
รูปที่ 14โปรแกรม Simulink  ภายในบล็อค  Condition

ส่วนที่ 2.1 เป็นเก็บค่าเริ่มต้นและการบวก ลบค่าความผิดพลาดจากค่าเริ่มต้น   เมื่อมีอะไรบางอย่างมาโดนรถจักรยานแต่ไม่ใช่การขโมย   โดยรับค่าจากบล็อค Low pass Filter  ทาง In1  และรับค่าจากสวิตซ์จากบล็อค Digital Input   ทาง In2  ที่ขา PA2  ของ Micro  ค่าที่รับมานั้นจะเป็นค่าลอจิก 0 กับ 1    ถ้าเท่า กับ 1 จะเป็นการสั่งให้เริ่มบันทึกค่าเริ่มต้นที่ State flow1  และเริ่มกระทำเงื่อนไขที่State flow2   แต่ถ้าค่าลอจิกเท่ากับ 0   จะเป็นการรีเซตค่าที่บันทึกและหยุดกระทำเงื่อนไขโดยค่าที่ออกมาจากState flow1  ถูกส่งค่าไปที่Output1เพื่อไปคำนวณค่าองศาของเซนเซอร์ที่เป็นค่าเริ่มต้นและไปเข้าบล็อค error ซึ่งเป็นการเผื่อค่าความผิดพลาดเนื่องจากมีอะไรบางอย่างมาโดนรถจักรยานแต่ไม่ใช่การขโมยโดนเผื่อค่าความผิดพลาดอยู่ที่+_20 องศาจากค่าเริ่มต้นของเซนเซอร์ที่ถูกเก็บไว้ มีค่าความเร่งเนื่องจากแรงโน้มถ่วงของโลกเท่ากับ 3.3552 m/s^2  ( a = g.sinα)   หลักจากนั้นก็ส่งค่ามาที่ State flow2 ซึ่งเป็นการเปรียบเทียบค่าที่เข้ามาใหม่กับค่าเริ่มต้นที่บวกค่าความผิดพลาดไว้แล้วว่าเกินหรือไม่  ถ้าหากเกินก็จะส่งค่าไปที่ Output2  เท่ากับ 50   แต่ถ้าไม่เกินค่าที่ส่งไปจะเท่ากับ 0

15
รูปที่ 15โปรแกรม Simulink  ภายในบล็อค find angleform first value  และ find angleform change value

ส่วนที่ 2.2  เป็นการรับค่าจากLow pass Filter ( บล็อค find angleform first value )       และจาก State flow1 ( บล็อค find angleform change value )     ซึ่งจะนำค่าความเร่งที่ได้มาแปลงเป็นมุมองศา    โดยใช้สูตรα= [arcsin( a/g )] x ( 180/π )โดยเข้ามาที่บล็อค Divide  เป็นการย้ายค่า g  มาหารค่าความเร่งที่ได้มา    แล้วนำค่าที่ได้ไปเข้าบล็อค  asin   เป็นการหาค่ามุมโดยใช้ arcsin  แต่ค่ามุมที่ออกมานั้นมีหน่วยเป็น  เรเดียน  ซึ่งต้องนำค่ามาแปลงเป็นองศา   โดยการคูณด้วย 180  แล้วหารด้วย  π ก็จะได้ค่ามุมที่มีหน่วยเป็นองศาแล้วส่งค่าไปที่ Output1    ให้กับบล็อค   String Buffer Processing

16
รูปที่ 16โปรแกรม Simulink  ภายในบล็อค  KeyPad

ส่วนที่ 3  เป็นการเข้ารหัสด้วย  Keypad  เพื่อสั่งงงาน  Buzzer โดยเริ่มจากการรับค่าดิจิตอลจากKeypad  ผ่านบล็อคDigital Inputค่าได้มานั้นจะเท่ากับ 1111  ตลอด   เนื่องจากยังไม่ได้มีการกด   Keypad จากนั้นก็เข้ามาที่บล็อค  State flow3  ซึ่งในการเขียนนั้นเราจะทำการประกาศ Input   Outputและสร้างบล็อคสัญญาณPulseที่จะเป็นการเรียกให้State-Flow3ทำงานก่อนเมื่อState-Flow3ทำงานแล้วนั้นเราก็จะต้องประกาศค่าเริ่มต้นของตัวแปรก่อนและกำหนดcase ต่างๆที่เราต้องการในที่นี้เรากำหนด case ทั้งหมด 4 case โดยให้ Output  = 1110 1101 1011 0111 เพื่อที่จะส่งค่าไปยัง keypad  ผ่านบล็อค  Digital Output เพื่อที่จะทำการสแกนโดยถ้าเรากดปุ่มก็จะมีสัญญาณInput ป้อนเข้ามาให้กับไมโครผ่านบล็อค   Digital Input   โดยลักษณะของ Inputก็มี 4 caseเช่นกันคือ 1110 1101 1011 0111 โดยการทำงานจะทำงานเป็นลำดับไปเรื่อยๆเมื่อเรากดปุ่มมันก็จะตรวจสอบว่าตรงกับเงื่อนไขอันไหนและก็จะส่งข้อมูลออกมาเข้าบล็อค   Volatile Data Storage Writeและบล็อค Volatile Data Storage Write1  ซึ่งเป็นการเขียนค่าที่ได้มาไปเก็บไว้ที่บล็อค Volatile Data Storage  ที่ชื่อ number กับ mydata  ตามลำดับ
หลังจากที่นำค่าไปเก็บแล้วนั้นก็จะทำการอ่านค่าโดยใช้บล็อค  Volatile Data StorageRead เป็นการอ่านค่าที่ถูกเก็บไว้แล้วส่งไปที่บล็อค Switch Caseเพื่อเข้าเงื่อนไขว่าค่าที่เข้านั้นมีค่าเท่ากับ 10 , 11 , 12 หรือ 13  ถ้าตรงกับ  Caseใดก็ให้ไปกระทำที่บล็อค  Switch Case Action Subsystem  ของ Case  นั้นซึ่งการกระทำนั้นจะรับค่าจากบล็อคm-file  ที่เป็นการกำหนดเงื่อนของค่าที่อ่านได้ของบล็อค  Volatile Data StorageRead   ที่ถูกเก็บไว้ว่าค่าที่อ่านได้นั้นจะให้เท่ากับตัวเลขใดตั้งแต่  0 – 9 ยกเว้น Case 13  จากนั้นบล็อค  Switch Case Action Subsystem  ก็จะส่งค่าไปที่บล็อค Product  เพื่อคูณกับเลข 1 , 10 , 100  เพื่อให้มีค่าในหลักหน่วย  หลักสิบ หลักร้อย  ตามลำดับแล้วนำไปบวกกันให้เป็นตัวเลขสามหลักที่สามารถเป็นได้ตั้งแต่  000 – 999 จากนั้นค่าที่ได้จะถูกนำไปเขียนเก็บไว้ในบล็อค Volatile Data Storage ที่ชื่อ Pass   เมื่อถูกนำไปเก็บแล้วก็จะใช้บล็อค Volatile Data StorageRead  อ่านค่าและส่งค่าไปสู่บล็อค Switch Case Action Subsystem  เมื่อ Case ของ  Switch Case มีค่าเท่ากับ  13  จากนั้นจะส่งค่าไปที่บล็อค Output1  และบล็อค  Printf  ซึ่งเป็นบล็อคที่จะนำค่าไปเก็บไว้ที่บล็อค Volatile Data Storage  ที่ชื่อ Show  จากนั้นจะทำการอ่านค่าที่ถูกเก็บไว้และถูกเขียนไปโชว์บนหน้าจอในบรรทัดที่ 3 ตำแหน่งที่ 2

17
รูปที่ 17โปรแกรม Simulink  ภายในบล็อค  Subsystem

ส่วนที่ 4  เป็นการนำค่าที่ได้จากบล็อค Accelerometer และบล็อค KeyPad  มาเข้าบล็อค If  โดยที่บล็อค  If1  จะรับค่ามาจากบล็อค Accelerometer  มาเข้าเงื่อนไขที่ว่าถ้าค่าที่เข้ามามากกว่าหรือเท่ากับ50 ให้ไปกระทำที่บล็อค If Action Subsystem ในส่วนที่ 4.1  แต่ถ้าไม่ใช่ให้ไปกระทำที่บล็อค   If Action Subsystem ในส่วนที่ 4.2 ส่วนบล็อค  If2  จะรับค่ามาจากบล็อค  KeyPad  มาเข้าเงื่อนไขที่ว่าถ้าค่าที่เข้ามาเท่ากับ 198  ( รหัสที่ใช้ปลดล็อค )  ให้ไปกระทำที่บล็อค  If Action Subsystem  ในส่วนที่ 4.3  แต่ถ้าค่าที่เข้ามานั้นมีค่ามากกว่าศูนย์และไม่เท่ากับ 198  ให้ไปกระทำที่บล็อค   If Action Subsystem ในส่วนที่ 4.4    เมื่อมีการกระทำที่บล็อค    If Action Subsystem  บล็อคใดบล็อคหนึ่งก็จะมีการโชว์ข้อความเตือนที่บรรทัดที่ 4  ตำแหน่งที่ 7 ด้วย

18
รูปที่ 18โปรแกรม Simulink  ภายในบล็อค If Action Subsystem 1

ส่วนที่ 4.1  เป็นการสั่งให้  Buzzer  ดัง  โดยกำหนดค่า 0N – OFF อยู่ที่  50  ซึ่งคือช่วงการติดดับอยู่ที่  50  เท่ากัน  โดยใช้บล็อค  Constant   ส่งไปที่บล็อค Basic PWM  ที่ขา  PA1  ของบอร์ด    และยังเป็นการสั่งให้โชว์ข้อความ  “  STEAL ”  เป็นการเตือนว่ารถจักรยานได้ถูกขโมยหรือมีการเคลื่อนตำแหน่งองศาเกิน 20 องศา  จากค่าเริ่มต้น

19
รูปที่ 19โปรแกรม Simulink  ภายในบล็อค If Action Subsystem 4

ส่วนที่ 4.1  เป็นการสั่งไม่ให้  Buzzer  ดัง โดยกำหนดค่า 0N – OFF ให้เป็น 0  ซึ่งคือช่วงการติดดับเป็น 0เท่ากัน  โดยใช้บล็อค  Constant   ส่งไปที่บล็อค Basic PWM  ที่ขา  PA1  ของบอร์ด    และยังเป็นการสั่งให้โชว์ข้อความ “  Safe ” เป็นการเตือนว่ารถจักรยานยังไม่ได้ถูกขโมยหรือมีการเคลื่อนตำแหน่งองศาเกิน 20 องศา  จากค่าเริ่มต้น

20
รูปที่  20โปรแกรม Simulink  ภายในบล็อค If Action Subsystem 2
ส่วนที่ 4.3  เป็นการสั่งไม่ให้  Buzzer  ดัง โดยกำหนดค่า 0N – OFF  ให้เป็น 0  ซึ่งคือช่วงการติดดับเป็น  0เท่ากัน  โดยใช้บล็อค  Constant   ส่งไปที่บล็อค Basic PWM  ที่ขา  PA1  ของบอร์ด   และยังเป็นการสั่งให้โชว์ข้อความ “  True ” เป็นการเตือนว่ารหัสที่เรากดนั้นถูกต้อง

21
รูปที่ 21โปรแกรม Simulink  ภายในบล็อค If Action Subsystem 3

ส่วนที่ 4.4  เป็นการสั่งให้  Buzzer  ดัง  โดยกำหนดค่า 0N – OFF อยู่ที่  50  ซึ่งคือช่วงการติดดับอยู่ที่  50  เท่ากัน  โดยใช้บล็อค  Constant   ส่งไปที่บล็อค Basic PWM  ที่ขา  PA1  ของบอร์ด  และยังเป็นการสั่งให้โชว์ข้อความ  “  Fale ”  เป็นการเตือนว่าการกดรหัสนั้นผิด

อธิบาย  m – file
22
รูปที่ 22การอธิบายการเขียน  code  m – file  ภายในบล็อค  MATLAB Function
23
รูปที่  23การอธิบายการเขียน  code  m – file  ภายในบล็อค  MATLAB Function
24
รูปที่  24 การอธิบายการเขียน  code  m – file  ภายในบล็อค  MATLAB Function

อธิบาย   State flow

25
รูปที่  25การเขียน  Code State flowภายในบล็อค State flow1

การเขียนโค้ดลงในบล็อกState-flow จะเขียนแบบ flow chart คือจะนำบล็อกวางเป็นเงื่อนไขบล็อค   State flow1  เป็นการเขียนเพื่อบันทึกค่าเริ่มต้นของเซนเซอร์   โดยใช้สวิตซ์เป็นตัวกำหนดให้บันทึกค่าและรีเซตค่า  โดยเริ่มที่บล็อค Step1  ให้ค่า data output ที่ชื่อ Sstart  มีค่าเท่ากับ 0  หลังจากนั้นเมื่อ data input  ที่ชื่อ Swich มีค่าเท่ากับ1 ให้ไปกระทำที่บล็อค Step2  โดยให้ค่า  data output ที่ชื่อ  Sstart  มีค่าเท่ากับ  data input   ที่ชื่อ Datax ซึ่งจะเป็นการเก็บค่าเริ่มต้นของเซนเซอร์  หลังจากนั้นเมื่อ data input  ที่ชื่อ Swich มีค่าเท่ากับ  0 ให้ไปกระทำที่บล็อค Step1  โดยให้ค่า  data output ที่ชื่อ  Sstartมีค่าเท่ากับ 0  ซึ่งเป็นการรีเซตค่าให้เท่ากับ 0

26
รูปที่  26การเขียน  Code State flow  ภายในบล็อค State flow2
          บล็อค  State flow2  เป็นการเขียนเพื่อพิจารณาเงื่อนไขค่าที่รับเข้ามา  โดยเริ่มที่บล็อค Step1 กำหนดให้ค่า data output ที่ชื่อ OP  มีค่าเท่ากับ 0 หลังจากนั้นเมื่อเมื่อ data input  ที่ชื่อ Swich  มีค่าเท่ากับ 1 และdata input  ที่ชื่อ  Datax   มีค่ามากกว่าdata input  ที่ชื่อ  errorAdd   หรือมีค่าน้อยกว่า  data input  ที่ชื่อ errorNe  ให้ไปกระทำที่บล็อค Step2  คือให้ค่า data output ที่ชื่อOP  มีค่าเท่ากับ 50   หลังจากนั้นเมื่อdata input  ที่ชื่อ Swich  มีค่าเท่ากับ 0 ให้ไปกระทำที่บล็อค Step1  โดยให้ค่า  data output ที่ชื่อ  OP  มีค่าเท่ากับ 0

27
รูปที่  27การเขียน  Code State flow  ภายในบล็อค State flow3

การเริ่มต้นของ State flowหลังจากที่เราทำการเซตค่า  Inputและoutputเรียบร้อยแล้วบล็อคInitial จะเป็นส่วนของการประกาศค่าเริ่มต้นให้กับ  Output คือ  row1 – row4   ที่ส่งไปให้Keypad มีค่ำเป็น 1 เพราะ Keypad ที่ใช้เป็นการต่อแบบPull up เมื่อเรากดสวิตซ์มันจะส่งค่า  0 มายังไมโครและประกาศ Output ตัวแปรที่ชื่อ  num กับ  data  ให้มีค่าเป็น  0 หลังจากนั้นก็เซตการทำงาน   ซึ่งลักษณะการทำงานจะวนไปเรื่อยๆเป็น cycle จากStep1 – Step4  และวนกลับมาที่จุดเชื่อมต่อระหว่างบล็อค Initial กับ Step1เพื่อให้  Outputที่ได้มาเซตเป็นค่าเริ่มต้นซึ่งการส่งค่า  Output ออกไปโดยเราจะส่ง0111 , 1011 , 1101 , 1110  ตามลำดับของบล็อคStep  เพื่อที่จะเป็นเป็นตัวตรวจสอบKeypadซึ่งหลักการตรวจสอบจะใช้หลักการการสแกนโดยเมื่อสมมุติเรากดปุ่มหมายเลข1 คือกดปุ่มบนสุดตัวแรกของแถวที่1 เราก็จะรับ Input เข้ามา0111 เมื่อเราได้ค่า Inputมาแล้วเราก็จะมาตรวจสอบกับOutputที่เราได้ป้อนไปว่ามันตรงกับบล็อค Step ไหนเช่น Input  0111ตรงกับ  Output 0111ในบล็อค  Step1 แสดงว่าเราได้ทำการกดปุ่มในแถวที่ 1หลักที่  1 ค่าที่ออกมาจะเท่ากับ 1
ผลการทดลอง
จากการทดสอบชุดอุปกรณ์ป้องกันการขโมยรถจักรยาน  พบว่าถ้าเอียงไปเกินองศาของค่าเริ่มต้นที่บวกกับค่าความผิดพลาดไม่ว่าจะเป็นแกน  X   หรือแกน  Y  ในทิศทางชี้ลงค่าจะเป็นบวก   หรือชี้ขึ้น ค่าจะเป็นลบ   แกนใดแกนหนึ่ง  ไมโครก็จะสั่งให้Buzzerนั้นทำงานเตือน  แต่ก็ยังพบค่า error  ประมาณ +_1 องศาจากค่าเริ่มต้นที่บวกกับค่าความผิดพลาด    นอกจากนี้ยังพบว่าถ้าวางไว้บนพื้นราบแล้วออกแรงดันไปข้างหน้าด้วยแรงที่มากพอที่จะทำให้ค่าความเร่งเนื่องจากความเร็วเทียบกับเวลาให้มีค่าเท่ากับค่าความเร่งเนื่องจากแรงโน้มถ่วงของโลกที่ได้บวก ลบค่าความผิดพลาดไปแล้วนั้น  ก็จะทำให้ Buzzer  ทำงานด้วย

28
รูปที่  28   แสดงทิศทางของแกน X , Y ,  Z
29
รูปที่ 29  แสดงผลการเอียงในแกน X ณ ตำแหน่งปัจจุบันในทิศทางชี้ลง มีค่าเท่ากับ 19.2องศา     พร้อมโชว์ข้อความ  “ Safe ”
30
รูปที่ 30แสดงผลการบันทึกค่าเริ่มต้น  และค่า ณ ตำแหน่งปัจจุบัน พร้อมโชว์ข้อความ  “ Safe ”
31
รูปที่ 31  แสดงผลเมื่อมีการเอียงเกิน   20   องศาจากค่าเริ่มต้น   Buzzer  จะทำงานและพร้อมโชว์ข้อความ  “ STEAL ”
32

ความคิดเห็น

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

งานที่6 โปรเจคเล็ก ๆ การประยุกต์ใช้เซนเซอร์วัดแสง (LDR) กับ หลอด LED ในการวัดกระแสในวงจรว่าไหล่รึเปล่า

งานที่5 Arduino เปิด ปิดไฟด้วยเสียง

Mini Project