สารบัญ:

UCL Embedded - B0B the Linefollower: 9 ขั้นตอน
UCL Embedded - B0B the Linefollower: 9 ขั้นตอน

วีดีโอ: UCL Embedded - B0B the Linefollower: 9 ขั้นตอน

วีดีโอ: UCL Embedded - B0B the Linefollower: 9 ขั้นตอน
วีดีโอ: Perfect Short Bob Haircut Tutorial Step by step | Precision Bob Cut 2024, กรกฎาคม
Anonim
UCL Embedded - B0B the Linefollower
UCL Embedded - B0B the Linefollower

นี่คือ B0B.*

B0B เป็นรถบังคับวิทยุทั่วไป ให้บริการพื้นฐานของหุ่นยนต์ติดตามสายชั่วคราว

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

ไม่เหมือนกับโรบ็อตตามสายอื่น ๆ มากมาย B0B ยังรวบรวมข้อมูลและส่งผ่าน WiFi

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

นอกจากนี้ยังเกี่ยวข้องกับการโกรธที่อุปกรณ์อิเล็กทรอนิกส์ต่างๆ ไม่ทำงานตามที่เราต้องการ และขั้นตอนที่เราดำเนินการเพื่อเอาชนะปัญหาเหล่านั้น (ฉันกำลังดูคุณอยู่ ESP 8266-01)

มี 2 รหัสเพื่อให้โครงการทำงาน รหัสแรกมีไว้สำหรับโมดูล ESP8266 ซึ่งเราใช้ Arduino เป็นโปรแกรมเมอร์ และรหัสที่สองจะทำงานบน Arduino

ขั้นตอนที่ 1: ส่วนประกอบ

สำหรับโครงการนี้ คุณจะต้อง:

ฮาร์ดแวร์:

• รถควบคุมวิทยุ 1x (ต้องมี ESC และเซอร์โวพวงมาลัย)

เราใช้ Traxxas 1/16 E-Revo VXL ที่มีสต็อกเป็นส่วนใหญ่ ส่วนใหญ่เป็นเพราะนั่นคือสิ่งที่เรามี และค่อนข้างมั่นใจว่าเราจะสามารถควบคุมมันได้ด้วย Arduino นอกจากนี้ เนื่องจากจะต้องมีฮาร์ดแวร์เพิ่มเติมจำนวนเล็กน้อย เราจึงมั่นใจว่าจะไม่เป็นปัญหาสำหรับ 1/16 E-Revo

อย่างไรก็ตาม รถยนต์ที่ควบคุมด้วยวิทยุส่วนใหญ่ (ที่สามารถแยกชิ้นส่วนได้ง่าย) อาจถูกนำมาใช้แทน และกระบวนการจะคล้ายกันมาก

• เทปพันท่อตัน

สีควรตัดกันพื้นให้มากที่สุด ในสภาพแวดล้อมการทดสอบของเรา เราใช้เทปสีขาวบนพื้นสีเข้ม

• 1x Arduino เมกะ 2560

Arduino ที่เล็กกว่าก็ใช้ได้เหมือนกัน แต่คุณจะถูกกดหาพิน

• 1x กระดานขนมปังขนาดใหญ่

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

• 1x TCRT5000 IR analog sensor (ใช้สำหรับหลีกเลี่ยงการชน).

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

• แรงโน้มถ่วง 1x หรือ 2x: เซ็นเซอร์ระดับสีเทาแอนะล็อก v2

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

• 1 x ESP 8266-01.

มีรุ่น ESP 8266 ให้เลือกใช้มากมาย เรามีประสบการณ์กับ 8266-01 เท่านั้น และไม่สามารถรับประกันได้ว่ารหัส ESP จะทำงานกับเวอร์ชันอื่นได้

• 1 x ESP8266-01 แผงป้องกัน Wi-Fi

เป็นทางเลือกทางเทคนิค แต่ถ้าคุณไม่ได้ใช้สิ่งนี้ ทุกอย่างที่เกี่ยวข้องกับโมดูล Wi-Fi จะซับซ้อนมากขึ้น อย่างไรก็ตาม คู่มือจะถือว่าคุณมีสิ่งนี้ (หากไม่ใช่ ให้ค้นหาคู่มือออนไลน์สำหรับการเดินสาย ESP-01 เข้ากับ Arduino อย่างถูกต้อง) เนื่องจากการทำเช่นนี้ไม่ถูกต้องและอาจทำให้โมดูลเสียหายได้

• แบตเตอรี่สำหรับตัวรถและแบตเตอรี่สำหรับจ่ายไฟให้กับอุปกรณ์อิเล็กทรอนิกส์เสริม

เราใช้แบตเตอรี่ Lipo ขนาด 7.4 โวลต์ขนาด 2.2 AH แบบคู่ขนานกับพลังงานทุกอย่าง คุณควรจะสามารถใช้แบตเตอรี่อะไรก็ได้ตามปกติกับรถที่คุณเลือก หากคุณอยู่เหนือ 5V แต่ต่ำกว่า 20V ความจุมีความสำคัญมากกว่าแรงดันไฟฟ้าเล็กน้อย

• สายจัมเปอร์จำนวนมาก

ฉันเลิกนับจำนวนที่แน่นอนแล้ว ถ้าคุณคิดว่าคุณมีเพียงพอ คุณอาจไม่มี

• สุดท้าย ในการแนบทุกอย่าง คุณจะต้องติดตั้ง Arduino, เซ็นเซอร์, เขียงหั่นขนมและโมดูล Wi-Fi กับรถที่คุณเลือก ผลลัพธ์ของคุณจะแตกต่างกันไปขึ้นอยู่กับสิ่งที่คุณใช้เป็นพื้นฐานและวัสดุที่มีอยู่

เราใช้:

• ซิปผูก.

• บางซุปเปอร์กาว

• เศษกระดาษ/ท่อเรซินชิ้นเล็กๆ ที่มีขนาดเส้นผ่านศูนย์กลางที่เหมาะสม

• แผ่นรองหลัง Masonite เก่าจากกรอบรูป ตัดให้ได้ขนาด

• เทปพันสายไฟอีกเล็กน้อย

• เครื่องมือที่จำเป็นในการทำงานกับรถบังคับวิทยุที่คุณเลือก

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

ซอฟต์แวร์:

• โหนดสีแดง

ส่วนสำคัญของการเก็บรวบรวมข้อมูล

• เซิร์ฟเวอร์ MQTT

คนกลางระหว่างรถของเรากับโหนด-เรด เริ่มแรกสำหรับการทดสอบ เราใช้ test.mosquitto.org

ต่อมาเราใช้:

• CloudMQTT.com

สิ่งนี้มีความน่าเชื่อถือมากกว่ามาก ซึ่งมากกว่าการสร้างความซับซ้อนเล็กน้อยในการตั้งค่า

• WampServer.

ส่วนสุดท้ายของการเก็บรวบรวมข้อมูล โดยเฉพาะอย่างยิ่ง เราจะใช้ฐานข้อมูล SQL เพื่อจัดเก็บข้อมูลที่รวบรวมไว้

ขั้นตอนที่ 2: แผนภาพไฟฟ้า

แผนภาพไฟฟ้า
แผนภาพไฟฟ้า

ขั้นตอนที่ 3: การก่อสร้างทางกายภาพ

การก่อสร้างทางกายภาพ
การก่อสร้างทางกายภาพ
การก่อสร้างทางกายภาพ
การก่อสร้างทางกายภาพ
การก่อสร้างทางกายภาพ
การก่อสร้างทางกายภาพ

โซลูชันของเรามีแนวทางที่ตรงไปตรงมาในการประกอบทางกายภาพ

ตัวรับเดิมและโครงกันน้ำถูกถอดออกจากรถ RC เนื่องจากไม่จำเป็น

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

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

แผ่นมาโซไนต์ (แผ่นหลังจากกรอบรูปเก่า) ที่ด้านบนมีส่วนเล็กๆ ของท่อกระดาษ/เรซินที่ตัดให้ได้ขนาดและติดกาวที่ด้านล่าง สิ่งเหล่านี้อยู่ในแนวเดียวกับที่ยึดสำหรับเสาของร่างกายและนั่งบนสุดโดยยึดทุกอย่างไว้อย่างปลอดภัย สมมติว่ากาวที่ติดท่อกับแผ่นยึดไว้และไม่เอียงมากเกินไป สิ่งนี้ก็จะคงอยู่กับที่ นอกจากนี้ยังควรสังเกตด้วยว่าเพลตนั้นอยู่ภายในทรงกลมป้องกันของล้อและกันชน Arduino Mega และเขียงหั่นขนมสองแผ่นติดอยู่กับเพลทด้วยเทปสองด้านหรือเทปพันรอบเทปกาว

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

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

ขั้นตอนที่ 4: โมดูล ESP8266

โมดูล ESP8266
โมดูล ESP8266
โมดูล ESP8266
โมดูล ESP8266

โมดูล WiFi ESP8266 ต้องการการตั้งค่าพินสองแบบที่แตกต่างกัน การตั้งค่าเดียวจะใช้เมื่อทำการแฟลชโมดูลด้วยโปรแกรมใหม่และใช้ Arduino Mega 2560 เป็นโปรแกรมเมอร์ การตั้งค่าอื่นมีไว้สำหรับโมดูลเมื่อมีการใช้งานและส่งข้อมูลไปยังโบรกเกอร์ MQTT

การใช้ Arduino IDE เพื่ออัปโหลดโค้ดไปยังโมดูล ESP8266 คุณจะต้องติดตั้งตัวจัดการบอร์ดและตัวจัดการบอร์ดเพิ่มเติม

ภายใต้ตัวจัดการบอร์ด ติดตั้งตัวจัดการบอร์ด esp8266 จะพบได้ง่ายโดยการค้นหา "esp" เป็นสิ่งสำคัญที่คุณต้องติดตั้งเวอร์ชัน 2.5.0 ไม่เก่ากว่า ไม่ใหม่กว่า

ภายใต้การตั้งค่าใน URL ผู้จัดการบอร์ดเพิ่มเติม ให้คัดลอกในบรรทัดนี้:

arduino.esp8266.com/stable/package_esp8266c…

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

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

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

ขั้นตอนที่ 5: Arduino

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

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

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

เซ็นเซอร์ระดับสีเทารอง "เครื่องตรวจจับห้อง" ใช้เพื่อตรวจจับว่ารถ RC เข้าไปในห้องใด ทำงานบนหลักการที่คล้ายคลึงกันกับ Line Detector แต่ไม่ได้มองหาการเปลี่ยนแปลงระหว่างแสงและความมืด แต่จะมองหาค่าภายในช่วงที่กำหนดซึ่งสอดคล้องกับห้องต่างๆ ขึ้นอยู่กับค่าที่เห็นจาก Room Detector

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

รหัสสำหรับ Arduino Mega 2560:

ขั้นตอนที่ 6: ฐานข้อมูล MySQL

WampServer คือสภาพแวดล้อมการพัฒนาเว็บสำหรับ Windows ที่ช่วยให้เราสร้างแอปพลิเคชันด้วยฐานข้อมูล PHP และ MySQL PhpMyAdmin ช่วยให้เราสามารถจัดการฐานข้อมูลของเราได้อย่างง่ายดาย

ในการเริ่มต้นไปที่:

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

เข้าถึง MySQL โดยใช้ PhpMyAdmin และสร้างฐานข้อมูลใหม่ ตั้งชื่อตามความเหมาะสมที่คุณจำได้ ในโครงการนี้เรียกว่า “line_follow_log” หลังจากสร้างฐานข้อมูลแล้ว คุณควรสร้างตารางในฐานข้อมูล ตรวจสอบให้แน่ใจว่าจำนวนคอลัมน์พอดี ในโครงการเราใช้ 4 คอลัมน์ หนึ่งคอลัมน์ใช้สำหรับประทับเวลา และสามคอลัมน์สุดท้ายใช้เพื่อเก็บข้อมูลจากรถ ใช้ประเภทข้อมูลที่เหมาะสมสำหรับแต่ละคอลัมน์ เราใช้ "ข้อความยาว" สำหรับคอลัมน์ประทับเวลาและ "ข้อความกลาง" สำหรับส่วนที่เหลือ

นั่นคือทั้งหมดที่คุณต้องทำใน PhpMyAdmin และ MySQL จำฐานข้อมูลของคุณและตารางสำหรับส่วนเกี่ยวกับโหนด-แดง

ขั้นตอนที่ 7: Node-Red

ในการจัดการการรวบรวมข้อมูล เราจะใช้โฟลว์ที่ค่อนข้างง่ายใน Node-red มันเชื่อมต่อกับเซิร์ฟเวอร์ MQTT ของเรา และเขียนไปยังฐานข้อมูล MYSQL ของเรา

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

สิ่งแรกก่อน เราต้องการพาเลทต่อไปนี้

Node-red-contrib-mqtt-broker:นี่คือการเชื่อมต่อกับโบรกเกอร์ MQTT ของเรา

Node-red-dashboard:แดชบอร์ดของเราจำเป็นต้องแสดงข้อมูลที่รวบรวมด้วยสายตา

Node-red-node-mysql:การเชื่อมต่อของเรากับฐานข้อมูล SQL

นี่ไม่ใช่คำแนะนำที่สมบูรณ์สำหรับ Node-red แต่ฉันจะอธิบายว่าโฟลว์ Node-red ทำอะไร

ก่อนหน้านี้ เรามีปัญหากับเซิร์ฟเวอร์ MQTT ที่ตัวเลือกกำลังจะตาย/ขาดการเชื่อมต่อ ซึ่งดูเหมือนว่าจะเกิดขึ้นโดยบังเอิญ ซึ่งทำให้การเปลี่ยนแปลงใด ๆ เป็นความพยายามที่น่าผิดหวัง เนื่องจากไม่ชัดเจนว่าการเปลี่ยนแปลงนั้นมีประโยชน์หรือไม่ เมื่อเราไม่สามารถเห็นผลได้ ดังนั้นปุ่ม 'เซิร์ฟเวอร์ตายหรือไม่' แทรก 'ไม่' บล็อกต่อไปนี้จะแทรกลงในเซิร์ฟเวอร์ MQTT ของเรา หากยังไม่ตาย 'ไม่' จะปรากฏในหน้าต่างดีบั๊ก สิ่งนี้ทำไม่เพียงเพื่อทดสอบ แต่ยังบังคับให้ Node-red พยายามเชื่อมต่อกับเซิร์ฟเวอร์ MQTT อีกครั้ง

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

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

เครือข่ายขนาดใหญ่ของสวิตช์ที่เชื่อมต่ออยู่ตามโหนดฟังก์ชันหากมี 'เวทมนตร์' จริงเกิดขึ้น

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

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

สาขา 'สถานะ' และ 'ตำแหน่ง' ทำงานเหมือนกันทุกประการ

ขั้นตอนที่ 8: โบรกเกอร์ MQTT

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

สำหรับโครงการนี้ เราได้สร้าง MQTT Broker โดยใช้บริการ CloudMQTT พร้อมสมัครสมาชิกเวอร์ชัน "แมวน่ารัก" ฟรี มันมีข้อจำกัดแต่เราไม่เกินในโปรเจ็กต์นี้ โมดูล WiFi สามารถเชื่อมต่อกับนายหน้าและนายหน้าจากนั้นกำหนดเส้นทางข้อความไปยังไคลเอนต์ปลายทางที่เหมาะสม ในกรณีนี้ ลูกค้าคือ Node-Red ของเรา บริการ CloudMQTT ตั้งค่าชื่อผู้ใช้และรหัสผ่านสำหรับเซิร์ฟเวอร์ ดังนั้นเราจึงรับประกันความปลอดภัยที่สูงขึ้น โดยทั่วไปหมายความว่าเฉพาะผู้ที่มีชื่อผู้ใช้และรหัสผ่านเท่านั้นที่สามารถเข้าถึงบริการ CloudMQTT นี้ได้ ชื่อผู้ใช้และรหัสผ่านมีความสำคัญเมื่อตั้งค่าการเชื่อมต่อกับรหัส ESP8266 เช่นเดียวกับ Node-Red

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

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

ขั้นตอนที่ 9: Hobby Electronics

ก่อนเริ่มต้น เราทราบจากโครงการที่ผ่านมาว่าสามารถควบคุมเซอร์โวพวงมาลัยแบบสต็อกได้จาก Arduino ด้วยสัญญาณ PWM มีสายไฟที่คล้ายกัน และเสียบช่องสัญญาณต่างๆ บนเครื่องรับวิทยุสต็อกเดียวกัน เราถือว่า Electronic Speed Control (ESC จาก ตอนนี้) ที่ควบคุมมอเตอร์ก็สามารถควบคุมผ่าน PWM จาก Arduino ในทำนองเดียวกัน

เพื่อทดสอบทฤษฎีนี้ เราได้จัดทำร่าง Arduino ขนาดเล็ก ภาพสเก็ตช์อ่านอินพุตแบบอะนาล็อกจากโพเทนชิออมิเตอร์ ทำการแมปค่าใหม่จาก 0, 1024 ถึง 0, 255 และส่งออกค่าผลลัพธ์ไปยังพิน PWM โดยใช้ analogWrite() ในขณะที่มีรถ R/C อยู่ในกล่องขนาดเล็ก และมี ถอดล้อออก

หลังจากกวาดผ่านพิสัยบนมิเตอร์หม้อแล้ว ESC ดูเหมือนจะ 'ปลุก' และเราสามารถเร่งมันขึ้นและลงได้ เราให้ Arduino พิมพ์ค่าไปยังการเชื่อมต่อแบบอนุกรมเพื่อให้เราสามารถตรวจสอบได้

ดูเหมือนว่า ESC จะไม่ชอบค่าที่ต่ำกว่าเกณฑ์ที่กำหนด ในกรณีนี้คือ 128 มันเห็นสัญญาณ 191 เป็นเค้นที่เป็นกลาง และ 255 เป็นเค้นสูงสุด

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

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

การแก้ปัญหาอย่างโกรธจัด โยนค่าต่างๆ ลงไป ใช้สายไฟที่แตกต่างกัน และแม้แต่การทดลองเปลี่ยนความถี่ PWM ที่ Arduino ใช้ทั้งหมดก็ส่งผลให้เกิดความแปลกประหลาดมากขึ้น

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

อะไรคือความแตกต่างจากการตั้งค่าโพเทนชิออมิเตอร์ หรือตัวส่งและตัวรับสต็อก และเวอร์ชันที่ให้ค่าคงที่

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

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

ในขณะที่ใช้โพเทนชิออมิเตอร์ เรากำลัง 'กวาด' ผ่านช่วงต่างๆ และจากนั้นมันก็จะเริ่มทำงาน มันติดอาวุธเมื่อโพเทนชิออมิเตอร์กวาดผ่านตำแหน่งที่เป็นกลางแล้วมันก็ทำงาน

ช่วงที่ต่ำกว่า แต่ดูเหมือนว่าจะทำให้ ESC ไม่พอใจ ปรากฎว่าเป็นผลจากวัฏจักรหน้าที่ของ PWM

ไม่ว่าจะด้วยการออกแบบหรือทำขึ้นด้วยเหตุผลทางเทคนิค ทั้งเซอร์โวบังคับเลี้ยวและ ESC จะไม่สนใจสัญญาณรอบการทำงานที่ต่ำกว่า 50% ซึ่งอาจเป็นไปได้ในกรณีที่เครื่องรับ/เครื่องส่งหยุดทำงานหรือไม่มีพลังงานเหลือ แบบจำลองจะกลับสู่สภาวะเป็นกลาง และไม่เคลื่อนตัวออกไปในระยะห่างด้วยคันเร่งแบบย้อนกลับแบบเต็ม เช่นเดียวกัน เซอร์โวหมุนได้เพียง 180 องศา และไม่ต้องการช่วงเต็ม

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

ระหว่างการทดสอบ Traxxas ESC ของสต็อคถูกแทนที่ด้วย Mtroniks G2 Micro อย่างไรก็ตาม ควรทำงานเหมือนเดิม แม้ว่าค่าที่แน่นอนอาจแตกต่างกันเล็กน้อย

ห้องสมุดนี้ถือว่า ESC เป็นเซอร์โวซึ่งเป็นเรื่องปกติ ฟังก์ชัน write() จากไลบรารี่ของ Servo.h เปลี่ยนจาก 0 ถึง 180 สัญญาณอาวุธที่คาดไว้คาดว่าจะอยู่ตรงกลาง

แขน G2 Micro ที่เขียน () ในช่วงของค่าใกล้ 90 อย่างไรก็ตามเป็นการยากที่จะระบุเนื่องจากดูเหมือนว่าจะ 'จำได้' ว่ามีอาวุธ

Traxxas VXL-s3 คาดว่าจะมีการติดตั้งที่ค่า write() ที่ 91

หลังจากสัญญาณติดอาวุธ ESC ทั้งสองก็ยอมรับสัญญาณ PWM อย่างมีความสุข ไม่ว่าฟังก์ชั่น Arduino จะถูกเรียกใช้เพื่อสร้างมันขึ้นมา และควบคุมมอเตอร์ตามนั้น

พูดถึงหน้าที่; analogWrite() มาตรฐาน เช่นเดียวกับ write() และ writeMicroseconds() จากไลบรารี Servo.h สามารถใช้แทนกันได้ เพียงจำไว้ว่าอะไรคือสิ่งที่ทำ และท้ายที่สุดแล้ว ไม่มีอะไรนอกจากวัฏจักรหน้าที่มีความสำคัญ สามารถใช้ WriteMicroseconds() ได้หากต้องการความละเอียดที่มากขึ้น เพียงจำไว้ว่าช่วงที่นี่อยู่ระหว่าง 1,000 ถึง 2000 โดยที่อาวุธหรือ 'เป็นกลาง' คาดว่าจะอยู่ที่ 1500 ด้วย analogWrite มาตรฐาน () ช่วงที่ใช้งานได้คาดว่าจะ มีค่าตั้งแต่ 128 ถึง 255 โดยที่ 191 เป็นกลาง

แนะนำ: