โปรเจกต์ Trash Sensor
ติดตามการสะสมของขยะ (หรือการรีไซเคิล) และรับการแจ้งเตือนเมื่อถึงเวลาที่ต้องนำออกไปทิ้ง
ติดตามการสะสมของขยะ (หรือการรีไซเคิล) และรับการแจ้งเตือนเมื่อถึงเวลาที่ต้องนำออกไปทิ้ง


เคยสงสัยไหมว่าคุณสร้างขยะมากแค่ไหนในหนึ่งสัปดาห์? อยากรู้ไหมว่าคุณทิ้งขยะลงถังรีไซเคิลเต็มเร็วแค่ไหน? หรือลูกๆ บอกคุณว่าเอาขยะไปทิ้งแล้วทั้งที่จริงๆ ยังไม่ได้ทำ? หรือจำไม่ได้ว่าใส่ถุงขยะลงในถังหรือยังในวันที่ต้องทิ้งขยะพอดี?
มีวิธีที่ง่ายและราคาประหยัดในการติดตามปริมาณขยะของคุณ (หรือภาชนะประเภทอื่นๆ ก็ได้)
ในบทเรียนแบบ step-by-step นี้ คุณจะได้:

ข้อกำหนดหลักของโปรเจกต์นี้คือการเชื่อมต่อ WiFi โดยอัตโนมัติ เพื่อให้ข้อมูลจาก Sensor สามารถส่งไปยังระบบการแสดงผลที่เข้าถึงได้จากระยะไกล สคริปต์ที่ทำหน้าที่รวบรวมและส่งข้อมูล Sensor ควรจะเริ่มต้นทำงานเองโดยอัตโนมัติในกรณีที่ไฟดับ
Arduino เหมาะมากสำหรับงานนี้ เพราะมันจะรัน Sketch ล่าสุดที่ถูกอัปโหลดลงไปทันทีเมื่อเปิดเครื่อง มีโมดูล WiFi ที่คุณสามารถเพิ่มลงใน Arduino รุ่นเล็กๆ ได้ แต่ Yun มีโมดูล WiFi ติดมาในตัวทำให้การเชื่อมต่ออินเทอร์เน็ตเป็นเรื่องง่าย Yun ยังสามารถรัน Linux ได้ด้วย แม้ว่าเราจะไม่ได้ใช้คุณสมบัตินั้นในโปรเจกต์นี้ บอร์ด Arduino ยังช่วยให้เราเชื่อมต่อทั้ง Sensor แบบ Analog และ Digital ได้โดยไม่ต้องบัดกรี
Sensor หลายตัวอาจเชื่อมต่อได้ยากหากไม่มี Breadboard ขนาดใหญ่ และหลายตัวต้องใช้ Resistor หรือ Capacitor เพิ่มเติม แต่ Grove Sensor ไม่มีปัญหาเหล่านี้เพราะมีคอนเน็กเตอร์สำหรับเชื่อมต่อที่ง่าย และ Resistor หรือ Capacitor ที่จำเป็นได้รับการติดตั้งมาบนบอร์ด Sensor เรียบร้อยแล้ว
อย่างไรก็ตาม มีวิธีต่างๆ มากมายที่คุณสามารถนำไปใช้กับโปรเจกต์นี้ได้ แต่ผมจะอธิบายวิธีที่ผมตั้งค่ากล่อง Sensor ของผมโดยใช้ Yun และ Grove Sensor
Yun มีความพิเศษกว่าบอร์ด Arduino อื่นๆ เพราะใช้ SD Card ในการบูตเครื่อง โดย Yun จะใช้ OpenWRT ในการรันฝั่ง Linux และจัดการ WiFi
เสียบ Micro SD Card ของคุณเข้ากับ SD Card Adapter และเสียบเข้ากับคอมพิวเตอร์ ตรวจสอบให้แน่ใจว่าการ์ดของคุณได้รับการฟอร์แมตเป็นระบบไฟล์ FAT (ไม่ใช่ FAT 32) ซึ่งสามารถทำได้ผ่าน Disk Utility ใน Mac OSX หรือจากหน้าต่าง Computer ใน Windows
ในขณะที่กำลังฟอร์แมตการ์ด คุณสามารถดาวน์โหลด Image ของ OpenWRT เวอร์ชันล่าสุดสำหรับ Yun ได้ที่หน้า Arduino Software ตรงช่วงล่างของหน้า ภายใต้หัวข้อ "Other Software" คุณจะเห็น Image ของ OpenWRT ล่าสุด ให้คลิกและทำตามขั้นตอนเพื่อดาวน์โหลด

เมื่อ SD Card ฟอร์แมตเสร็จสิ้นและดาวน์โหลด OpenWRT เรียบร้อยแล้ว ให้คัดลอกไฟล์ zip ของ OpenWRT ลงใน SD Card และกด Eject การ์ดออก จากนั้นนำการ์ดไปใส่ในช่อง Micro SD ของ Yun และเสียบ Yun เข้ากับพอร์ต USB ของคอมพิวเตอร์โดยใช้สาย Micro USB to USB
รอให้ Yun บูตเครื่อง ซึ่งใช้เวลาประมาณหนึ่งนาที คุณจะรู้ว่ามันเสร็จสิ้นเมื่อไฟ LED สีขาวบนบอร์ดติดสว่าง ตอนนี้ให้ตรวจสอบเครือข่าย WiFi ที่มีอยู่ (Yun จะสร้างเครือข่ายของตัวเองเมื่อบูตเครื่องโดยไม่มีการตั้งค่า WiFi) และเชื่อมต่อกับเครือข่ายที่ชื่อว่า "Arduino Yun-90**********"
ขณะที่เชื่อมต่อกับ WiFi ของ Yun ให้พิมพ์ 192.168.240.1 ในช่อง Address Bar ของเบราว์เซอร์ คุณควรเห็นหน้าเว็บที่มีลักษณะดังนี้:

รหัสผ่านคือ "Arduino" ในหน้าถัดไป ให้มองหาปุ่ม RESET สีส้ม คลิกที่ปุ่มนั้นและรอให้ Yun รีบูต
เมื่อ Yun รีบูตด้วย OpenWRT ที่อัปเดตแล้ว คุณสามารถกำหนดค่า WiFi ได้ ตรวจสอบให้แน่ใจว่าคุณยังคงเชื่อมต่อกับ WiFi ของ Yun และไปที่ 192.168.240.1 อีกครั้ง ที่มุมขวาบนคุณจะเห็นปุ่ม "Configure":

หน้าถัดไปจะอนุญาตให้คุณเปลี่ยนชื่อ Arduino (ซึ่งจะเปลี่ยนชื่อเครือข่าย WiFi เริ่มต้นด้วย) เปลี่ยนรหัสผ่าน และเปลี่ยน Timezone ของ Yun

ส่วน WIRELESS PARAMETERS คือส่วนที่เราให้ความสำคัญมากที่สุด นี่คือจุดที่คุณสามารถเลือกเครือข่ายไร้สายที่ต้องการให้ Yun เชื่อมต่อโดยอัตโนมัติเมื่อเปิดเครื่อง ให้ป้อนรหัสผ่านเครือข่ายอย่างระมัดระวังและคลิก "Configure & Restart"
หมายเหตุ: เมื่อ Yun เชื่อมต่อกับเครือข่ายไร้สายแล้ว คุณสามารถดู IP address ของมันได้โดยป้อน 192.168.240.1 ในเบราว์เซอร์ หรือป้อน arduino.local แต่คุณต้องเชื่อมต่อกับเครือข่ายไร้สายเดียวกัน วิธีนี้จะช่วยให้คุณสามารถ SSH เข้าไปในส่วน Linux ของ Yun ได้ เราจะไม่ทำเช่นนั้นในบทเรียนนี้ แต่คุณสามารถอ่านเพิ่มเติมได้ที่นี่: https://www.arduino.cc/en/Tutorial/LinuxCLI
หากคุณจำเป็นต้องเปลี่ยนการตั้งค่า WiFi ของ Yun แต่ไม่สามารถเข้าถึงเครือข่ายไร้สายที่มันเชื่อมต่ออัตโนมัติได้ คุณสามารถกดปุ่ม WiFi Reset คุณต้องกดปุ่มค้างไว้ประมาณ 5-30 วินาทีและไม่ควรนานกว่านั้น มิฉะนั้นเครื่องจะถูกรีเซ็ตเป็นค่าจากโรงงาน
การสื่อสารกับ Arduino ส่วนใหญ่ทำผ่าน Arduino IDE นี่คือวิธีที่เราอัปโหลด Sketch ไปยังบอร์ดเพื่อให้ทำงานทุกครั้งที่บอร์ดได้รับไฟเลี้ยง สิ่งที่ยอดเยี่ยมเกี่ยวกับ Yun คือเราสามารถอัปโหลด Sketch ได้โดยไม่ต้องเชื่อมต่อกับคอมพิวเตอร์ผ่านสาย USB
ไปที่หน้า Arduino Software และเลือกประเภทคอมพิวเตอร์ของคุณในรายการทางด้านขวาของ IDE เวอร์ชันปัจจุบัน ดาวน์โหลดไฟล์ zip และแตกไฟล์เพื่อติดตั้งหากคุณยังไม่ได้ดำเนินการ
เปิด IDE ขึ้นมาในขณะที่ Yun เปิดใช้งานอยู่ คลิกที่ Tools และไปที่ Board เลือก "Arduino Yun" จากรายการ และยังคงอยู่ในเมนู Tools ให้ไปที่ Port และเลือก "Arduino at (IP address)" หรือ "/dev/tty.usbmodem****" ที่มีคำว่า "Arduino Yun" ต่อท้าย
ตอนนี้คุณตั้งค่า IDE เพื่อโต้ตอบกับ Yun เรียบร้อยแล้ว เราจำเป็นต้องติดตั้ง Library สำหรับ Grove Ultrasonic Ranger
โปรเจกต์นี้ต้องการให้คุณติดตั้งเพียง Library เดียว แต่ยังมี Library อื่นๆ อีกมากมายที่ช่วยให้ชีวิตง่ายขึ้นและ Code สั้นลง ซึ่งการติดตั้งก็ทำได้ง่ายมาก
Library นี้ชื่อว่า "Grove_Ultrasonic_Ranger" ไปที่นี่เพื่อดาวน์โหลด zip โดยคลิกปุ่มที่ด้านล่างของคอลัมน์ขวา จากนั้นกลับไปที่ IDE และเลือก Sketch -> Include Library ->Add .ZIP Library....

เลือกไฟล์ zip ที่คุณเพิ่งดาวน์โหลดแล้วคลิก "Choose" เป็นอันเสร็จสิ้น!

ถึงเวลาเชื่อมต่อ Ultrasonic Ranger เข้ากับ Yun ของเรา Header ตัวเมียของ Yun ทำให้การเสียบ Sensor เป็นเรื่องง่าย และเนื่องจากเราเชื่อมต่อเพียงตัวเดียว จึงไม่จำเป็นต้องใช้ Breadboard เราจะต่อวงจรทั้งหมดแล้วทดสอบ Sensor เพื่อให้แน่ใจว่าใช้งานได้

ถอดปลั๊กไฟจาก Yun ทุกครั้งก่อนต่อวงจรใดๆ!
เนื่องจากเราเชื่อมต่อ Sensor เพียงตัวเดียว การเชื่อมต่อจึงตรงไปตรงมามาก
เชื่อมต่อสาย SIG ของ Ultrasonic Ranger เข้ากับช่อง Digital Input ช่องใดช่องหนึ่ง (ผมใช้ช่อง 7) โดยใช้สายแพแบบ ตัวเมีย-ตัวผู้ ตรวจสอบให้แน่ใจว่า VCC เชื่อมต่อกับ Power Output 3.3V บน Yun และ GND เชื่อมต่อกับหนึ่งในสองจุดเชื่อมต่อ GND (จะเป็นจุดไหนก็ได้) ส่วนขา NC บน Sensor หมายถึง "No Connection" ไม่จำเป็นต้องเสียบกับอะไร
เปิดเครื่อง Yun เมื่อต่อสาย Ranger เรียบร้อยแล้ว

เราได้ติดตั้ง Library ของ Ultrasonic Ranger เรียบร้อยแล้ว ในการทดสอบ Ultrasonic Ranger เราจะรันสคริปต์ที่พิมพ์ค่าการวัดออกมาทาง Serial Monitor ของ Arduino IDE เนื่องจากเราสื่อสารกับ Yun ได้ทั้งทาง USB หรือ WiFi จึงมีสคริปต์ทดสอบที่แตกต่างกันสำหรับแต่ละแบบ
คุณสามารถคัดลอก Sketch ได้ที่นี่: https://github.com/InitialState/arduinotrashsensor/blob/master/ultrasonictest_console.ino
Sketch นี้ใช้ Console.print เพื่อสื่อสารผ่าน Bridge ของ Yun
เพียงเปิด Sketch และอัปโหลดไปยัง Yun เมื่ออัปโหลดผ่าน WiFi ทาง IDE จะถามรหัสผ่านของ Yun (ซึ่งคือ "arduino" นอกจากคุณจะเปลี่ยนในหน้า Configuration) คลิกที่ Serial Monitor (ไอคอนแว่นขยาย) เมื่ออัปโหลดเสร็จเพื่อดูระยะทางเป็นนิ้วและเซนติเมตรไปยังวัตถุที่ใกล้ที่สุด

Library ของ Ultrasonic Ranger มีสคริปต์ทดสอบชื่อ UltrasonicDisplayOnTerm ซึ่งคุณสามารถหาได้ใน File -> Examples -> Grove_Ultrasonic_Ranger-master ใน IDE หรือคุณสามารถคัดลอกได้จากที่นี่: https://github.com/InitialState/arduinotrashsensor/blob/master/ultrasonictest.ino
Sketch นี้ใช้ Serial.print เพื่อพิมพ์ค่าผ่านการเชื่อมต่อ Serial ที่สร้างขึ้นทางพอร์ต USB เพียงเปิด Sketch และอัปโหลดไปยัง Yun คลิกที่ Serial Monitor (ไอคอนแว่นขยาย) เมื่ออัปโหลดเสร็จเพื่อดูระยะทางเป็นนิ้วและเซนติเมตรไปยังวัตถุที่ใกล้ที่สุด

ลองเลื่อนมือเข้าใกล้และออกจาก Sensor เพื่อดูว่ามันทำงานหรือไม่ จากนั้นเราค่อยไปขั้นตอนต่อไป!

เมื่อ Hardware ทำงานแล้ว ถึงเวลาหาวิธีนำข้อมูลออกจากถังขยะ! ได้เวลาประกอบทุกอย่างเข้าด้วยกัน เราต้องการวิธีง่ายๆ ในการนำค่าที่วัดได้ไปไว้ใน Dashboard ที่เข้าถึงง่าย
เราต้องการสตรีมข้อมูลระยะทางไปยังบริการ Cloud และให้บริการนั้นเปลี่ยนข้อมูลของเราให้เป็น Dashboard ที่สวยงามซึ่งเราสามารถเข้าถึงได้จากแล็ปท็อปหรือมือถือ ข้อมูลของเราต้องการปลายทาง และเราจะใช้ Initial State เป็นปลายทางนั้น
ขั้นตอนที่ 1: ลงทะเบียนบัญชี Initial State
ไปที่ https://www.initialstate.com/app#/register/ และสร้างบัญชีใหม่
ขั้นตอนที่ 2: Access Keys
เราต้องการวิธีเชื่อมโยงข้อมูลที่จะส่งเข้ากับบัญชีของคุณ Initial State ทำสิ่งนี้ด้วย Access Keys
ไปที่บัญชี Initial State ในเบราว์เซอร์ คลิกที่ชื่อผู้ใช้ของคุณที่มุมขวาบน จากนั้นไปที่ “my account” คุณจะพบ Access Key อยู่ที่ด้านล่างของหน้าภายใต้ “Streaming Access Keys”

ทุกครั้งที่คุณสร้าง Data Stream คีย์นี้จะทำหน้าที่ส่งข้อมูลไปยังบัญชีของคุณ (ดังนั้นอย่าแบ่งปันคีย์นี้กับใคร)
คัดลอกคีย์นี้ไว้เพราะเราจำเป็นต้องใช้สำหรับการทดสอบและในสคริปต์สุดท้าย
ขั้นตอนที่ 3: รันโปรแกรมตัวอย่าง
รัน Sketch ทดสอบเพื่อให้แน่ใจว่าเราสามารถสร้าง Data Stream ไปยังบัญชี Initial State ของคุณได้ แทนที่ Your_Access_Key ในบรรทัดที่ 14 ด้วยคีย์ของคุณ และรันโปรแกรมต่อไปนี้: https://github.com/InitialState/arduino_streamers/blob/master/arduinoyunstream.ino
ขั้นตอนที่ 4: ตรวจสอบผลลัพธ์
กลับไปที่บัญชี Initial State ในเบราว์เซอร์ของคุณ Data Bucket ใหม่ที่ชื่อ “Arduino Stream” ควรจะปรากฏขึ้นทางด้านซ้าย (คุณอาจต้องรีเฟรชหน้าเว็บ) คลิกที่ Bucket นี้และคลิกไอคอน Waves เพื่อดูข้อมูลทดสอบ

คุณควรลองดูบทแนะนำของ Waves เพื่อทำความคุ้นเคยกับวิธีใช้เครื่องมือแสดงข้อมูลนี้ จากนั้นให้ดูข้อมูลในรูปแบบ Tiles เพื่อดูข้อมูลเดียวกันในรูปแบบ Dashboard

ตอนนี้คุณพร้อมที่จะเริ่มสตรีมข้อมูลจริงจาก Trash Sensor แล้ว
Sketch สุดท้ายที่รวมทุกอย่างเข้าด้วยกันชื่อว่า yuntrashsensor.ino สามารถหาได้ที่นี่: https://github.com/InitialState/arduinotrashsensor/blob/master/yuntrashsensor.ino
หากคุณอัปโหลดผ่าน WiFi ให้ใช้เวอร์ชันที่ใช้ Console ในการพิมพ์แทน: https://github.com/InitialState/arduinotrashsensor/blob/master/yuntrashsensor_console.ino
อย่าลืมแทนที่ Your_Access_Key ในบรรทัดที่ 21 ด้วย Access Key เฉพาะของคุณ
ทุกอย่างที่คุณอาจต้องเปลี่ยนจะอยู่ในบรรทัดที่ 7-31
หากคุณไม่ได้ใช้ Digital Pin 7 อย่าลืมเปลี่ยนเป็น Pin ที่คุณใช้งานบน Yun คุณยังสามารถกำหนดได้ว่าต้องการให้ขยะเต็มแค่ไหนก่อนที่จะแสดงสถานะว่าต้องเอาไปทิ้ง
ในส่วน Initial State Streamer สิ่งเดียวที่ต้องเปลี่ยนทันทีคือ accessKey หากคุณต้องการส่งข้อมูลมากขึ้นหรือน้อยลง หรือเปลี่ยนชื่อสัญญาณ/อิโมจิ คุณสามารถตั้งค่าได้ที่นี่เช่นกัน
ก่อนจะรัน Sketch มาดูกันว่ามันทำงานอย่างไร
หมายเหตุ: สำหรับการทดสอบเบื้องต้น คุณอาจต้องการลด Interval จาก 894000 เป็นประมาณ 2000-3000 ในบรรทัดที่ 75
อัปโหลด Sketch เพื่อเริ่มการสตรีม!

ไปที่บัญชี Initial State และคลิกที่ Data Bucket ใหม่ที่มีชื่อตรงกับพารามิเตอร์ BUCKET_NAME (เช่น Trash Sensor) คลิกที่ Tiles เพื่อดู Dashboard ของ Sensor คุณควรเห็น Tile สองอันหลังจากที่ปล่อยให้ Sketch วัดค่าอย่างน้อยหนึ่งครั้ง คือ Dist (in) และ Empty Trash ลองเอามือเข้าไปในระยะที่กำหนดแล้วดูว่า "Empty Trash?" เปลี่ยนจาก ":smile: No" เป็น ":weary: Yes" หรือไม่ Dashboard นี้ช่วยให้คุณเห็นผลกระทบของปาร์ตี้ช่วงสุดสัปดาห์ที่มีต่อขยะของคุณ หรือดูว่าลูกๆ เอาขยะไปทิ้งตามกำหนดหรือไม่
ในบางครั้งอาจมีสัญญาณรบกวนเกิดขึ้นในการวัดระยะทาง แต่ก็สามารถสังเกตจุดที่ผิดปกติได้ง่าย
เปลี่ยนไปใช้การแสดงผลแบบ Waves เพื่อดูประวัติข้อมูล Sensor ได้ดีขึ้น ด้วย Waves คุณสามารถวัดค่าและเจาะลึกข้อมูลเพื่อดูว่าเหตุการณ์ต่างๆ เกิดขึ้นเมื่อใด นี่เป็นวิธีที่ดีที่สุดที่จะเห็นว่าลูกของคุณรอตั้งชั่วโมงครึ่งก่อนจะยอมเอาขยะไปทิ้ง

มันจะดีกว่าไหมถ้าเราได้รับการแจ้งเตือนเมื่อขยะเต็มเกินไป? ปรากฏว่าคุณทำได้!

เราสามารถสร้างการแจ้งเตือนทาง SMS หรืออีเมลเมื่อใดก็ตามที่ Dashboard บอกให้เราทิ้งขยะ โดยใช้ฟีเจอร์ Trigger ของ Initial State
*การแจ้งเตือน Trigger ขณะนี้อยู่ในช่วง Alpha สามารถส่งอีเมลไปที่ contact@initialstate.com เพื่อขอคำเชิญเข้าร่วมการทดสอบใช้งาน Trigger
เราจะทำตามขั้นตอนการตั้งค่าการแจ้งเตือน Trigger ตามที่ระบุไว้ที่ http://support.initialstate.com/knowledgebase/articles/834354-triggers-adding-a-trigger
Trigger ของคุณเปิดใช้งานแล้วและจะทำงานเมื่อเงื่อนไขครบถ้วน คลิก done เพื่อบันทึกและกลับสู่หน้าหลัก เมื่อการตั้งค่าเสร็จสมบูรณ์ คุณจะได้รับ SMS ทุกครั้งที่ขยะเต็มจนสคริปต์สั่งให้คุณไปทิ้ง

ผมต้องการวิธีติด Ultrasonic Ranger เข้ากับฝาถังขยะในขณะที่ต้องติด Yun ไว้ด้านนอกถังที่เป็นโลหะ ดูเหมือนจะเป็นเวลาที่เหมาะสมที่จะใช้เทปกาว Hello Kitty และเทปวาชิลายซูเปอร์ฮีโร่ของผม
ผมใช้เทปวาชิปิดด้านหลัง Sensor เพื่อไม่ให้จุดบัดกรีสัมผัสกับฝาถังขยะที่เป็นโลหะ จากนั้นใช้เทปกาวจำนวนมากเพื่อยึดมันเข้ากับฝา
ส่วน Yun ถูกใส่ไว้ในกล่องแยกต่างหากที่สามารถแขวนไว้ข้างถังขยะได้

มีถังขยะหลายประเภทให้เลือกใช้ โดยส่วนตัวผมหวังว่าผมจะมีถังขยะแบบลิ้นชัก เพราะจะทำให้สามารถติด Yun และ Sensor ไว้ที่ด้านบนของช่องลิ้นชักได้โดยไม่ต้องติดเข้ากับตัวถังขยะเลย
สนับสนุนเพื่อรับ Source Code หรือแอปพลิเคชันสำหรับโปรเจกต์นี้
ประเมิน Project
เอาฟอร์มยาวออกจากท้ายหน้า Project แล้ว เหลือเป็นปุ่มให้กดไปกรอกหน้าเดียว ตัวใหญ่ เว้นบรรทัดเยอะ อ่านง่ายกว่า
รีวิวจากคนใช้งานจริง
ถ้าเคยสั่งงาน เคยอ่านหน้านี้แล้วได้ประโยชน์ หรือมีข้อเสนอแนะ ฝากรีวิวไว้ได้เลย
ยังไม่มีรีวิวบนหน้านี้ ถ้าเคยใช้งานหรือมีข้อเสนอแนะ เขียนเป็นคนแรกได้เลย