38
3.5.5 การออกแบบการต่อโมดลู RTC(Real Time Clock) DS1302
รปู ท่ี 3.21 รูปโครงสร้างวงจร โมดูล RTC(Real Time Clock) DS1302
จากรปู ที่ 3.21 ตวั บอรด์ จะได้รับสญั ญาณจากโมดูลนบั เวลา RTC (Real Time Clock) ซ่งึ ตัวโมดลู น้นั
สามารถดึงฐานเวลาจรงิ ออกมาให้กับตัวบอรด์ Arduino ประมวลผลแล้วสง่ สัญญาณ OUTPUT ไป
ควบคมุ การทางานของเครื่องกรีดยางพาราอตั โนมัติ โดยต่อขา CLK DAT RST เขา้ กบั ขา Digital 3, 4, 5
และ ตอ่ ขา VCC,GND จากบอร์ดเขา้ กบั ขา VCC และ GND ของโมดลู
3.6 การออกแบบการทดสอบ
การทดสอบการทางานน้นั จะแบ่งการทดสอบแบบตา่ งๆ โดยจะแบง่ ดงั นี้ โดยการทดสอบนนั้ จะแบ่ง
ออกเป็น 3 ส่วน ดงั นี้
3.6.1 ส่วนท่ี 1 ทดสอบการเซ็ตเวลาในการกรีดยางของเคร่ืองกรีดยางพาราทาการทดสอบหาค่า
ความคลาดเคลอ่ื นของเวลาในการทางานซึ่งจะเปรยี บกบั เวลาจรงิ กับเวลาในการทาการกรดี ยางของเครอ่ื ง
ซ่งึ เวลาท่ใี ช้ในการทดสอบจะเปน็ เวลาทกุ ๆ 1:00 น. ของทุกๆวัน โดยจะได้ทาการทดสอบเป็นเวลา 5 วนั
3.6.2 ส่วนที่ 2 ทดสอบการย้ายรอยกรีดของเคร่ืองกรีดยางพาราทาการทดสอบหาระยะในการทา
การยา้ ยรอยกรีดของเครือ่ งกรีดยางพาราต่อรอบ โดยกาหนดตง้ั ระยะในการยา้ ยรอยกรีดอย่ทู ่ี 2 มิลลิเมตร
ทาการทดสอบเปน็ จานวน 10 ครงั้
3.6.3 ส่วนท่ี 3 ทดสอบเก็บผลผลิตของปริมาณน้ายางเปรียบเทียบกับการกรีดยางด้วยแรงงาน
มนษุ ย์
ทาการทดสอบ โดยการเกบ็ ผลผลิตน้ายางท่ีได้หลงั เคร่ืองกรีดยางพาราอัตโนมตั ิทางานเสรจ็
แลว้ นามาเปรยี บเทียบ ว่าปริมาณผลผลิตน้ายางเกนิ 70% ของเกบ็ ผลผลิตนา้ ยางท่ีไดจ้ ากการกรีดยาง
ดว้ ยฝีมือแรงงานมนุษย์หรือไม่ในระยะการกรีดทเ่ี ท่ากัน โดยทาการทดสอบเปน็ เวลา 5 วนั
39
บทที่ 4
ผลการทดสอบ
ในบทน้ีจะกล่าวถึงผลการทดสอบการทางานของเครื่องกรีดยางพาราอัตโนมัติ ซึ่งจะทาการเก็บผล
การทดสอบอยู่ 3 ส่วน ส่วนแรกคือ ส่วนของการเซ็ตเวลาในการกรีดยางของเคร่ืองกรีดยางพาราอัตโนมัติ
ส่วนท่ีสองคือ การย้ายรอยกรีดของเคร่ืองกรีดยางพารา ส่วนที่สาม คือส่วนของผลผลิตน้ายางซึ่งผลการ
ทดสอบจะไดผ้ ลออกมาดงั นี้
4.1 การทดสอบเปรียบเทียบเวลาในการทาการกรดี ยางของเคร่ืองกรดี ยางพาราเทียบกับเวลาบน
นาฬกิ าที่ใช้ทาการทดสอบเป็นเวลา 5 วัน
ทดสอบหาค่าความคลาดเคล่ือนของเวลาในการทางานซ่ึงจะเปรียบกับเวลาบนนาฬิกาท่ีใช้ทาการ
ทดสอบกบั เวลาในการทาการกรีดยางของเครื่อง ซึง่ เวลาทีใ่ ช้ในการทดสอบจะเป็นเวลาทุกๆ 1:00 น. ของ
ทกุ ๆวัน โดยจะได้ทาการทดสอบเปน็ เวลา 5 วัน
ตารางการทดลองท่ี 4.1 เปรียบเทยี บเวลาในการทาการกรดี ยางของเคร่ืองกรีดยางพาราเทยี บกับเวลา
จริงเป็นเวลา 5 วนั
วันที่ เวลาทใ่ี หเ้ ครือ่ งทา เวลาเคร่ือง เปอร์เซน็ ต์
การกรีดยาง (จากการสังเกต/นาที) ความคลาด
เคลื่อน(%)
1 1:00 1:00 0
2 1:00 1:00 0
3 1:00 1:00 0
4 1:00 1:00 0
5 1:00 1:00 0
จากตารางท่ี 4.1 ผลการทดสอบเปรยี บเทียบเวลาในการทาการกรีดยางของเครื่องกรดี ยางพาราเทยี บกบั
เวลาจริง 5 วนั ที่เวลา 1:00 น. พบวา่ มีเปอร์เซ็นต์ความคลาดเคลอื่ นเฉลย่ี 0 เปอรเ์ ซ็นต์ ดงั นนั้ สามารถ
เซ็ตคา่ ใหเ้ ครือ่ งกรดี ยางทาการกรีดยางทุกๆ 01:00 น. ได้
40
4.2 การทดสอบเก็บระยะในการย้ายรอยกรีดยางพาราต่อรอบ
ทดสอบหาระยะในการทาการยา้ ยรอยกรดี ของเครอ่ื งตอ่ รอบ โดยกาหนดต้งั ระยะในการยา้ ยรอย
กรดี อย่ทู ่ี 2 มิลลิเมตร ทาการทดสอบจานวน 10 ครั้งทาการสงั เกตและบนั ทึกผล
ตารางการทดลองที่ 4.2 ทดสอบเกบ็ ระยะในการย้ายรอยกรดี ยางพาราตอ่ รอบ
ครง้ั ที่ ระยะในการย้ายที่กาหนด ระยะในการย้าย เปอรเ์ ซ็นต์
ความคลาด
(มิลลเิ มตร) จากการทดสอบ เคลอ่ื น(%)
(มิลลิเมตร) 2.5
3.6
12 1.95 0
4.1
22 1.93 0.49
1
32 2 1.4
0.5
42 1.92 0
4.1
52 2.01
62 1.98
72 2.03
82 1.99
92 2
10 2 1.92
จากตารางที่ 4.2 ผลการทดสอบการย้ายรอยกรีดในระยะที่กาหนด 2 มิลลิเมตร ทาการทดสอบเป็น
จานวน 10 คร้ัง พบว่ามีเปอร์เซ็นต์ความคลาดเคล่ือน 2.5 3.6 0 4.1 0.49 1 1.4 0.5 0 4.1 ตามลาดับ
เฉลี่ย 1.769 เปอร์เซ็นต์ โดยมีเปอร์เซ็นต์ความคลาดเคลื่อนมากท่ีสุดอยู่ที่ 4.1 เปอร์เซ็นต์ ดังน้ันสามารถ
ตง้ั ระยะในการยา้ ยรอยกรดี ที่ระยะ 2 มลิ ลเิ มตรได้
4.3 การทดสอบเกบ็ ผลผลิตของปรมิ าณนา้ ยางเปรยี บเทียบกับการกรีดยางด้วยแรงงานมนุษย์
ทาการทดสอบ โดยการเก็บผลผลิตน้ายางที่ได้หลังเคร่ืองกรีดยางพาราอัตโนมัติทางานเสร็จ แล้ว
นามาเปรียบเทียบ ว่าปริมาณผลผลิตน้ายางเกิน 70% ของเก็บผลผลิตน้ายางที่ได้จากการกรีดยางด้วย
ฝีมือแรงงานมนุษย์หรือไม่ โดยรอยที่กรีดเองน้ันจะอยู่คนละด้านของรอยที่กรีดด้วยเคร่ืองกรีดยางพารา
อตั โนมัตทิ ี่เราได้ทาการติดตั้งและรอยกรีดจะเยื้องกันอยู่ที่ประมาณ 25 เซนติเมตร ซ่ึงในการเปรยี บเทียบ
ครัง้ น้ี ไดท้ าการทดสอบกรีดนา้ ยางจากต้นยางพาราต้นเดยี วกนั ในเวลาเดยี วกนั คอื 01.00 น. – 06.00 น.
ของวันทดสอบท้ัง 5 วัน ซ่งึ สามารถแสดงผลการทดสอบได้ดังนี้
41
ตารางการทดลองท่ี 4.3 เกบ็ ผลผลติ ของปรมิ าณน้ายางเปรยี บเทียบกบั การกรดี ยางด้วยแรงงานมนุษย์
วนั ท่ี ปรมิ าณน้ายางที่ ปริมาณน้ายางที่ ปริมาณผลผลิตนา้ ยางของเคร่ืองกรดี
ได้จากเคร่อื ง ได้จากการกรดี ยางพาราเปรียบเทยี บกับปริมาณนา้
กรดี ยางพารา ดว้ ยแรงงาน ยางท่ไี ดจ้ ากการกรดี ดว้ ยแรงงาน
(ml) มนุษย์ (ml) มนษุ ย์ (%)
1 6.4 8.1 79.01
2 5.6 7 80
36 7.5 80
4 4.6 6 76.66
5 4.4 5 88
จากตารางที่ 4.3 ผลการทดสอบเปรียบเทียบปริมาณผลผลิตน้ายางของเคร่ืองกรีดยางพาราเปรียบเทียบ
กับปริมาณน้ายางที่ได้จากการกรีดด้วยแรงงานมนุษย์ เป็นเวลา 5 วัน พบว่าปริมาณผลผลิตน้ายางท่ีได้
จากเคร่ืองกรีดยางพาราอัตโนมัติ มีปริมาณผลผลิตน้ายางเกิน 70% ของการปริมาณน้ายางที่ได้จากการ
กรีดดว้ ยแรงงานมนุษย์
42
บทที่ 5
สรปุ ผลการดาเนนิ โครงงาน
5.1 บทนา
ในบทนจี้ ะกล่าวถงึ ผลสรุปของโครงงานในดา้ นต่างๆ ของเครื่องกรีดยางพาราอัตโนมัติ โดย
แยกออกเปน็ 3 ส่วนคอื สรปุ ผลของโครงงาน ปญั หาของโครงงานและข้อเสนอแนะเพิม่ เติม
5.2 สรปุ ผลการดาเนินงานโครงงาน
เครื่องกรดี ยางพาราอัตโนมตั ิ ประกอบดว้ ยกนั อยู่ 2 สว่ น ส่วนแรกคือส่วนของการกรีดยางและส่วน
ที่สองคือ ส่วนของการย้ายรอยกรีด ซ่ึงควบคุมด้วยบอร์ดไมโครคอนโทรลเลอร์ Uno R3 เคร่ืองกรีด
ยางพาราอัตโนมัติสามารถตั้งเวลาในการกรีดยาง สามารถย้ายรอยกรดี ในแนวด่ิงหลังการกรีดท่ีระยะห่าง
จากรอยเดิมเป็นระยะ 2 มิลลิเมตร และปริมาณผลผลิตน้ายางท่ีได้จากเคร่ืองกรีดยางพาราอัตโนมัติมี
ปรมิ าณผลผลติ น้ายางเกนิ 70% ของปริมาณนา้ ยางทไ่ี ด้จากการกรีดด้วยแรงงานมนุษย์
5.2.1 การทดสอบเปรียบเทียบเวลาในการทาการกรดี ยางของเคร่ืองกรดี ยางพาราเทียบกบั เวลาจริง
เป็นเวลา 5 วัน
จาการทดสอบเปรียบเทียบเวลาในการทาการกรีดยางของเคร่ืองกรีดยางพาราเทียบกับเวลา
บนนาฬิกาท่ีใช้ทาการทดสอบที่เวลา 1:00 น. เป็นเวลา 5 วัน พบว่ามีเปอร์เซ็นต์ความคลาดเคลื่อนเฉล่ีย
0 เปอรเ์ ซน็ ต์
5.2.2 การทดสอบเก็บระยะในการยา้ ยรอยกรดี ยางพาราต่อรอบ
จากการทดสอบการย้ายรอยกรีดในระยะที่กาหนด 2 มิลลิเมตร ทาการทดสอบเป็นจานวน
10 คร้ัง พบว่ามีเปอร์เซ็นต์ความคลาดเคล่ือน 2.5 3.6 0 4.1 0.49 1 1.4 0.5 0 4.1 ตามลาดับ เฉล่ีย
1.769 เปอรเ์ ซน็ ต์ โดยมีเปอร์เซน็ ตค์ วามคลาดเคล่ือนมากทสี่ ุดอย่ทู ่ี 4.1 เปอรเ์ ซน็ ต์
5.2.3 การทดสอบเกบ็ ผลผลิตของปรมิ าณน้ายางเปรียบเทียบกับการกรีดยางดว้ ยแรงงานมนุษย์
จากการทดสอบเปรียบเทียบปริมาณผลผลิตน้ายางของเคร่ืองกรีดยางพาราเปรียบเทียบกับ
ปรมิ าณนา้ ยางท่ไี ดจ้ ากการกรดี ดว้ ยแรงงานมนษุ ยใ์ นระยะการกรดี ท่เี ท่ากัน เป็นเวลา 5 วัน พบวา่ ปริมาณ
ผลผลิตนา้ ยางที่ได้จากเครอื่ งกรดี ยางพาราอัตโนมัติ มีปรมิ าณผลผลิตน้ายางเกิน 70% ของการปริมาณน้า
ยางทีไ่ ด้จากการกรดี ด้วยแรงงานมนุษย์
43
5.3 ปัญหาท่ีพบในการดาเนินโครงงาน
5.3.1 การหาตน้ ยางพาราที่จะทาการใช้ทดสอบนน้ั หาค่อนข้างยาก
5.3.2 เครื่องตน้ แบบไมส่ ามารถทดสอบกบั ต้นยางพาราได้ทุกขนาด
5.3.3 เคร่อื งตน้ แบบมนี า้ หนักค่อนข้างมาก
5.4 ข้อเสนอแนะ
5.4.1 ควรลดโครงสรา้ งให้น้อยลงและเลอื กใชส้ ว่ นประกอบทเี่ ปน็ เหลก็ ขนาดบางเพ่ือลดน้าหนัก
ของเครอ่ื งต้นแบบ
44
บรรณานกุ รม
[1] วิธีกรีดตน้ ยางพารา. 2556. “การกรดี ยางพารา” (ออนไลน์). สืบค้นได้จาก :
http://pnpandbest.com/pnp_book/pnp_book03.html [21 พฤศจิกายน 2562]
[2] “การกรีดยาง” (ออนไลน์). สบื ค้นไดจ้ าก : https://www.rakbankerd.com/
[21 พฤศจกิ ายน 2562]
[3] สมดุลย์ พวกเกาะ. 2557. “การกรดี ยางพารา” (ออนไลน์). สืบค้นได้จาก :
https://www.aopdr01.doae.go.th/aopdr01/tapping2.htm [21 พฤศจิกายน 2562]
[4] ศุภชัย สุรินทรว์ งศ์, “มอเตอร์ไฟฟา้ กระแสตรง” บรษิ ทั ดวงกลมสมยั . จากดั . 2535
[5] “มอเตอร์เกยี ร์” (ออนไลน์). สบื คน้ ไดจ้ าก :
https://th.misumiec.com/pr/recommend_category/gear_motor/
[21 พฤศจกิ ายน 2562]
[6] “มอเตอร์เกียรค์ ืออะไร” (ออนไลน์). สบื ค้นไดจ้ าก : https://jerrysartaramastores.com/
[21 พฤศจิกายน 2562]
[7] “ระบบส่งกาลงั ของเครอ่ื งจกั รกล” (ออนไลน์). สืบค้นไดจ้ าก :
https://www.engineerknowledge.blogspot.com/2011/03/blog-post_09.html
[21 พฤศจกิ ายน 2562]
[8] “Arduino Uno R3” (ออนไลน์). สบื คน้ ได้จาก : https://www.arduitronics.com/
[21 พฤศจกิ ายน 2562]
[9] “Relay module” (ออนไลน์). สืบค้นได้จาก : https://www.thai.alibaba.com/product-
gs/dc-5v-relay-module-2-channels-scm-development-board-1164452544.html,
[21 พฤศจิกายน 2562]
[10] “RTC DS1302” (ออนไลน์). สืบค้นได้จาก : http://boyza123.blogspot.com/
[21 พฤศจกิ ายน 2562]
[11] “LM2596 DC-to-DC Step down Converter Module” (ออนไลน์). สบื ค้นได้จาก :
www.boardwellshop.com/product/32/ [21 พฤศจิกายน 2562]
[12] “แบตเตอรี่” (ออนไลน์). สืบคน้ ได้จาก : https://masii.co.th/blog/
[21 พฤศจกิ ายน 2562]
[13] “แบตเตอรี่แห้งคืออะไร” (ออนไลน์). สืบค้นไดจ้ าก :
https://www.rta.mi.th/15900u/STMP/Interest/Megazine/training.html
[21 พฤศจิกายน 2562]
45
บรรณานุกรม (ต่อ)
[14] Robot Shop, “H-BRIDGE DC MOTOR 40A” (ออนไลน์). สืบคน้ ไดจ้ าก:
http://www.roboseed.com/product/50/h-bridge-driver-dc-motor-40a
[21 พฤศจกิ ายน 2562]
[15] “เฟอื ง” (ออนไลน์). สืบคน้ ได้จาก : https://th.wikipedia.org/wiki/เฟอื ง
[21 พฤศจิกายน 2562]
[16] “เฟอื ง (Gear) มีก่ีประเภท” (ออนไลน์). สืบคน้ ไดจ้ าก :
http://www.pakoengineering.com/blog/2018/ [21 กรกฎาคม 2562]
[17] “โซ่ส่งกาลัง” (ออนไลน์). สบื ค้นได้จาก : https://www.thaimechanic.com/article-124-
read.html [21 พฤศจิกายน 2562]
[18] “ขอ้ ดขี อง Lead Screw” (ออนไลน์). สบื คน้ ได้จาก :
https://www.thaimechanic.com/article-124-read.html [21 พฤศจิกายน 2562]
[19] “Limit Switch” (ออนไลน์). สืบคน้ ไดจ้ าก :
http://www.chakchaielectronics.com/articles/42310189/Limit-Switch.html
[21 พฤศจิกายน 2562]
46
ภาคผนวก
47
ภาคผนวก ก.
การทดสอบการทางานของเครอ่ื งต้นแบบก่อนนาไปใชง้ าน
48
การทดสอบเปรียบเทียบเวลาในการทางานของเครื่องกรีดยางพาราเทยี บกับเวลาจริงต่อเน่อื ง ห่างกัน
1 ช่ัวโมง
ทดสอบหาค่าความคลาดเคล่ือนของเวลาในการทางานซึ่งจะเปรียบกับเวลาจริงกับเวลาในการ ทา
การกรีดยางของเครื่อง ซึ่งเวลาที่ใช้ในการทดสอบจะห่างกันเป็นเวลา 1 ช่ัวโมง เป็นการทดลองคร้ังแรก
เพื่อจะทาการเซต็ ใหเ้ ครื่องกรดี ยางทาการกรดี ยางทุกๆ 24 ช่วั โมงหรือ 1 วนั ซ่งึ เวลาในการทดสอบน้ันเร่ิม
ที่ 7:00-14:00 น. ทาการสังเกตและบันทกึ การทดลอง
ตารางการทดลอง ก-1 เปรียบเทียบเวลาในการทางานของเครอ่ื งกรดี ยางพาราเทยี บกับเวลาจริง
เวลาทตี่ ง้ั เปิดเครื่อง เวลาการทางานจาก เวลาจริง เปอรเ์ ซ็นต์
การสงั เกต(นาท)ี (นาที) ความคลาดเคลื่อน
7:00 7:00 7:00 (%)
8:00 8:00 8:00 0
8:00 8:00 9:00 0
10:00 10:00 10:00 0
11:00 11:00 11:00 0
12:00 12:00 12:00 0
13:00 13:00 13:00 0
14:00 14:00 14:00 0
0
จากตาราง ก-1 ผลการทดสอบเปรยี บเทยี บเวลาในการทางานของเครื่องกรีดยางพาราตั้งแต่เวลา 7:00 –
14:00 น. โดยแต่ละรอบห่างกัน 1 ชั่วโมง พบว่ามีเปอร์เซ็นต์ความคลาดเคล่ือนเฉล่ียที่ 0 เปอร์เซ็นต์
ดังน้ันสามารถเซ็ตค่าให้เครื่องกรีดยางทาการกรีดยางตามเวลาที่ต้องการ เพื่อทาการทดสอบและเก็บผล
การทดลองได้
49
รปู ที่ ก-1 การทดสอบเปรยี บเทยี บปริมาณผลผลิตน้ายาง
เคร่ืองกรดี ยางพาราอัตโนมตั ิ กรีดโดยมนุษย์
รปู ท่ี ก-2 การทดสอบเปรยี บเทยี บปรมิ าณผลผลติ นา้ ยาง(ต่อ)
50
ภาคผนวก ข.
โครงสรา้ งและสว่ นประกอบเคร่อื งต้นแบบ
51
รปู ท่ี ข-1 โครงสรา้ งสว่ นกรีดยาง
รปู ที่ ข-2 โครงสร้างสว่ นย้ายรอยกรดี
52
รปู ที่ ข-3 เครอ่ื งกรีดยางพาราอัตโนมตั เิ มื่อตดิ ต้ังอุปกรณต์ ่างๆ เรยี บร้อยแล้ว
รูปท่ี ข-4 เคร่ืองกรีดยางพาราอตั โนมัติเม่ือทาการทดสอบการทางานจรงิ
53
รูปท่ี ข-5 กล่องควบคุมการทางาน
รปู ที่ ข-6 วงจรควบคมุ การทางาน
54
รปู ที่ ข-7 เฟืองตวั หนอน
รปู ท่ี ข-8 บอรด์ Arduino Uno R3
55
รปู ท่ี ข-9 Module Relay
รปู ที่ ข-10 Module RTC Ds1302
56
ภาคผนวก ค
เคร่อื งมอื ท่ีใชใ้ นการทาปริญญานิพนธ์
57
รูปท่ี ค-1 เครือ่ งเชื่อมไฟฟ้า
รปู ที่ ค-2 แทน่ ตัดไฟเบอร์
58
รูปที่ ค-3 ชดุ ประแจแอลหกเหลี่ยม
รูปที่ ค-4 คีมล็อคและประแจเลอ่ื น
59
รูปท่ี ค-5 คีมและไขควง
รูปที่ ค-6 เข็มตวงพลาสตกิ 10 ml
60
ภาคผนวก ง.
โปรแกรมควบคุมการทางาน
61
โปรแกรมควบคุมการทางานของเคร่ืองกรีดยางพาราอัตโนมัติ
// Morighttor A
int MotorKnifeA_Pin = 8; // Drive Motor ขา IN1
int MotorKnifeB_Pin = 9; // Drive Motor ขา IN2
int MotorKnifeSpeed_Pin = 13; // Drive Motor ขา BNA
int MotorKnifeSpeed_PWM = 255; // (ความเร็วในการหมนุ )
// -----------------------------------------------------------------------------------------------------------------
int MotorSlidingA_Pin = 4; // Relay ขา IN1
int MotorSlidingB_Pin = 5; // Relay ขา IN2
// -----------------------------------------------------------------------------------------------------------------
int LimitSwitchLift_Pin = 2; // ลมิ ิตสวิทช์ ตัวสแี ดง สายสเี หลอื ง
int LimitSwitchRight_Pin = 3; // ลิมิตสวทิ ช์ ตวั สดี า สายสเี หลือง
// -----------------------------------------------------------------------------------------------------------------
#include <Wire.h>
#include <RtcDS3231.h>
RtcDS3231<TwoWire> Rtc(Wire);
#define countof(a) (sizeof(a) / sizeof(a[0]))
// -----------------------------------------------------------------------------------------------------------------
long Status_KnifeCutting_Now = 0;
long Status_KnifeCutting_His = 0;
// -----------------------------------------------------------------------------------------------------------------
// ตัง้ เวลาตัด
int Time_KnifeCutting[3] = {2, 0, 0}; // เวลาในการตดั ชัว่ โมง, นาท,ี วนิ าที
// -----------------------------------------------------------------------------------------------------------------
// หน่วงเวลากอ่ นมีดเลอ่ื นกลับทาง
int Knife_Countdown = 1000; // (หน่วงเวลากอ่ นมดี ดึงกลับ หน่วยเป็นมิลลวิ นิ าที)
// -----------------------------------------------------------------------------------------------------------------
int Level_Knife = 0;
// -----------------------------------------------------------------------------------------------------------------
#include "Countimer.h"
Countimer timer;
String Status_Count_Sliding = "Ready"
// -----------------------------------------------------------------------------------------------------------------
62
// หนว่ งเวลาใหม้ อเตอร์เลอื นเคร่อื งตดั ลง
int Count_Time_Sliding = 5; // หน่วงเวลาเลอื นเครื่องตดั ลง (หน่วยเป็นวินาที)
// ############################################################## //
void refreshClock() {
Serial.println(String("Count Sliding: ") + timer.getCurrentTime());
}
// ############################################################## //
void onComplete() {
Serial.println("Sliding Count: Complete!");
Status_Count_Sliding = "Ready";
}
// ############################################################## //
void RTC_Setup() {
Serial.print("compiled: ");
Serial.print(__DATE__);
Serial.println(__TIME__);
//--------RTC SETUP ------------
// if you are using ESP-01 then uncomment the line below to reset the pins to
// the available pins for SDA, SCL
// Wire.begin(0, 2); // due to limited pins, use pin 0 and 2 for SDA, SCL
Rtc.Begin();
RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
printDateTime(compiled);
Serial.println();
63
if (!Rtc.IsDateTimeValid())
{
if (Rtc.LastError() != 0)
{
// we have a communications error
// see https://www.arduino.cc/en/Reference/WireEndTransmission for
// what the number means
Serial.print("RTC communications error = ");
Serial.println(Rtc.LastError());
}
else
{
// Common Causes:
// 1) first time you ran and the device wasn't running yet
// 2) the battery on the device is low or even missing
Serial.println("RTC lost confidence in the DateTime!");
// following line sets the RTC to the date & time this sketch was compiled
// it will also reset the valid flag internally unless the Rtc device is
// having an issue
Rtc.SetDateTime(compiled);
}
}
if (!Rtc.GetIsRunning())
{
Serial.println("RTC was not actively running, starting now");
Rtc.SetIsRunning(true);
}
RtcDateTime now = Rtc.GetDateTime();
64
if (now < compiled)
{
Serial.println("RTC is older than compile time! (Updating DateTime)");
Rtc.SetDateTime(compiled);
}
else if (now > compiled)
{
Serial.println("RTC is newer than compile time. (this is expected)");
}
else if (now == compiled)
{
Serial.println("RTC is the same as compile time! (not expected but all is fine)");
}
// never assume the Rtc was last configured by you, so
// just clear them to your needed state
Rtc.Enable32kHzPin(false);
Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone);
}
// ############################################################## //
void printDateTime(const RtcDateTime& dt)
{
char datestring[20];
snprintf_P(datestring,
countof(datestring),
PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
dt.Month(),
dt.Day(),
dt.Year(),
dt.Hour(),
dt.Minute(),
dt.Second() );
Serial.print(datestring);
}
65
// ############################################################## //
void setup() {
// -----------------------------------------------------------------------------------------------------------------
Serial.begin(9600);
// -----------------------------------------------------------------------------------------------------------------
RTC_Setup();
// -----------------------------------------------------------------------------------------------------------------
timer.setInterval(refreshClock, 1000);
// -----------------------------------------------------------------------------------------------------------------
pinMode(MotorKnifeA_Pin, OUTPUT);
pinMode(MotorKnifeB_Pin, OUTPUT);
pinMode(MotorKnifeSpeed_Pin, OUTPUT);
// -----------------------------------------------------------------------------------------------------------------
pinMode(MotorSlidingA_Pin, OUTPUT);
pinMode(MotorSlidingB_Pin, OUTPUT);
digitalWrite(MotorSlidingA_Pin, HIGH);
digitalWrite(MotorSlidingB_Pin, HIGH);
// -----------------------------------------------------------------------------------------------------------------
pinMode(LimitSwitchLift_Pin, INPUT_PULLUP);
pinMode(LimitSwitchRight_Pin, INPUT_PULLUP);
}
// ############################################################## //
66
void Drive_Sliding_Up() {
digitalWrite(MotorSlidingA_Pin, LOW);
digitalWrite(MotorSlidingB_Pin, HIGH);
}
// ############################################################## //
void Drive_Sliding_Down() {
digitalWrite(MotorSlidingA_Pin, HIGH);
digitalWrite(MotorSlidingB_Pin, LOW);
}
// ############################################################## //
void Drive_Sliding_Stop() {
digitalWrite(MotorSlidingA_Pin, HIGH);
digitalWrite(MotorSlidingB_Pin, HIGH);
}
// ############################################################## //
void Drive_Left() {
analogWrite(MotorKnifeSpeed_Pin, MotorKnifeSpeed_PWM);
digitalWrite(MotorKnifeA_Pin, LOW);
digitalWrite(MotorKnifeB_Pin, HIGH);
}
// ############################################################## //
void Drive_Right() {
analogWrite(MotorKnifeSpeed_Pin, MotorKnifeSpeed_PWM);
digitalWrite(MotorKnifeA_Pin, HIGH);
digitalWrite(MotorKnifeB_Pin, LOW);
}
// ############################################################## //
67
void Drive_Stop() {
analogWrite(MotorKnifeSpeed_Pin, MotorKnifeSpeed_PWM);
digitalWrite(MotorKnifeA_Pin, LOW);
digitalWrite(MotorKnifeB_Pin, LOW);
}
// ############################################################## //
int Drive_Knife(int Level) {
// -----------------------------------------------------------------------------------------------------------------
if (Level == 1){
Serial.println(String("Drive: Left <<<"));
while (digitalRead(LimitSwitchLift_Pin)) {
Drive_Left();
}
Level++;
Serial.println(String("Level: ") + Level);
// -----------------------------------------------------------------------------------------------------------------
} else if (Level == 2){
Drive_Stop();
delay(Knife_Countdown);
Serial.println(String("Drive: Right >>>"));
while (digitalRead(LimitSwitchRight_Pin)) {
Drive_Right();
}
Level++;
68
Serial.println(String("Level: ") + Level);
// -----------------------------------------------------------------------------------------------------------------
} else if (Level == 3){
Drive_Stop();
delay(Knife_Countdown);
Serial.println(String("Drive: Left <<<"));
while (digitalRead(LimitSwitchLift_Pin)) {
Drive_Left();
}
Level++;
Serial.println(String("Level: ") + Level);
// -----------------------------------------------------------------------------------------------------------------
} else if (Level == 4){
Drive_Stop();
delay(Knife_Countdown);
Serial.println(String("Drive: Right >>>"));
while (digitalRead(LimitSwitchRight_Pin)) {
Drive_Right();
}
Level++;
Serial.println(String("Level: ") + Level);
// -----------------------------------------------------------------------------------------------------------------
} else if (Level == 5){
Drive_Stop();
delay(Knife_Countdown);
Serial.println(String("Drive: Left <<<"));
while (digitalRead(LimitSwitchLift_Pin)) {
Drive_Left();
}
Level++;
69
Serial.println(String("Level: ") + Level);
// -----------------------------------------------------------------------------------------------------------------
} else if (Level == 6){
Drive_Stop();
delay(Knife_Countdown);
Serial.println(String("Drive: Right >>>"));
while (digitalRead(LimitSwitchRight_Pin)) {
Drive_Right();
}
Level++;
Serial.println(String("Level: ") + Level);
} else if (Level == 7){
Drive_Stop();
Status_Count_Sliding = "Sliding";
timer.setCounter(0, 0, Count_Time_Sliding, timer.COUNT_DOWN, onComplete);
timer.start();
Serial.println("Start Sliding!");
Level++;
Serial.println(String("Level: ") + Level);
}
// -----------------------------------------------------------------------------------------------------------------
return Level;
}
70
// ############################################################## //
void loop() {
// -----------------------------------------------------------------------------------------------------------------
timer.run();
// -----------------------------------------------------------------------------------------------------------------
if (!Rtc.IsDateTimeValid()) {
if (Rtc.LastError() != 0) {
// we have a communications error
// see https://www.arduino.cc/en/Reference/WireEndTransmission for
// what the number means
Serial.print("RTC communications error = ");
Serial.println(Rtc.LastError());
} else {
// Common Causes:
/ / 1 ) the battery on the device is low or even missing and the power line was
disconnected
Serial.println("RTC lost confidence in the DateTime!");
}
}
RtcDateTime now = Rtc.GetDateTime();
// printDateTime(now);
// Serial.println();
int Hour_Now = now.Hour();
int Minute_Now = now.Minute();
int Second_Now = now.Second();
Serial.println(Hour_Now + String(":") + Minute_Now + String(":") + Second_Now);
// -----------------------------------------------------------------------------------------------------------------
71
// ตดั ตามเวลา
if (Time_KnifeCutting[0] == Hour_Now and Time_KnifeCutting[1] == Minute_Now and
Time_KnifeCutting[2] == Second_Now) {
Level_Knife = 1;
Serial.println(String("Level: ") + Level_Knife);
printDateTime(now);
Serial.println();
}
// -----------------------------------------------------------------------------------------------------------------
// ทางานทกุ ชวั่ โมง
if (Second_Now == 0) {
// if (Minute_Now == 0 and Second_Now == 0) {
Status_KnifeCutting_Now++;
}
if (Status_KnifeCutting_Now > Status_KnifeCutting_His) {
printDateTime(now);
Serial.println();
Level_Knife = 1;
Serial.println(String("Level: ") + Level_Knife);
}
// -----------------------------------------------------------------------------------------------------------------
// ลาดบั การทางาน
if (Level_Knife > 0 and Level_Knife < 8) {
Level_Knife = Drive_Knife(Level_Knife);
72
} else if (Level_Knife == 8) {
Level_Knife = 0;
Serial.println(String("Return Level: ") + Level_Knife);
}
Status_KnifeCutting_His = Status_KnifeCutting_Now;
// -----------------------------------------------------------------------------------------------------------------
// การทางานเมื่อเล่อื นเครอ่ื งตดั ลง
if (Status_Count_Sliding == "Ready") {
Drive_Sliding_Stop();
} else if (Status_Count_Sliding == "Sliding") {
Drive_Sliding_Down();
}
}
73
ภาคผนวก จ.
ข้อมลู อปุ กรณป์ ระกอบการทาปริญญานิพนธ์
74
75
76
77
78
79
80
81