REVIEWS

REVIEWS GRAVITECH

รีวิว

สัญญาณเตือนเวลาตกปลา

15 May 2019

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

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

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

 วันต่อมาผมได้เบ็ดตกปลาของจริงซึ่งเป็นอันที่พี่เค้าใช้ตกปลาอยู่ครับ เลยทำให้เห็นภาพมากขึ้น

 

 

 

 

 

 

 

 

 

 

รูปเบ็ดตกปลาที่พี่เค้าเอามาให้ครับ

 

  

จากรูปเบ็ดตกปลาส่วนที่หมุนคือส่วนที่เป็นรอกสีเหลืองทองครับ ในการจับสัญญาณการหมุนของรอกอันนี้ทำโดยการหากระดาษสีขาวมีติดที่รอกตามที่ได้อธิบายไว้แล้ว

 

 

 

 

 

 

                แถบสีขาวนี้จะช่วยสร้างความแตกต่างของการสะท้อนแสงในระหว่างที่รอกหมุน

 

วิธีการที่ใช้คือยิงแสงอินฟาเรดไปที่ผิวด้านข้างของรอก แล้ววัดค่าของแสงอินฟาเรดที่สะท้องกลับมาครับ โดยสีขาวนั้นจะสามารถสะท้องแสงได้ดีกว่าสีดำ ดังนั้นเมื่อรอกมีการหมุดเกิดขึ้น จะมีการเปลี่ยนแปลงของแสงอินฟาเรดที่สะท้อนกลับมา

 

 

 

 

 

 

มาพูดถึงแสงอินฟาเรดกันก่อนครับ แสงอินฟาเรดนั้นเป็นแสงที่เรามองไม่เห็น เราใช้แสงอินฟาเรดกันมานานแล้วครับ เช่นในรีโมททีวีบ้านเราก็ใช้แสงอินฟาเรดเป็นตัวสงสัญญาณ ถ้าใครยังไม่เคยเห็นหลอดอินฟาเรดดูได้ตามรูปเลยครับ

 

 

 

 

 

 

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

มาทดลองการส่องแสงของหลอดอินฟาเรดกันครับ โดยจ่ายไฟให้กับมันด้วยแรงดัน 5 โวลท์ โดยใช้ไฟจาก ARDUINO NANO วงจรที่ต่อเป็นดังนี้ครับ

 

 

 

 

 

 

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

 

 

 

 

 

 

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

 

 

ในการใช้งานตัวรับอินฟาเรดเพื่อให้มันสามารถรับรู้ได้ว่าแสงที่สะท้อนกลับมามีค่ามากน้องเพียงใด จำเป็นต้องต่อวงจรให้กับมันครับ โดยรูปด้านล่างเป็นวงจรของตัวรับอินฟาเรดที่ต่อร่วมกับตัวส่ง และใช้ขาอนาล็อก (A0) ของ Arduino nano มาอ่านค่าสัญญาณที่เกิดขึ้น

 

 

 

 

 

 

เมื่อรู้วงจรที่ต้องต่อแล้ว คราวนี้เรามาต่อกันเลยครับ เพื่อที่ขั้นตอนต่อไปเราจะเข้าสู่ขั้นตอนการเขียนโปรแกรมรับค่าอนาล็อกกัน เมื่อต่อวงจรตัวรับตัวส่งอินฟาเรดแล้ว หน้าตาออกมาเป็นแบบนี้ครับ

 

 

 

 

 

 

ต่อสาย Arduino เข้ากับคอมพิวเตอร์ของเรากันเลยครับ เมื่อต่อแล้วเรามาเขียนโปรแกรมกัน โดยขั้นตอนแรก เรามาเขียนโปรแกรมทดสอบการสือสารผ่านพอร์ทอนุกรม ระหว่างตัว Arduino กับ คอมพิวเตอร์ของเรากันครับ

 

 

 

 

 

ในบรรทัดที่เขียนว่า Serial.begin(9600); นั้นเป็นการตั้งค่าให้ Arduino เริ่มการคุยกับคอมพิวเตอร์ของเราด้วยความเร็วในการคุย 9600 บิทต่อวินาที

 

 

ในฟังก์ชัน void loop เป็นการสั่งงานให้ Arduino ส่งคำว่า “Serial OK” มายังคอมพิวเตอร์ของเรา แล้วหน่วงเวลาเป็นระยะเวลา 1 วินาที หลังจากนั้นก็กลับไปทำคำสั่งแรกอีกครั้งซึ่งคือการ ส่งคำว่า “Serial OK”  และหน่วงเวลาอีก 1 วินาทีเป็นเช่นนี้ไปเรื่อยๆ ผลที่ได้คือ มันจะส่งคำว่า “Serial OK” มายังคอมพิวเตอร์ของเราทุกๆ 1 วินาทีครับ เมื่อพิมพ์โค้ดตามรูปแล้ว กดอัพโหลดเลยครับอย่ารอช้า ถ้าเราพิมพ์โค้ดผิด หรือมีอะไรผิดพลาดจะไม่สามารถอัพโหลดได้ครับ เราต้องทำการแก้ปัญหาดหล่านั้นให้เสร็จสิ้น ก็จะสามารถอัพโหลดสิ่งที่เราเขียนลงไปยัง Arduino ได้ครับ เมื่ออัพโหลดโปรแกรมเสร็จเรียบร้อยแล้วต้องเปิด Serial Monitor ขึ้นมาครับเพื่อดูว่า Arduino ส่งอะไรมาให้เรา โดยการเปิดกดได้ที่ไอคอนด้านขวาบน ครับ

 

 

 

 

 

 

 

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

 

 

 

 

 ต้องตั้งให้ตรงกันนะครับเดี๋ยวจะคุยกันไม่รู้เรื่อง วิธีตั้งอยู่ที่มุมขวาล่างของรูปครับ เมื่อตั้งให้ตรงกันแล้ว การพูดคุยกันระหว่าง Arduino กับ PC จะเริ่มขึ้น และจะพบว่าทางฝัง Arduino ได้ส่งข้อความว่า 
“Serial OK” มายังคอมของเราทุก 1 วินาที

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

ในการอ่านค่า ให้ใช้คำสั่ง analogRead(); เพื่ออ่านค่าจากตัวรับอินฟาเรด โดยตัวเลขในวงเล็บคือขาของ Arduino ที่เราต้องการจะให้มันอ่านค่า ในที่นี้สัญญาณจากตัวรับอินฟาเรด ต่ออยู่กับขา A0 ดังนั้นในการเขียนคำสั่งอ่านค่าจะต้องใช้ว่า analogRead(A0);

 

 

 

ค่าที่อ่านได้จากคำสั่งนี้จะทำให้เราได้ตัวเลขจำนวนเต็มที่มีค่าระหว่าง 0 – 1024 มาหนึ่งค่าขึ้นอยู่กับว่าแรงดันไฟฟ้า ณ จุดนั้นมีค่าเท่าไร เมื่ออ่านได้แล้ว แนะนำให้เอาค่าที่อ่านได้มาเก็บไว้ที่ตัวแปรก่อนครับ เพื่อความเป็นระเบียบเรียบร้อย เหมือนเอาสิ่งของต่างๆใส่ลงไปในกล่อง เพื่อให้เข้าใจง่ายก็เลยใช้ตัวแปลที่ชื่อว่า “box” เลยละกันครับ ส่วนใครอยากใช้คำอื่นก็ใช้ได้ครับ แต่ทางที่ดีในการตั้งชื่อตัวแปรนี้ ควรตั้งให้ความหมายของมันตรงกับที่เราใช้งานครับ เพื่อเวลาคนอื่นๆมาอ่านโค้ดที่เราเขียนจะได้เข้าใจง่ายครับ

 

 

ในภาษาซี หรือภาษาคอมพิวเตอร์ที่เรากำลังเขียนอยู่นี้ การใช้เครื่องหมาย “ = ” โปรแกรมจะทำการนำสิ่งที่อยู่ขวามือของเครื่องหมาย “ = ” ไปใส่ไว้ทางขวา เหมือนในรูปครับ  เพียงแค่นี้ก็ถือว่าได้นำค่าที่ Arduino อ่านได้ มาเก็บไว้ที่ตัวแปรชื่อว่า “box” แล้วครับ

แต่การจะใช้ตัวแปรนั้น เราต้องประกาศตัวแปรให้โปรแกรมรู้ก่อนว่า เราจะใช้ตัวแปรชื่ออะไร และตัวแปรที่เราใช้เป็นตัวแปรประเภทไหน ในที่นี้ค่าที่อ่านได้เป็นจำนวนเต็ม จึงต้องประกาศว่าจะใช้ตัวแปรชนิดจำนวนเต็มที่มีชื่อว่า “box”

 

 

จริงๆคำว่า “int” ที่เห็นนั้นมาจากคำว่า “integer” ครับ ซึ่งแปลว่าจำนวนเต็มครับ เมื่อประกาศตัวแปลแล้ว กล่องของเราก็พร้อมจะใช้งานแล้วครับ มันทำหน้าที่เก็บค่าที่อ่านได้จากตัวรับอินฟาเรด คราวนี้ลองให้ Arduino ส่งค่าที่อยู่ใน “box” มายัง pc ของเรากันครับ จากโค้ดโปรแกรมเดิมที่สั่งให้ Arduino ส่งคำว่า 
“Serial OK” เราจะเปลี่ยนใหม่ให้มันส่งค่าที่อยู่ในตัวแปรมาแทนครับ

 

 

เมื่อได้ตามนี้ลองอัพโหลดโปรแกรมที่เราเขียนไปยัง Aduino เมื่อเสร็จแล้วกดที่ Serial Monitor ดูเหมือนเดิมครับ ดูว่า Arduino มันส่งอะไรมาบอกเรา

จะพบว่า Arduino ส่งตัวเลขมาให้เราทุก 1 วินาที โดยเลขที่ส่งมาให้นี่แหละครับคือตัวเลขที่มันอ่านค่าได้จากตัวรับอินฟาเรด คราวนี้เรามาทดลองกันดีกว่าครับว่า ตัวเลขนี้มีความสัมพันธ์กับแสงอินฟาเรดที่สะท้อนกลับมาอย่างไร

ทดลองหันหลอดรับและหลอดส่งอินฟาเรดออกจากกันเพื่อไม่ให้แสงอินฟาเรดเข้าไปสู่ตัวรับผลที่ได้ออกมาเป็นตัวเลขตามรูปครับ

 

 

            

 

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

 

 

 

 

 

         

 

ตัวเลขที่ส่งกลับมามีค่าน้อยครับ สรุปได้เลยว่าเมื่อตัวรับอินฟาเรดถูแสงอินฟาเรดส่องมาที่มัน ตัวเลขที่ได้จะมีค่าน้อยลงตามปริมาณแสงที่เข้ามาครับ แต่ถ้าตัวรับ ไม่มีแสงอินฟาเรดส่งเข้ามาหามันเลย ค่าที่อ่านได้จะมีค่ามาก

หากนำวงจรที่เราได้ต่อบนโปรโตบอร์ดนี้ไปส่องที่รอกของเบ็ดตกปลา เราจะสามารถวัดความแตกต่างของแสงสะท้อนเวลาที่รอกเกิดการหมุนได้

 

 

 

 

 

 

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

อุปกรณ์ที่ใช้ส่งเสียงนั้นมีหลายแบบ แต่ในงานนี้เรารมาใช้ buzzer กันครับ เพราะมีราคาไม่สูงใช้งานง่ายครับ

 

 

 

 

 

 

หลักการทำงานของ buzzer ไม่ยากครับ เพียงแค่เราจ่ายไฟ 5 โวลท์ ให้ มันก็ส่งเสียงออกมาแล้ว ลองต่อวงจรตามนี้ดูครับ

 

 

 

 

 

 

 

เมื่อขา D4 ของ Arduino ส่งสัญญาณ HIGH ออกมาเสียงก็จะดังครับ แต่ถ้าอยากให้มันเงียบต้องส่งสัญญาณ LOW ออกมาเพียงแค่นี้เราก็สามารถควบคุม buzzer ได้แล้วครับ ภาพด้านล่างเป็นตัวอย่างการสั่งงานให้ buzzer ที่ต่ออยู่กับขา D4ของ arduino nano ทำงาน หรือก็คือส่งเสียงออกมานั่นเอง

 

 

 

 

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

 

SPECIFICATION

#