งานที่20 ชุดอุปกรณ์ป้องกันการขโมยจักยาน
ชุดอุปกรณ์ป้องกันการขโมยจักยาน
ผู้ทำโครงงาน นาย กิตติศักดิ์ แตงเกษม รหัสนักศึกษา 5502013630065 TT2RA
Simulink model File miniProject2014
รูปที่ 1 วงจรการต่อใช้งานจริง
ที่มาและความเป็นมาของโครงงาน
เนื่องจากในโลกปัจจุบันนี้ ความอุดมสมบูรณ์ของธรรมชาติได้ลดน้อยลง อันเนื่องมาจากการถูกทำลายจากฝีมือมนุษย์ทั้งทางตรง อาทิ การตัดต้นไม้ และทางอ้อม อาทิ การปล่อยมลพิษทางอากาศจากโรงงาน หรือรถยนต์ทำให้มีการรณรงค์ปั่นจักรยาน เพื่อลดปริมาณรถยนต์ในท้องถนน อันส่งผลถึงการลดปัญหามลพิษทางอากาศจากยานพาหนะ และยกระดับคุณภาพอากาศให้ดีขึ้น รวมทั้งช่วยลดค่าใช้จ่ายและเวลาในการเดินทางและส่งผลต่อการประหยัดพลังงานน้ำมัน ทำให้มีคนหันมาใช้จักรยานกันเพิ่มมากขึ้น แต่ก็หนีไม่พ้นการขโมยจักรยานไปขาย หลายคนอาจใช้ที่คล้องล๊อคจักรยานกับสิ่งต่างๆ แต่ในบางครั้งต้องคล้องล๊อคตัวถังกับล้อแทน ทำให้โจรยกขโมยจักรไปโดยไม่มีอะไรเตือน และไม่อะไรบ่งบอกว่ามีการขโมยเกิดขึ้น เพราะคนรอบข้างอาจนึกว่าเป็นเจ้าของมายกจักรยานไป
จากเหตุการณ์ดังกล่าวทำให้เกิดไอเดียในการสร้างชุดอุปกรณ์ป้องกันการขโมยจักรยาน โดยใช้เซนเซอร์ aMG IMU-9A ซึ่งเป็นเซนเซอร์วัดอัตราเร่ง เป็นตัวรับรู้การเคลื่อนที่ของจักรยาน แล้วส่งสัญญาณ Output ไปที่ไมโครคอนโทเลอร์เป็นตัวประมวลผล เมื่อประมวลผลเสร็จก็จะส่งสัญญาณ Output ไปที่ Buzzer ที่เป็นตัวส่งเสียงเตือนให้รู้ว่าจักรยานนั้นได้ถูกขโมย
คุณสมบัติการทำงานของโครงงาน
- สามารถบอกองศาการเอียงของจักรยานที่ค่าเริ่มต้นและค่าปัจจุบันทั้งแกน X และแกน Y
- ค่าความผิดพลาดขององศาเมื่อคนโดนรถจักรยาน +_ 20 องศา
- มีเสียงและข้อความเตือนเมื่อถูกขโมย
หลักการและทฤษฎีที่เกี่ยวข้อง
- สัญญาณ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 การต่อขาสัญญาณ I2C กับบอร์ด STM32F4
- หลักการเกี่ยวกับ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ตำแหน่ง PIN และวงจร Keypad
หลักการที่เกี่ยวข้องกับการกดตัวเลขป้อนค่าใน Keypad โดยเราจะต้องทำการป้อนค่าของข้อมูลลงไปในตัวKeypadสมมุติว่าเราจะป้อนค่ำ 198ให้กับ Keypadหลักการในการกดตัวเลขนั้นเราจะต้องกดหลักร้อยก่อนคือจะต้องกดที่ตัวอักษร “ ร ” แล้วตามด้วยเลข 1 ต่อมาหลักสิบคือจะต้องกดที่ตัวอักษร “ ส ” แล้วตามด้วยเลข 9 หลักจากนั้นหลักหน่วยเป็นตัวสุดท้ายคือจะต้องกดที่ตัวอักษร “ ห ” แล้วตามด้วยเลข 8
รูปที่ 4ตำแหน่งตัวเลขและตัวอักษรบนแป้น Keypad
รูปที่ 5ตาราง True table ค่าลอจิกของตัวเลขละตัวอักษรบน Keypad
หลักการทำงานชุดอุปกรณ์ป้องกันการขโมยรถจักรยาน
ชุดอุปกรณ์ป้องกันการขโมยรถจักรยานจะเริ่มทำการส่งสัญญาณเตือน เมื่อขยับรถจักรยานในแกน X หรือแกน Y เกิน 20 องศาจากค่าเริ่มต้นของเซนเซอร์ โดยเซนเซอร์จะส่งค่าความเร่งไปที่บอร์ดไมโคร หลังจากนั้นบอร์ดไมโครจะทำการแปลงค่าความเร่งเป็นองศา ถ้ามีค่าเกิน 20 องศาจากค่าเริ่มต้น ไมโครจะส่งสัญญาณไปทิกให้ Buzzerดัง การที่จะทำให้ Buzzer นั้นหยุดดังมีอยู่ 2 วิธี คือปิดสวิตซ์จ่ายไฟเลี้ยง และกด Keypad เพื่อปลดล็อค ซึ่งได้ทำการเซตรหัสผ่านเป็น 198 หากกดผิด Buzzer จะไม่หยุดดังจนกว่าจะกดรหัสที่ถูกต้องเสียก่อน
การต่อวงจรชุดอุปกรณ์ป้องกันการขโมยรถจักรยาน
รูปที่ 6วงจรสมบูรณ์ส่วนที่ 1 และส่วนที่ 2
รูปที่ 7วงจรสมบูรณ์ส่วนที่ 3
รูปที่ 8วงจรสมบูรณ์ส่วนที่ 4
รูปที่ 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 อีกที
ส่วนประกอบของวงจรประกอบไปด้วย
- บอร์ด STM32F4 DISCOVERY
- Keypad 4*4
- LCD 16*4
- Accelerometer Sensor ( IMU_9A )
- Battery 7.5V
- Regulator ( IC7805 )
- หลอด LED
- Switch
- Buzzer
รูปที่ 10ส่วนประกอบของวงจร
โปรแกรม Simulink ของโครงงาน
รูปที่ 11โปรแกรม Simulink ของโครงงาน
การใช้โปรแกรม Matlab เขียน Code Simulink โดยใช้ Block Diagram ซึ่งภายใน Simulink นั้นจะถูกแบ่งเป็น 4 ส่วน คือ 1. เป็นการอ่านค่าจากเซนเซอร์วัดอัตราเร่ง 2. เป็นนำค่าที่ได้จากเซนเซอร์มากเก็บเข้าเงื่อนไขและคำนวณองศาการเอียง 3. เป็นการใช้ Keypad ปลดล็อครหัส 4. เป็นการเข้าเงื่อนไขเพื่อให้ Buzzer ทำงานและหยุดทำงาน
รูปที่ 12โปรแกรม Simulink ภายในบล็อค Demo_IMU9A
ส่วนที่ 1 เป็นการอ่านค่าจากเซนเซอร์ ( accelerometer_imu9a ) ซึ่งเป็นโค้ดสำเร็จรูปสามารถนำมาใช้งานได้ทันที โดยค่าที่ออกมานั้นขึ้นอยู่กับการเอียงเซนเซอร์ ซึ่งจะอยู่ในช่วง +_1 mg ( g = 9.81 m/s^2 ค่าความเร่งเนื่องจากแรงโน้มถ่วงของโลก ) เมื่อเซนเซอร์ขนานกับแกนโดยตั้งฉากกับพื้นโลกค่าที่ออกมาจะเท่ากับ0 แต่ถ้านำเซนเซอร์ชี้ลงล่างจะมีค่าเท่ากับ 1 และถ้านำชี้ขึ้นบนจะมีค่าเท่ากับ -1 ซึ่งในโครงงานชุดอุปกรณ์ป้องกันการขโมยรถจักรยานนี้จะใช้พิจารณาเพียงสองแกน คือแกน X และแกน Y
รูปที่ 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โปรแกรม 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โปรแกรม 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โปรแกรม 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โปรแกรม 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โปรแกรม Simulink ภายในบล็อค If Action Subsystem 1
ส่วนที่ 4.1 เป็นการสั่งให้ Buzzer ดัง โดยกำหนดค่า 0N – OFF อยู่ที่ 50 ซึ่งคือช่วงการติดดับอยู่ที่ 50 เท่ากัน โดยใช้บล็อค Constant ส่งไปที่บล็อค Basic PWM ที่ขา PA1 ของบอร์ด และยังเป็นการสั่งให้โชว์ข้อความ “ STEAL ” เป็นการเตือนว่ารถจักรยานได้ถูกขโมยหรือมีการเคลื่อนตำแหน่งองศาเกิน 20 องศา จากค่าเริ่มต้น
รูปที่ 19โปรแกรม Simulink ภายในบล็อค If Action Subsystem 4
ส่วนที่ 4.1 เป็นการสั่งไม่ให้ Buzzer ดัง โดยกำหนดค่า 0N – OFF ให้เป็น 0 ซึ่งคือช่วงการติดดับเป็น 0เท่ากัน โดยใช้บล็อค Constant ส่งไปที่บล็อค Basic PWM ที่ขา PA1 ของบอร์ด และยังเป็นการสั่งให้โชว์ข้อความ “ Safe ” เป็นการเตือนว่ารถจักรยานยังไม่ได้ถูกขโมยหรือมีการเคลื่อนตำแหน่งองศาเกิน 20 องศา จากค่าเริ่มต้น
รูปที่ 20โปรแกรม Simulink ภายในบล็อค If Action Subsystem 2
ส่วนที่ 4.3 เป็นการสั่งไม่ให้ Buzzer ดัง โดยกำหนดค่า 0N – OFF ให้เป็น 0 ซึ่งคือช่วงการติดดับเป็น 0เท่ากัน โดยใช้บล็อค Constant ส่งไปที่บล็อค Basic PWM ที่ขา PA1 ของบอร์ด และยังเป็นการสั่งให้โชว์ข้อความ “ True ” เป็นการเตือนว่ารหัสที่เรากดนั้นถูกต้อง
รูปที่ 21โปรแกรม Simulink ภายในบล็อค If Action Subsystem 3
ส่วนที่ 4.4 เป็นการสั่งให้ Buzzer ดัง โดยกำหนดค่า 0N – OFF อยู่ที่ 50 ซึ่งคือช่วงการติดดับอยู่ที่ 50 เท่ากัน โดยใช้บล็อค Constant ส่งไปที่บล็อค Basic PWM ที่ขา PA1 ของบอร์ด และยังเป็นการสั่งให้โชว์ข้อความ “ Fale ” เป็นการเตือนว่าการกดรหัสนั้นผิด
อธิบาย m – file
รูปที่ 22การอธิบายการเขียน code m – file ภายในบล็อค MATLAB Function
รูปที่ 23การอธิบายการเขียน code m – file ภายในบล็อค MATLAB Function
รูปที่ 24 การอธิบายการเขียน code m – file ภายในบล็อค MATLAB Function
อธิบาย State flow
รูปที่ 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การเขียน 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การเขียน 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 แสดงทิศทางของแกน X , Y , Z
รูปที่ 29 แสดงผลการเอียงในแกน X ณ ตำแหน่งปัจจุบันในทิศทางชี้ลง มีค่าเท่ากับ 19.2องศา พร้อมโชว์ข้อความ “ Safe ”
รูปที่ 30แสดงผลการบันทึกค่าเริ่มต้น และค่า ณ ตำแหน่งปัจจุบัน พร้อมโชว์ข้อความ “ Safe ”
รูปที่ 31 แสดงผลเมื่อมีการเอียงเกิน 20 องศาจากค่าเริ่มต้น Buzzer จะทำงานและพร้อมโชว์ข้อความ “ STEAL ”
ความคิดเห็น
แสดงความคิดเห็น