Mündəricat:

SONIC LED ƏLAQƏ: 7 Adım (Şəkillərlə birlikdə)
SONIC LED ƏLAQƏ: 7 Adım (Şəkillərlə birlikdə)

Video: SONIC LED ƏLAQƏ: 7 Adım (Şəkillərlə birlikdə)

Video: SONIC LED ƏLAQƏ: 7 Adım (Şəkillərlə birlikdə)
Video: Kim nə başa düşdü ❓ 2024, Noyabr
Anonim
SONIC LED ƏLAQƏ
SONIC LED ƏLAQƏ
SONIC LED ƏLAQƏ
SONIC LED ƏLAQƏ
SONIC LED ƏLAQƏ
SONIC LED ƏLAQƏ

Yenidən salam, Robotunuzun hər şeylə məşğul olmasına nifrət edirsiniz? Bu problemi həll edəcək. 8 səs sensoru ilə bu mürəkkəb görünür … amma əslində bunu çox asanlaşdırdım. Arduino haqqında öyrənməyinizə və 'qutunun xaricində' konsepsiyasını göstərməyinizə kömək edəcək layihələr göndərməyə çalışıram. Bu yazı 595 keçidini, proqramlaşdırıla bilən bir sensor kimi pro-minisləri və real vaxtda idarə olunan geribildirimdən böyük istifadəni başa düşməyinizə kömək edəcək. Arduinodan 'kopyalayıb yapışdırıb plug-in' etməkdən zövq alırsınızsa, bunu atlaya bilərsiniz.

Pro-mini istifadə etməyi xoşlayıram. Təxminən 2.50 dollardır, tam bir şəkildə işləyir və başlıqların quraşdırılması onları çox çevik edir. Sensor mikro olaraq istifadə edildikdə satın alınan sensorun diktə etdiyi şeyin yerinə 'istədiyinizi edə' bilərsiniz. Yalnız 2 tel istifadə edən I2C ilə hamısını bir xəttə bağlamaq olar. Beləliklə, MEGA -nın üstünə keçin, eyni anda 4 ayrı kod xətti işlədən 4 minisə sahib ola bilərəm, cəmi 10.00 dollar. Burada 595 vasitəsilə səs sensorlarını açmaq və real vaxtda led məsafəni göstərmək üçün mini istifadə edirəm. Sonra 8 bitlik məlumatı ana kartla paylaşın. Bu yükü ana kartdan çıxarır və kodunu çox sadə edir.

Sonic sensorlar ilə bağlı bir problem var… vizual rəy yoxdur. Sensorun yalnız ölü və ya işlək olduğunu heç vaxt bilmirsiniz! İnanıram ki, 'BLINK' ilə kim qarşılaşdı, Einstine -dən daha ağıllıdır. Yalnız ONE rəhbərlik edir və məlumat dünyası yanıb -sönmə ilə ötürülür. Beləliklə, bir sonic sensoru real vaxt rəyinə ehtiyac duyur. Burada hər sensoru izləmək üçün bir sıra LED istifadə etdim. Onlara ehtiyacınız yoxdur, sensörləri ledsiz edin. Ancaq PCB -də ledlərin olması faydalıdır.

Addım 1: PCB hazırlayın

PCB hazırlayın
PCB hazırlayın
PCB hazırlayın
PCB hazırlayın
PCB hazırlayın
PCB hazırlayın
PCB hazırlayın
PCB hazırlayın

PCB hazırlayın və doldurun. DİQQƏT … Sonic sensorlarının qoşulması üçün 4 pinli bağlantılarda PCB -də səhv etdim. ECHO və TRIGGER Vcc və əsaslar pcb -ə qoşulacaqdı. Bağlayıcılar üçün kifayət qədər yer yoxdur, buna görə PCB-ni pin çıxıntıları ilə düzəltdim. Beləliklə, bir tel konnektorunu PCB -yə lehimləyə və əsl sonic sensorlarına qoşa bilərsiniz. Ledlərə gəldikdə, daxili kənarına sarı, kənarına isə qırmızı ledlər qoydum. bu, sensorların düzgün ölçdüyünü uzaqdan görməyə kömək edir.

Bu, indiyə qədər hazırladığım FEW 2side pcb -dən biridir. Tək tərəfli və tullanan 2 qaçış etmək istərdim. Ancaq LED ekranı əldə etmək üçün ən azından ən yaxşı PCB -yə ehtiyacınız var. Yükləmədə düzeni ayırdım.

PCB, kənar başlığın içərisində A4-A5 olan bir pro-mini üçündür. Hər halda A4-A5-i Master A4-A5-ə qoşun. Vcc və Grounds haqqında da unutmayın.

Addım 2: Bir çox səhvlər

Çox səhvlər
Çox səhvlər

İndi səhvlərim üçün … Tətikçiləri bir anda açmağa çalışdım (hamısı bir -birinə bağlandı) və bu növ yaxşı işləyir, amma bəzi qarşılıqlı təsirlər baş verdi. Beləliklə, indi bütün ECHOS mikro (8) -ə gedir və TRIGGERS 595 tərəfindən təyin olunur. Üç daha sancaq (3). Ledlərə gəldikdə, multipleksləmə işləməyəcək. Hər bir led üçün tam ON vaxtına ehtiyacınız var. Bu, 7 leddən ibarət olan hər satırın öz 595 -ə malik olması deməkdir. 595 -i yenilədikdən sonra ledlər növbəti yeniləməyə qədər yanır. Ledin çoxaldılmasının yalnız saniyənin onda biri üçün işıqları. Bu oxucularımda yaxşı işləyir və xüsusi bir mikro işə ehtiyacı var. 8 sonic sensoru skan etmək və məsafələri ölçmək üçün vaxt yoxdur. Çalışdım və çox pis nəticələr aldım. Ledləri çoxaltmaq eyni zamanda bir satır + sütun şəbəkəsi deməkdir və bu, PCB -də təxminən 64+ keçid deməkdir.

PCB üzərindəki qarışıqlıq səbəbindən 595 -dən yalnız 7 çıxışı istifadə etdim. Uzaqdan, yalnız 7 və ya 8 ledin olub olmadığını anlaya bilməzsiniz. Bütün ledləri tək bir rezistora bağlamaq istəyiniz ola bilər və bu işləyir, ancaq dizinin parlaqlığı lite olan ledlərin sayına görə dəyişir. Beləliklə, hər bir LED üçün bir rezistor daha yaxşıdır. Mən yalnız 595-i sevirəm, ancaq Vcc və 0-pinləri köçürsələr və ya eyni tərəfdə BÜTÜN çıxışı olan 18 pinli bir ic düzəltsələr … bütün səkkiz çıxışı birləşdirmək çox asan olardı. Amma sonra 30 qəpikdən aşağı satmazdı.

Addım 3: SENSORLARI MONTAQ edin

MONTAJ SENSORLARI
MONTAJ SENSORLARI
MONTAJ SENSORLARI
MONTAJ SENSORLARI
MONTAJ SENSORLARI
MONTAJ SENSORLARI
MONTAJ SENSORLARI
MONTAJ SENSORLARI

Qəhvə qapağına sonik sensorlar yapışdırın. kişi jakının hər bir sensora içəri əyilmiş olması lazımdır. Bir anda bir pin büksəniz bu daha yaxşı işləyir. Titrəmənin az olması üçün 2 tərəfli köpük lentdən istifadə etdim. Sensorlarım çox yaxındır və PCB -ni daha yaxşı uyğunlaşdırmaq üçün 1/4 düymlük bir yerə ehtiyac var. Mən əvvəllər sonik sensorlar istifadə etmişəm və bəzən dəqiq ölçmək mümkün olmur və bunu yadda saxlamalısan. Buna görə də hamısını daimi yapışdırmayın.

İstifadədən əvvəl hər birində sürətli bir məsafə testi aparmağa kömək edir. 20 ədədlik bir dəstədə zəif oxuyan təxminən bir sensor alıram. Ödəndiyim qiymət üçün pis deyil.

Addım 4: HARD TEL

SABİT TEL
SABİT TEL

Düşünürdüm ki, kompüterdən kompüterə qədər prizlər və fişlər üçün yer olacaq

səs sancaqları, amma otaqdan qaçdım. Beləliklə, PCB ucunu möhkəm bağladım və yalnız qadın yuvaları ilə əks -səda və tətik telləri düzəltdim (8ea). Sensorların 8ea Vcc və 8ea əsaslarını bir -birinə bağladım ki, bu da onlar üçün PCB -yə cəmi 2 əlaqə yaratdı.

8 sensor və 8 595s ilə uno və ya pro-mini buna güc verə bilməz. Bu layihənin bir hissəsi olaraq 5v tənzimlənən bir qaynaq olmalıdır. Robotumda batareyalardan sadə 7805 @ 1amp var. Bu, bütün cihazlar üçün bütün 5v Vcc ilə əlaqələndirir. 7805 təxminən bir volt düşür, buna görə onu qidalandırmaq üçün ən az 6.5 volt lazımdır. Yəni 3.3v -də 2 lityum batareya. Robotumda istifadə olunan qazma paketlərindən köhnə nikadlar var və 8 nikad tipik Çin dişli 12v mühərrikini 20 dollarlıq tank tipli şassidə idarə edir.

Addım 5: SONIC SKETCH YÜKLƏ

SONİK SKETCHİ YÜKLƏ
SONİK SKETCHİ YÜKLƏ

Eskizi yükləyin və quraşdırın. Danışmağın bir çox yolu var

başqa bir uno amma I2c -ni sevirəm. qarışıqlıq ünvan və ağa/ qul. Əksər sensorlarda olduğu kimi (2 -ci mini bir sensor kimi düşünün) sensora müraciət edirsiniz və x bayt miqdarını soruşursunuz. burada eyni şey. 2 -ci mini -də x göndərmək istədiyiniz bayt miqdarını ayırırsınız. Qarışıqlıq adların heç bir əhəmiyyət kəsb etməməsidir. Yalnız adları paylaşsanız xatırlamağa kömək edir. Eskizdə 8 sonic məsafə ölçüsünü sendR1, sendR2, sendR3, sendR4, sendL1, sendL2, sendL3, sendL4 olaraq cm olaraq göndərirəm. Məlumat və bu baytlara istədiyiniz hər şeyi zəng edə bilsəniz, usta yalnız 8 bayt alır. Onları gotR1, gotR2, got kimi oxudum …. Göndərilən bayt sırası eynidir. Belə ki, bayt A, B, C….. adını dəyişməklə sizə fərqli məlumatlar verəcəyini düşünməyin. Digər tutmaq üçün isə yalnız göndərilməsi lazım olan məlumatları ala bilərsiniz. Başqa məlumatlar istəsəniz, həm master, həm də slave dəyişdirməlisiniz.

Addım 6: ƏLAQƏ

ƏLAQƏ
ƏLAQƏ

Bir -birinizlə danışmaq üçün 2 Uno qurmağı bilirsinizsə bunu atlaya bilərsiniz. Sonda bəzi məlumatlarım var. Bunu asanlaşdırmaq üçün robot bazası M1 və S2 olaraq sonik sensoru çağıracağam. Vcc, torpaq, A4, A5 -i bir -birinə bağlayın.

S2 üçün eskizdə #include ilə başlayır

Sonra göndərmək üçün 8 bayt yaradın. bayt R1, bayt R2, bayt L1 və s. Uno 8 bitlik bir mikrobdur, buna görə də 'int' yerinə 'bayt' istifadə edərək bir anda 1 bayt göndərirlər.

'Setup ()' də 'Wire.begin (ünvan)' əlavə edin, bu I2c -in hansı cihaz olduğunu bildirir. Adətən adətən 4 - 200 arasında istədiyiniz hər hansı bir nömrədir. Bir bayt ölçüsündədir. Burada 10 nömrəsini istifadə etdim. Buna görə də S2 sensoru ilə danışmaq üçün usta Wire.requestFromdan zəng etməlidir (10, 8). Bu ünvan 10 və 8, neçə bayt istənir. Ayrıca 'setup ()' da Wire.onRequest (isr anyName) əlavə edin. M1 sorğunu çağıranda S2 sensoru fasilə ilə reaksiya verir. Bu yalnız funksiyanı anyName adlandırır. Buna görə də bu anyName funksiyasını yaratmaq lazımdır. Eskizə baxın və 'sendThis ()' funksiyasına baxın, baytların M1 -ə göndərildiyi yer budur. Baytlar tək gedir və adları və göndərilən qaydada DEYİL. Göndəriləcək məlumatların ölçüsü və miqdarı buradan başlayır. Bu asan bayt formatında göndərmə və qəbul etmə uyğun olmalıdır. Burada 8 bayt göndərildi və 8 bayt alındı. Burada bir funksiyanın çağırılması () tələb edir. Gecikmə (), millis (), Serial.print () kimi. Bir ISR (kəsilmə xidməti) istifadə edərkən funksiya çağırılarkən () düşür. Wire.onRequest (sendThis) deyil, Wire.onRequest (sendThis ()).

Yaşadığım qarışıqlıq ağa/qul məsələsi idi. Əvvəlcə ustanın hər zaman ustad olduğunu düşündüm. Ancaq eskizdə master/slave -ni digər mikro -lərdən istəyə və ya başqa mikro -lara göndərə bilərsiniz. Yuxarıda göstərilən əsas formata əməl etdiyiniz müddətcə. Unutmayın … yalnız təyin edilmiş məlumatları paylaşırsınız.

Divardan iki ədəd tid biti. ISR kəsilməsi yalnız eskiz xətləri arasında kəsilir. Əgər 'while və ya' döngəsində kilidlənmiş olsanız, loop çıxana qədər heç bir şey olmaz. Bu bir neçə mikrosaniyə ola biləcəyi üçün böyük bir şey yoxdur və məlumatlar köhnədir.

Digər problem, 'içərisində' bir mikro 100% səhvsiz hesablama var. Hər hansı bir "kənar" (tellər) ünsiyyəti səhvlərə məruz qalır. Verilən məlumatların səhvsiz olduğunu və mənbəyə uyğun olub olmadığını yoxlamağın bir çox yolu var. Ən asan yol checksumdur. Göndərən baytların cəmini (faktiki dəyərlər) əlavə edin və cəmləri göndərin və alıcı tərəfdə cəmləri əlavə edin və uyğun olub olmadığını görün. Tamamla uyğun gəlirsə və ya uyğun gəlmirsə, bu məlumat dəstini atın. Təbii ki, bu, bayt deyil, tam ədəd göndərilməsini nəzərdə tutur. Beləliklə, tam rəqəmi HI baytına və LO baytına bölün və ayrı bayt olaraq göndərin. Sonra alıcıya yığın.

ASAN:

int x = 5696; (hər hansı bir etibarlı int dəyəri, maksimum 65k və ya 32k mənfi)

bayt salam = x >> 8; (22)

bayt lo = x; (64)

baytları göndərin və digər ucunda birləşdirin ….

bayt salam = Wire.read ();

bayt lo = Wire.read ();

int newx = (salam << 8) + lo; (5696)

Addım 7: QAPAMA

QAPALI
QAPALI
QAPALI
QAPALI
QAPALI
QAPALI
QAPALI
QAPALI

Bağlamaq üçün bu sonic sensoru anakarta real məsafədə xam məsafə məlumatları verir. Bu mikrofonu sərbəst buraxır və eskizi daha da çətinləşdirir. Mikro, təsadüfi təxminlər yerinə yaxşı məlumatlara əsaslanaraq yavaşlatmaq, çevirmək, dayandırmaq və ya geri çevirmək üçün yaxşı bir qərar verə bilər. Eskizlərinizi simsiz yükləmək və eskizinizi tez bir zamanda dəyişdirmək üçün robotunuzu hər zaman bağlamaq məcburiyyətində qalmaq üçün bluetooth IDE ilə bağlı digər yazıma baxın. Buna baxdığınız üçün təşəkkürlər. oldmaninsc.

Tövsiyə: