Arduino nRF24L01 ส่งข้อมูลแบบหลายตัว

.

.

Arduino nRF24L01 ส่งข้อมูลแบบหลายตัว

อภิรักษ์  นามแถ่ง

aphirak112@gmail.com

งบประมาณ 2,800 บาท

 

                การส่งข้อมูลระหว่างตัวส่งกับตัวรับสามารถทำได้ 2 วิธีหลักๆ คือ มีสายกับไร้สาย ในโครงงานนี้จะเป็นการสื่อสารแบบไร้สายด้วยโมดูล nRF24L01 ที่มีหลายตัวส่งและมี 1 ตัวรับ เหมาะสำหรับงานที่มีเซนเซอร์หลายจุดและไม่สะดวกเดินสายไปจุดต่างๆ

 

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

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

                nRF24L01 เป็นโมดูลไร้สายที่สามารถทั้งรับและส่งอยู่ในตัวเดียว (Transceiver) ใช้งานบนความถี่ย่าน 2.4GHz เป็นผลิตภัณฑ์ของบริษัท Nordic ที่มีราคาถูกไม่แพงมากเมื่อเทียบกับคุณภาพ เหมาะสำหรับท่านที่กำลังมองหาโมดูลสื่อสารแบบไร้สายที่ใช้งานง่ายและราคาไม่สูงมาก มาดูกันว่าเจ้าโมดูล nRF24L01 นี้มีการทำงานอย่างไร

รูปที่ 1 ลักษณะและตำแหน่งขาของโมดูล nRF24L01

รูปที่ 2 ตำแหน่งขาของไอซี nRF24L01+ เมื่อมองจากด้านบน

รูปที่ 3 บล็อกไดอะแกรมภายในโมดูล nRF24L01

รูปที่ 4 ตัวอย่างการรับ-ส่งข้อมูลในรูปแบบของมาตฐาน MultiCeiver™ ของ nRF24L01+

รูปที่ 5 วงจรสมบูรณ์ของโมดูล nRF24L01

ตัวอย่างคุณสมบัติของโมดูล nRF24L01

  • ใช้ย่านความถี่มาตรฐาน 2.4GHz

  • สามารถเลือกอัตราการสื่อสารได้ 3 ย่าน คือ 250kbps, 1 Mbps และ 2Mbps

  • ใช้พลังงาน 11.3mA ที่กำลังเอาต์พุต 0dBm

  • ใช้พลังงาน 13.5mA ในการรับข้อมูลที่อัตราการสื่อสาร 2Mbps

  • ในสภาวะ Standby ใช้พลังงานเพียง 26uA (ไมโครแอมป์)

  • ทำงานที่ย่านแรงดัน 1.9 – 3.6V

  • ใช้โปรโตคอลการรับ-ส่งข้อมูล 2 ทางแบบ Enhanced ShockBurst™

  • การรับใช้มาตรฐาน MultiCeiver™ ทำให้สามารถรับข้อมูลจากตัวส่งพร้อมกันทีเดียวสูงสุด 6 ชุดในหนึ่งความถี่

รูปที่ 6 วงจรภาคส่ง

รูปที่ 7 วงจรภาครับ

หลักการทำงาน

                จากรูปที่ 6 และ 7 เป็นวงจรสมบูรณ์ของภาคส่งและภาครับตามลำดับ จะเห็นว่าวงจรทั้งสองมีความคล้ายกัน คือจะใช้โมดูล nRD24L01 เป็นตัวรับและส่งข้อมูลระหว่างกัน สิ่งที่แตกต่างกัน คือ ภาคส่งจะมีช่องต่อเซนเซอร์ที่ขา A4 และแสดงผลด้วย 7 Segment 4 หลัก แต่ที่ภาครับจะไม่มีช่องต่อเซนเซอร์จะมีเพียง LCD ขนาด 20 ตัวอักษร 4 บรรทัด สำหรับแสดงค่าที่ได้รับจากภาคส่ง

การเชื่อมต่อกับโมดูล nRF24L01 จะใช้โปรโตคอล SPI (3 ขา) และขาควบคุมอีก 2 ขา ได้แก่

  • ขา D12 เป็นขารับข้อมูลเข้ามาจาก nRF24L01

  • ขา D11 เป็นขาสำหรับส่งข้อมูลออกไปผ่าน nRF24L01

  • ขา D13 เป็นขาที่สร้างสัญญาณนาฬิกาให้กับ nRF24L01

  • ขา D9 เป็นขาสำหรับเลือก nRF24L01 (Chip Select)

  • ขา D10 เป็นขาสำหรับกำหนดการทำงานของโมดูลระหว่างตัวรับกับตัวส่ง

                สำหรับโครงงานต้นแบบนี้จะใช้โมดูล nRF24L01 ที่มีเสาอากาศภายในบอร์ด (หากต้องการเพิ่มระยะทางสามารถเปลี่ยนเป็นรุ่นที่มีเสาอากาศภายนอกได้ โดยไม่ต้องเปลี่ยนโค้ดแต่อย่างใด)

รูปที่ 8 วงจรของโมดูล 7 segment led display 4 หลัก

โมดูลแสดงค่าตัวเลข 4 หลัก Four digital tube module LED display

                ภาคส่ง (รูปที่ 6) การแสดงผลจะใช้โมดูลตัวเลขแบบ 7 segment เพื่อใช้แสดงเลขแบบดิจิตอล 4 หลัก สามารถทำงานได้ที่ช่วงแรงดัน 3.3-5 โวลต์ เหมาะกับแสดงผลตัวเลขที่สว่างและสามารถมองเห็นได้อย่างชัดเจน ภายในจะใช้ไอซีเบอร์ 74595 เป็นตัวขับ 7 segment led display โมดูลนี้มีการสื่อสารในรูปแบบ SPI (เช่นเดียวกันกับโมดูล nRF24L01) ดังนั้นจะมีขาในการควบคุม 3 ขา คือ SCLK, RCLK, DIO ซึ่งไลบรารี่ที่ใช้ในโครงงานนี้สามารถกำหนดขาเชื่อมต่อได้เองตามใจชอบ หากรวมกับขาไฟเลี้ยงอีก 2 ขาจะใช้สายทั้งหมด 5 เส้น ประกอบด้วย

  • ขั้วไฟบวก 3.3-5 โวลต์

  • ขั้วกราวด์

  • ขั้วสัญญาณ SCLK สำหรับใหสัญญาณนาฬิกา

  • ขั้วสัญญาณ RCLK สำหรับแลตสัญญาณข้อมูล

  • ขั้วสัญญาณ DIO สำหรับส่งข้อมูลที่จะแสดงผล

 

รูปที่ 9 วงจรขับ LCD แบบ I2C ด้วยไอซี PCF8574

รูปที่ 10 การตั้งตำแหน่ง Address บนบอร์ดขับ LCD

การแสดงผล LCD

                การแสดงผลส่วนภาครับ (รูปที่ 7) โครงงานนี้เลือกใช้แอลซีดี (LCD1) ขนาด 16 ตัวอักษร 4 บรรทัด ในส่วนของการเชื่อมต่อกับ LCD ใช้การสื่อสารอนุกรมแบบ I2C (Inter-Integrated Circuit) ซึ่งการสื่อสารแบบนี้จะใช้เพียง 2 ขาเท่านั้น หากเทียบกับการเชื่อมต่อโดยตรงระหว่าง LCD กับ Arduino นั้นจะใช้ขาเยอะมาก (อย่างต่ำ 6 ขา) ทำให้เปลืองขาที่อาจจะต้องไปใช้งานกับอุปกรณ์ต่อพ่วงอื่นๆ ดังนั้นจะมีการพัฒนานำเอา I2C มาประยุกต์ใช้งานกับ LCD โมดูล เพื่อที่จะลดจำนวนขาที่ต้องใช้จำนวนมาก ให้เหลือเพียง 2 สายเท่านั้น คือขา SCL และ SDA นอกจากนี้ยังสามารถนำขาดังกล่าวนี้ติดต่อกับอุปกรณ์อื่นที่ใช้ I2C ได้บนสายเดียวกันด้วย

                หัวใจของ I2C โมดูล คือไอซี PCF8574 (อยู่ด้านหลังของ LCD) ซึ่งทำหน้าที่รับสัญญาณอินพุต I2C มาจาก Arduino จากนั้นจะกำหนดสภาวะเอาต์พุตสำหรับสั่งงาน LCD ให้ทำงานตามคำสั่ง ที่ขา A0, A1 และ A2 (ขา1-3) จะใช้กำหนดตำแหน่ง (Address) สำหรับเข้าถึง LCD ดังที่กล่าวไว้ข้างต้นว่าขา I2C นี้เราสามารถเชื่อมต่ออุปกรณ์ได้หลายตัว ดังนั้นจึงต้องกำหนดตำแหน่งของอุปกรณ์ไว้ด้วย ตัวอย่างเช่น หากงานของท่านจำเป็นต้องใช้ LCD หลายตัว Address นี้เพื่อจะใช้เพื่อเลือกควบคุมจอ LCD ตัวใดตัวหนึ่งได้ ซึ่งโครงงานนี้จะเชื่อมต่อลงกราวด์ของวงจร นั่นแสดงว่าผู้เขียนกำหนดตำแหน่งให้เป็น “000” นั่นเอง ที่ขา 3 ของแอลซีดีจะต่อกับ VR1 (10K) เพื่อทำการปรับระดับความเข้มของตัวอักษรบนหน้าจอ LCD

 

รูปที่ 11 ลายวงจรพิมพ์ภาคส่งขนาด (200%)

รูปที่ 12 ลายวงจรพิมพ์ภาครับขนาด (200%)

รูปที่ 13 ตำแหน่งการลงอุปกรณ์ภาคส่ง

รูปที่ 14 ตำแหน่งการลงอุปกรณ์ภาครับ

รูปที่ 15 การบัดกรีคอนเน็กเตอร์ด้านลายวงจรพิมพ์

รายการอุปกรณ์

ภาคส่ง

Arduino UNO       Arduino UNO                    1           ตัว

C1              1uF 50V โพลีเอสเตอร์         1            ตัว

CON1         คอนเน็กเตอร์ 3 ขา               1            ตัว

DISPLAY1       7 Segment 4 หลัก                1            ตัว

nRF1       โมดูล nRF24L01          1             ตัว

ภาครับ

Arduino UNO      Arduino UNO               1          ตัว

C1      1uF 50V โพลีเอสเตอร์       1        ตัว

CON1       คอนเน็กเตอร์ 4 ขา             1        ตัว

DISPLAY1     LCD ขนาด 20 ตัวอักษร 4 บรรทัด               1       ตัว

nRF1      โมดูล nRF24L01           1          ตัว

หมายเหตุ  ซอร์สโค้ดที่ใช้ร่วมกับโครงงานนี้สามารถดาวน์โหลดได้ที่เว็บไซต์ http://electronics.se-ed.com/download

 

การประกอบ

                รูปที่ 13 และ 14 เป็นตำแหน่งการลงอุปกรณ์ภาคส่งและภาครับของโครงงานนี้ จะสังเกตว่าลายวงจรนั้นมีเพียงด้านบน (Bottom Layer) การลงอุปกรณ์ง่ายไม่มีความซับซ้อนอะไรมากนัก แต่ก็มีส่วนยาก คือ คอนเน็กเตอร์ที่จะมีความยากหน่อย เพราะอุปกรณ์จะบัดกรีด้านลายวงจรพิมพ์ (รูปที่ 15) ดังนั้นจึงต้องสังเกตจุดบัดกรีให้ดีและควรใช้หัวแร้งปลายเล็กๆ เพื่อให้สามารถบัดกรีตำแหน่งใต้คอนเน็กเตอร์ได้ดังแสดงในรูปที่ 13

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

                เมื่อลงอุปกรณ์จนครบหมดแล้วให้ตรวจสอบแรงดันในวงจรทั้งหมดเสียก่อน โดยให้ใส่ชีลของเราเข้ากับบอร์ด Arduino UNO จากนั้นให้ป้อนแหล่งโดยเสียบสาย USB เข้ากับคอมพิวเตอร์เพื่อทำการอัพโหลดโปรแกรมการทำงานให้กับ Arduino ทั้งภาคส่งและภาครับ โดยเข้าไปดาวน์โหลดที่เว็บไซต์ http://electronics.se-ed.com/download เมื่อเสร็จแล้วก็พร้อมสำหรับการทดสอบในขั้นตอนต่อไป

 

รูปที่ 16 ค่าแรงดันที่แสดงผ่านโมดูล 7 Segmen จากตัวส่งที่ 1

รูปที่ 17 ค่าอุณหภูมิและความชื้นแสดงผ่านโมดูล 7 Segmen จากตัวส่งที่ 2

รูปที่ 18 จอ LCD บนภาครับแสดงข้อความเมื่อเริ่มเปิดเครื่อง

รูปที่ 19 จอ LCD บนภาครับแสดงค่าที่ได้รับค่าจากภาคส่ง

การทดสอบ

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

                ในส่วนภาครับจะแสดงข้อความ “SEMICONDUCTOR” ในบรรทัดแรกและ “Arduino nRF24L01” ในบรรทัดที่สอง และ “Multi-Channel” (ดังแสดงในรูปที่ 18) หากไม่เห็นข้อความให้ปรับความเข้มตัวอักษรจาก VR1 บนโมดูล I2C จนสามารถเห็นตัวอักษรได้อย่างชัดเจน หน้าจอส่วนการใช้งานปกติจะแสดงแรงดัน, อุณหภูมิและความชื้นดังแสดงในรูปที่ 19

 

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


 

อ่านเซมิฯ ฉบับที่ 450 (ฉบับเต็ม) ได้ฟรี นะครับ !!! 


 

Leave a Comment