SONIC LED FEEDBACK: 7 ขั้นตอน (พร้อมรูปภาพ)
SONIC LED FEEDBACK: 7 ขั้นตอน (พร้อมรูปภาพ)
Anonim
คำติชม LED โซนิค
คำติชม LED โซนิค
คำติชม LED โซนิค
คำติชม LED โซนิค
คำติชม LED โซนิค
คำติชม LED โซนิค

สวัสดีอีกครั้ง, เกลียดที่หุ่นยนต์ของคุณวิ่งเข้าไปในทุกสิ่ง? สิ่งนี้จะแก้ไขปัญหานั้นได้ ด้วยเซ็นเซอร์โซนิค 8 ตัวจึงดูซับซ้อน…แต่ที่จริงแล้วฉันทำให้สิ่งนี้ง่ายมาก ฉันพยายามโพสต์โครงการที่ช่วยให้คุณเรียนรู้เกี่ยวกับ Arduino และแสดงแนวคิด 'นอกกรอบ' โพสต์นี้จะช่วยให้คุณเข้าใจการสลับ 595, pro-minis เป็นเซ็นเซอร์ที่ตั้งโปรแกรมได้ และการใช้งานข้อเสนอแนะแบบเรียลไทม์อย่างดีเยี่ยม หากคุณชอบ Arduino ในฐานะ 'คัดลอกและวางและปลั๊กอิน' คุณสามารถข้ามสิ่งนี้ได้

ฉันชอบใช้โปรมินิ มีราคาประมาณ 2.50 เหรียญ ทำงานเป็น uno แบบเต็ม และการติดตั้งส่วนหัวทำให้มีความยืดหยุ่นมาก ใช้เป็นเซ็นเซอร์ไมโคร คุณสามารถให้ 'ทำในสิ่งที่คุณต้องการ' แทนการใช้เซ็นเซอร์ที่ซื้อมาได้ ด้วย I2C โดยใช้สายไฟเพียง 2 เส้น จึงสามารถมัดรวมกันเป็นเส้นเดียวได้ ดังนั้นย้ายไปที่ MEGA ฉันสามารถมีมินิ 4 ตัวที่รันโค้ดแยกกัน 4 บรรทัดทั้งหมดพร้อมกันในราคาเพียง $10.00 ที่นี่ฉันใช้มินิเพื่อเปิดเซ็นเซอร์โซนิคผ่าน 595 และแสดงระยะทางนำแบบเรียลไทม์ จากนั้นเพียงแชร์ข้อมูล 8 บิตกับเมนบอร์ด วิธีนี้ช่วยลดภาระของเมนบอร์ดและทำให้โค้ดของเธอง่ายมาก

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

ขั้นตอนที่ 1: สร้าง PCB

ทำ PCB
ทำ PCB
ทำ PCB
ทำ PCB
ทำ PCB
ทำ PCB
ทำ PCB
ทำ PCB

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

นี่เป็นหนึ่งใน pcb 2side ไม่กี่ตัวที่ฉันเคยทำ ฉันค่อนข้างจะทำ 2 ea ด้านเดียวและเรียกใช้จัมเปอร์ แต่เพื่อให้ได้จอแสดงผลแบบ LED คุณต้องมี PCB ด้านบนเป็นอย่างน้อย ฉันแยกเค้าโครงในการดาวน์โหลด

PCB มีไว้สำหรับโปรมินิที่มี A4-A5 อยู่ในส่วนหัวของขอบ ไม่ว่าจะด้วยวิธีใด เพียงเชื่อมต่อ A4-A5 กับ Master A4-A5 อย่าลืม Vcc และ Grounds ด้วย

ขั้นตอนที่ 2: ข้อผิดพลาดมากมาย

ความผิดพลาดมากมาย
ความผิดพลาดมากมาย

สำหรับความผิดพลาดของฉัน… ฉันพยายามที่จะเปิดทริกเกอร์ทั้งหมดในครั้งเดียว (ทั้งหมดเชื่อมโยงกัน) และ sorta นี้ทำงานได้ดี แต่มีปฏิสัมพันธ์บางอย่างเกิดขึ้น ดังนั้นตอนนี้ ECHOS ทั้งหมดไปที่ไมโคร (8) และ TRIGGERS ถูกกำหนดโดย 595 อีกสามพิน (3) สำหรับไฟ LED มัลติเพล็กซ์จะไม่ทำงาน คุณต้องมีเวลาเปิดเต็มสำหรับแต่ละ led ซึ่งหมายความว่าแต่ละแถวของ 7 leds จะต้องมี 595 ของตัวเอง เมื่อคุณอัปเดต 595 ไฟ LED จะติดสว่างจนกว่าจะมีการอัปเดตครั้งต่อไป โดยที่การมัลติเพล็กซ์ไฟ LED จะสว่างเพียงเสี้ยววินาทีนั้น ใช้งานได้ดีกับผู้อ่านของฉันและต้องใช้ไมโครเฉพาะ ไม่มีเวลาสแกนเซ็นเซอร์โซนิค 8 ตัวและระยะการวัด ฉันพยายามและได้ผลลัพธ์ที่แย่มาก การมัลติเพล็กซ์ไฟ LED จะหมายถึงตารางของแถว + คอลัมน์และนั่นหมายถึงการป้อนผ่าน 64+ ใน PCB

ฉันใช้เพียง 7 เอาต์พุตจาก 595 เนื่องจากความยุ่งเหยิงบน PCB ในระยะไกลคุณไม่สามารถบอกได้ว่ามีไฟ LED 7 หรือ 8 ดวงที่เคลื่อนไหวหรือไม่ คุณอาจถูกล่อลวงให้ผูกไฟ LED ทั้งหมดเข้ากับตัวต้านทานตัวเดียวและใช้งานได้ แต่ความสว่างของอาร์เรย์จะเปลี่ยนไปตามจำนวนไฟ LED ที่มีแสงน้อย ดังนั้นตัวต้านทานหนึ่งตัวต่อหนึ่งหลอดจึงดีที่สุด ฉันชอบ 595 แต่ถ้าพวกเขาเพิ่งย้าย Vcc และพิน 0-out หรือสร้าง 18 พิน ic ที่มีเอาต์พุตทั้งหมดในด้านเดียวกัน… การเชื่อมต่อเอาต์พุตทั้งแปดจะง่ายมาก แต่มันจะไม่ขายน้อยกว่า 30 เซ็นต์

ขั้นตอนที่ 3: เมาท์เซนเซอร์

เมาท์เซนเซอร์
เมาท์เซนเซอร์
เมาท์เซนเซอร์
เมาท์เซนเซอร์
เมาท์เซนเซอร์
เมาท์เซนเซอร์
เมาท์เซนเซอร์
เมาท์เซนเซอร์

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

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

ขั้นตอนที่ 4: HARD WIRE

สายแข็ง
สายแข็ง

ฉันคิดว่าจะมีที่ว่างสำหรับแจ็คและปลั๊กจากพีซีไปยัง

โซนิคพิน แต่ฉันวิ่งออกจากห้อง ดังนั้นฉันจึงต่อสาย pcb อย่างหนักและเพิ่งสร้างสายสะท้อนและทริกเกอร์ด้วยแจ็คตัวเมีย (8ea) ฉันผูก 8ea Vcc และ 8ea ของเซ็นเซอร์ไว้ด้วยกันดังนั้นจึงสร้างการเชื่อมต่อกับ PCB เพียง 2 อันสำหรับพวกเขา

ด้วยเซ็นเซอร์ 8 ตัวและ 8 595s uno หรือ pro-mini ไม่สามารถจ่ายไฟได้ ต้องมีแหล่งควบคุม 5v เป็นส่วนหนึ่งของโครงการนี้ หุ่นยนต์ของฉันมี 7805 @ 1amp จากแบตเตอรี่อย่างง่าย สิ่งนี้เชื่อมโยงกับ 5v Vcc ทั้งหมดสำหรับอุปกรณ์ทั้งหมด 7805 ลดลงประมาณหนึ่งโวลต์ ดังนั้นคุณต้องมีอย่างน้อย 6.5 โวลต์เพื่อป้อน นั่นคือแบตเตอรี่ลิเธียม 2 ก้อนที่ 3.3v หุ่นยนต์ของฉันมี nicads แบบเก่าจากชุดสว่านที่ใช้แล้ว และ 8 nicads นั้นใช้มอเตอร์ 12v แบบเกียร์ธรรมดาของจีนในแชสซีประเภทรถถังราคา $20

ขั้นตอนที่ 5: ดาวน์โหลด SONIC SKETCH

ดาวน์โหลด SONIC SKETCH
ดาวน์โหลด SONIC SKETCH

ดาวน์โหลดร่างและติดตั้ง มีหลายวิธีที่จะพูดคุยกับ

uno อื่น แต่ฉันชอบ I2c ความสับสนกำลังพูดถึงและเจ้านาย / ทาส เช่นเดียวกับเซ็นเซอร์ส่วนใหญ่ (คิดว่ามินิตัวที่ 2 เป็นเซ็นเซอร์) คุณระบุตำแหน่งเซ็นเซอร์และขอจำนวนไบต์ x สิ่งเดียวกันที่นี่ ในมินิตัวที่ 2 คุณตั้งค่า x จำนวนไบต์ที่คุณต้องการส่ง ความสับสนคือชื่อไม่สำคัญ จะช่วยให้คุณจำได้เฉพาะเมื่อคุณแบ่งปันชื่อ ดังนั้นในภาพร่าง ฉันส่งการวัดระยะทางโซนิค 8 หน่วยในหน่วยเซนติเมตร เช่น sendR1, sendR2, sendR3, sendR4, sendL1, sendL2, sendL3, sendL4 ต้นแบบได้รับ 8 ไบต์หากข้อมูลและคุณสามารถเรียกไบต์เหล่านั้นอะไรก็ได้ที่คุณต้องการ ฉันอ่านว่า gotR1, gotR2, got….. ลำดับของไบต์ที่ส่งนั้นเหมือนกัน ดังนั้นไบต์ A, B, C….. อย่าคิดว่าการเปลี่ยนชื่อจะทำให้คุณมีข้อมูลที่แตกต่างกัน และอีกประการหนึ่ง คุณสามารถรับได้เฉพาะข้อมูลที่บอกให้ส่งเท่านั้น ดังนั้นหากคุณต้องการข้อมูลอื่น คุณต้องเปลี่ยนทั้งมาสเตอร์และสเลฟ

ขั้นตอนที่ 6: การสื่อสาร

การสื่อสาร
การสื่อสาร

คุณสามารถข้ามสิ่งนี้ได้หากคุณรู้วิธีตั้งค่า 2 Uno เพื่อพูดคุยกัน ฉันมีเกร็ดเล็กเกร็ดน้อยของข้อมูลในตอนท้าย เพื่อให้ง่าย ฉันจะเรียก uno ในฐานหุ่นยนต์ M1 และเซ็นเซอร์โซนิคเป็น S2 เชื่อมต่อ Vcc, กราวด์, A4, A5 เข้าด้วยกัน

ในภาพร่างสำหรับ S2 จะเริ่มต้นด้วย #include

จากนั้นสร้าง 8 ไบต์เพื่อส่ง ไบต์ R1, ไบต์ R2, ไบต์ L1 เป็นต้น Uno เป็นไมโคร 8 บิต ดังนั้นพวกเขาจึงส่ง 1 ไบต์ในแต่ละครั้งโดยใช้ 'ไบต์' แทนที่จะเป็น 'int' นั้นถูกต้อง

ใน 'setup()' ให้เพิ่ม 'Wire.begin(address)' สิ่งนี้จะบอก I2c ว่านี่คืออุปกรณ์ใด ที่อยู่มักจะเป็นตัวเลขใดๆ ที่คุณชอบระหว่าง 4 - 200 ขนาดของหนึ่งไบต์ ที่นี่ฉันใช้หมายเลข 10 เพื่อพูดคุยกับเซ็นเซอร์ S2 นี้ อาจารย์ต้องเรียก Wire.requestFrom(10, 8) นี่คือที่อยู่ 10 และ 8 คือจำนวนไบต์ที่ต้องการ นอกจากนี้ใน 'setup()' ให้เพิ่ม Wire.onRequest(isr anyName) เมื่อ M1 เรียกคำขอ เซ็นเซอร์ S2 จะตอบสนองด้วยการขัดจังหวะ นี่แค่เรียกใช้ฟังก์ชัน anyName ดังนั้นจึงต้องสร้างฟังก์ชัน anyName นี้ ดูแบบร่างและดูฟังก์ชัน 'sendThis()' นี่คือที่ที่ไบต์ถูกส่งไปยัง M1 จริง ๆ ไบต์เพียงอย่างเดียวไปและไม่ใช่ชื่อและในลำดับที่ส่ง นี่คือจุดเริ่มต้นของขนาดและปริมาณข้อมูลที่จะส่ง ในรูปแบบไบต์ที่ง่ายนี้ การส่งและรับควรตรงกัน ที่นี่ส่ง 8 ไบต์และรับ 8 ไบต์ หมายเหตุหนึ่งที่นี่คือการเรียกใช้ฟังก์ชันที่ต้องใช้ () เช่น delay(), millis(), Serial.print() เมื่อใช้ ISR (รูทีนบริการขัดจังหวะ) การเรียกใช้ฟังก์ชันจะลด () ดังนั้น Wire.onRequest(sendThis) ไม่ใช่ Wire.onRequest(sendThis())

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

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

ปัญหาอื่นคือ 'ภายใน' ไมโครมีการคำนวณที่ปราศจากข้อผิดพลาด 100% การสื่อสาร 'ภายนอก' (สาย) อาจมีข้อผิดพลาด มีหลายวิธีในการตรวจสอบว่าข้อมูลที่ส่งไม่มีข้อผิดพลาดและตรงกับแหล่งที่มา วิธีที่ง่ายที่สุดคือใช้เช็คซัม เพียงเพิ่มผลรวมของไบต์ที่ส่ง (ค่าจริง) แล้วส่งผลรวมและเมื่อสิ้นสุดการรับให้เพิ่มผลรวมและดูว่าตรงกันหรือไม่ หากตรงกันตกลงหรือโยนชุดข้อมูลนั้นหากไม่ตรงกัน แน่นอนว่าสิ่งนี้เกี่ยวข้องกับการส่งค่าจำนวนเต็มไม่ใช่ไบต์ ดังนั้นคุณเพียงแค่แบ่งจำนวนเต็มออกเป็นไบต์ HI และ LO และส่งเป็นไบต์แยกกัน แล้วนำมาประกอบกันที่เครื่องรับ

ง่าย:

int x = 5696; (ค่า int ที่ถูกต้องใดๆ สูงสุดคือ 65k หรือลบ 32k)

ไบต์สูง = x >>8; (22)

ไบต์แท้จริง = x; (64)

ส่งไบต์และรวมกันที่ปลายอีกด้านหนึ่ง….

ไบต์สวัสดี = Wire.read();

ไบต์ lo = Wire.read();

int newx = (สวัสดี <<8) + แท้จริง; (5696)

ขั้นตอนที่ 7: ปิด

ปิด
ปิด
ปิด
ปิด
ปิด
ปิด
ปิด
ปิด

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