สารบัญ:

SONIC LED FEEDBACK: 7 ขั้นตอน (พร้อมรูปภาพ)
SONIC LED FEEDBACK: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: SONIC LED FEEDBACK: 7 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: SONIC LED FEEDBACK: 7 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: ไฟหน้ารถ LED vs หลอดไส้ ll วัดให้ดูกันจะๆ แบบไหนกินไฟมากกว่ากัน 2024, พฤศจิกายน
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 เพื่ออัปโหลดภาพสเก็ตช์โดยไม่ต้องใช้สายและต้องเชื่อมต่อหุ่นยนต์ของคุณตลอดเวลาเพื่อการเปลี่ยนแปลงอย่างรวดเร็วในสเก็ตช์ของคุณ ขอบคุณสำหรับการดูนี้ คนแก่

แนะนำ: