SONIC LED GERİ BİLDİRİM: 7 Adım (Resimlerle)
SONIC LED GERİ BİLDİRİM: 7 Adım (Resimlerle)
Anonim
SONİK LED GERİ BİLDİRİM
SONİK LED GERİ BİLDİRİM
SONİK LED GERİ BİLDİRİM
SONİK LED GERİ BİLDİRİM
SONİK LED GERİ BİLDİRİM
SONİK LED GERİ BİLDİRİM

Tekrar merhaba, Robotunuzun her şeye girmesinden nefret mi ediyorsunuz? Bu sorunu çözecektir. 8 sonik sensörle bu karmaşık görünüyor… ama aslında bunu çok kolaylaştırdım. Arduino hakkında bilgi edinmenize ve 'kutunun dışında' bir konsept göstermenize yardımcı olacak projeler yayınlamaya çalışıyorum. Bu gönderi, 595 anahtarlamayı, programlanabilir bir sensör olarak pro-minis'i ve gerçek zamanlı yönlendirmeli geri bildirimin büyük kullanımını anlamanıza yardımcı olacaktır. Arduino'dan 'kopyala ve yapıştır ve eklenti' olarak hoşlanıyorsanız, bunu atlayabilirsiniz.

Pro-minis kullanmayı seviyorum. Yaklaşık 2,50 dolar, tam gelişmiş bir uno olarak çalışıyorlar ve başlıkları yüklemek onları çok esnek hale getiriyor. Sensör mikro olarak kullanıldığında, satın alınan bir sensörün dikte ettiği şey yerine 'istediğinizi yapmasını' sağlayabilirsiniz. Sadece 2 kablo kullanan I2C ile hepsi tek bir hat üzerinde birbirine bağlanabilir. Bu yüzden MEGA'ya geçin, aynı anda 4 ayrı kod satırı çalıştıran 4 minis'e sahip olabilirim, sadece 10,00$'a. Burada sonik sensörleri bir 595'ten geçirmek için bir mini kullanıyorum ve gerçek zamanlı led mesafesini gösteriyorum. Sonra sadece 8 bit veriyi ana kartla paylaşın. Bu, yükü ana karttan alır ve kodunu çok basit hale getirir.

Ses sensörleriyle ilgili bir sorun var… görsel geri bildirim yok. Sensörün sadece ölü bir ağırlık mı yoksa çalışıyor mu olduğunu asla bilemezsiniz! 'BLINK' ile gelenin Einstein'dan daha akıllı olduğuna inanıyorum. Sadece BİR led ve bir dünya bilgi yanıp sönerek iletilir. Dolayısıyla bir sonik sensörün gerçek zamanlı geri bildirime ihtiyacı vardır. Burada her sensörü izlemek için bir dizi led kullandım. Onlara ihtiyacın yok, sensörleri ledsiz yap yeter. Ancak ledlerin PCB üzerinde olması yararlıdır.

Adım 1: PCB YAPIN

PCB YAP
PCB YAP
PCB YAP
PCB YAP
PCB YAP
PCB YAP
PCB YAP
PCB YAP

PCB yapın ve doldurun. DİKKAT…Sonik sensörlerin takılması için 4 pinli bağlantılarda PCB'de bir hata yaptım. ECHO ve TRIGGER Vcc ve topraklama pcb'ye takılacaktı. Konektörler için yeterli yer yok, bu yüzden PCB'yi pin çıkışlı yaptım. Böylece PCB'ye bir kablo konektörü lehimleyebilir ve gerçek sonik sensörlere takabilirsiniz. Ledlere gelince, iç kenarlara sarı, dış kenarlara kırmızı ledler koydum. bu, sensörlerin doğru ölçüm yapıp yapmadığını uzaktan görmenize yardımcı olur.

Bu şimdiye kadar yaptığım AZ 2 taraflı pcb'den biri. 2 adet tek taraflı yapıp jumper çalıştırmayı tercih ederim. Ancak led ekranı elde etmek için en azından en iyi pcb'ye ihtiyacınız var. İndirmedeki düzeni ayırdım.

PCB, kenar başlığının içinde A4-A5 bulunan bir pro-mini içindir. Her iki durumda da A4-A5'i Master A4-A5'e bağlayın. Vcc ve Grounds'u da unutmayın.

2. Adım: BİRÇOK HATA

BİRÇOK HATA
BİRÇOK HATA

Şimdi hatalarım için… Tetikleyicileri bir kerede (hepsi birbirine bağlı) patlatmaya çalıştım ve bu sıralama iyi çalıştı ancak bazı etkileşimler gerçekleşti. Böylece şimdi tüm ECHOS mikroya (8) gidiyor ve TRIGGERS bir 595 ile ayarlanıyor. Üç pin daha (3). Ledlere gelince, çoğullama çalışmaz. Her led için tam bir AÇIK süreye ihtiyacınız var. Bu, 7 ledlik her sıranın kendi 595'ine sahip olması gerektiği anlamına gelir. 595'i güncellediğinizde, ledler bir sonraki güncellemeye kadar yanık kalır. Led çoğullamanın yalnızca saniyenin onda biri kadar yandığı durumlarda. Bu, okuyucularımda iyi çalışıyor ve özel bir mikroya ihtiyacı var. 8 sonik sensörü taramak ve mesafeleri ölçmek için zaman yok. Denedim ve çok kötü sonuçlar aldım. Ledlerin çoğullanması aynı zamanda bir satır + sütun ızgarası anlamına gelir ve bu, PCB'de yaklaşık 64+ besleme geçişi anlamına gelir.

PCB üzerindeki dağınıklık nedeniyle 595'ten sadece 7 çıkış kullandım. Uzaktan bakıldığında 7 veya 8 led olup olmadığını sadece hareketleriyle anlayamazsınız. Tüm ledleri tek bir dirence bağlamak isteyebilirsiniz ve bu işe yarar, ancak dizinin parlaklığı, lite olan ledlerin miktarı ile değişir. Yani led başına bir direnç en iyisidir. Ben sadece 595'i seviyorum ama Vcc ve 0-out pinlerini hareket ettirseler veya TÜM çıkışları aynı tarafta olan 18 pinli bir ic yapsalar… sekiz çıkışın hepsini bağlamak çok kolay olurdu. Ama o zaman 30 sentten aşağı satılmazdı.

Adım 3: SENSÖRLERİ BAĞLAYIN

MONTAJ SENSÖRLERİ
MONTAJ SENSÖRLERİ
MONTAJ SENSÖRLERİ
MONTAJ SENSÖRLERİ
MONTAJ SENSÖRLERİ
MONTAJ SENSÖRLERİ
MONTAJ SENSÖRLERİ
MONTAJ SENSÖRLERİ

Sonik sensörleri kahve kapağına yapıştırın. erkek jakın her sensörde içe doğru bükülmesi gerekir. Her seferinde bir pimi bükerseniz bu daha iyi çalışır. Titreşimi azaltmak için 2 tarafı köpük bant kullandım. Sensörlerim çok yakın ve PCB'yi daha iyi eşleştirmek için 1/4 inçlik bir alana ihtiyaçları var. Daha önce sonik sensörler kullandım ve bazen biri doğru ölçüm yapamıyor ve bunu aklınızda tutmanız gerekiyor. Bu yüzden hepsini kalıcı olarak YAPIŞTIRMAYIN.

Ayrıca, kullanmadan önce her biri üzerinde hızlı bir mesafe testi yapmanıza yardımcı olur. 20'lik bir partide zayıf okumalı bir sensör alıyorum. Ödediğim fiyat için fena değil.

Adım 4: SERT TEL

SERT TEL
SERT TEL

PC'den bilgisayara jaklar ve fişler için yer olacağını düşündüm.

sonik pimler ama odam bitti. Bu yüzden pcb ucunu sabitledim ve dişi jaklarla (8 adet) eko ve tetik telleri yaptım. Sensörlerin 8ea Vcc ve 8ea topraklarını birbirine bağladım, bu onlar için PCB'ye sadece 2 bağlantı yaptı.

8 sensör ve 8 595s ile bir uno veya pro-mini buna GÜÇ VERMEZ. Bu projenin bir parçası olarak 5v düzenlenmiş bir kaynak olmalıdır. Robotumun pillerinden basit bir 7805 @ 1amp var. Bu, tüm cihazlar için tüm 5v Vcc'ye bağlanır. 7805 yaklaşık bir volt düşer, bu yüzden onu beslemek için en az 6,5 volta ihtiyacınız vardır. Bu, 3.3v'de 2 lityum pildir. Robotumda kullanılmış matkap paketlerinden eski nicadlar var ve 8 niad, 20 dolarlık tank tipi şaside tipik Çin dişli 12v motoru çalıştırıyor.

Adım 5: SONIC SKETCH'İ İNDİRİN

SONIC SKETCH'İ İNDİRİN
SONIC SKETCH'İ İNDİRİN

Krokiyi indirin ve kurun. konuşmanın birçok yolu var

başka bir uno ama I2c'yi severim. karışıklık adresleme ve master/slave. Çoğu sensörde olduğu gibi (2. mini'yi bir sensör olarak düşünün) sensöre hitap eder ve x miktar bayt istersiniz. burada da aynısı. 2. mini'de, göndermek istediğiniz x miktarını bir kenara koyarsınız. Karışıklık, isimlerin önemli olmamasıdır. Sadece isimleri paylaşırsanız hatırlamanıza yardımcı olur. Yani çizimde cm cinsinden 8 sonik mesafe ölçümünü sendR1, sendR2, sendR3, sendR4, sendL1, sendL2, sendL3, sendL4 olarak gönderdim. Master, data ise sadece 8 bayt alır ve bu baytları istediğiniz herhangi bir şey olarak arayabilirsiniz. Onları gotR1, gotR2, got….. olarak okudum. Gönderilen bayt sırası aynı. Yani bayt A, B, C….. adını değiştirerek size farklı veriler vereceğini düşünmeyin. Ve diğer yakalama, yalnızca gönderileceği söylenen verileri alabilirsiniz. Bu nedenle, başka veriler istiyorsanız, BOTH master ve slave değiştirmelisiniz.

Adım 6: İLETİŞİM

İLETİŞİM
İLETİŞİM

Birbirinizle konuşmak için 2 Uno'yu nasıl kuracağınızı biliyorsanız bunu atlayabilirsiniz. Sonunda bazı bilgiler var. Kolaylaştırmak için M1 robot tabanındaki uno'yu ve sonik sensörü S2 olarak adlandıracağım. Vcc, toprak, A4, A5'i birbirine bağlayın.

S2 çiziminde #include ile başlar

Ardından gönderilecek 8 baytı oluşturun. bayt R1, bayt R2, bayt L1 vb. Uno 8 bitlik bir mikrodur, bu nedenle 'int' yerine 'bayt' kullanarak bir seferde 1 bayt gönderirler.

'setup()' içine 'Wire.begin(address)' ekleyin, bu I2c'ye bunun hangi cihaz olduğunu söyler. Adres genellikle 4 - 200 arasında istediğiniz herhangi bir sayıdır. Bir bayt boyutundadır. Burada 10 sayısını kullandım. Yani bu sensör S2 ile konuşmak için master'ın Wire.requestFrom(10, 8) araması gerekir. Bu adres 10 ve 8 kaç bayt isteniyor. Ayrıca 'setup()' içine Wire.onRequest(isr anyName) ekleyin. M1 talebi çağırdığında S2 sensörü kesme ile tepki verir. Bu sadece anyName işlevini çağırır. Yani bu anyName işlevinin oluşturulması gerekiyor. Çizime bakın ve 'sendThis()' fonksiyonunu görün Burası, baytların aslında M1'e gönderildiği yerdir. Yalnızca baytlar gider ve adları DEĞİL ve gönderilen sırayla. Gönderilecek verinin boyutu ve miktarı buradan başlar. Bu kolay bayt biçiminde, gönderme ve alma eşleşmelidir. Burada 8 bayt gönderildi ve 8 bayt alındı. Buradaki bir not, bir işlevi çağırmak için () gerektirir. Delay(), millis(), Serial.print() gibi. Bir ISR (kesme hizmeti rutini) kullanırken, işlevi çağırmak () işaretini düşürür. Yani Wire.onRequest(sendThis) değil Wire.onRequest(sendThis()).

Sahip olduğum kafa karışıklığı efendi/köle meselesiydi. İlk başta ustanın HER ZAMAN usta olduğunu düşündüm. Ancak çizim içinde diğer mikrolardan talep etmek veya diğer mikrolara göndermek için master/slave arasında geçiş yapabilirsiniz. Yukarıda özetlenen temel formatı takip ettiğiniz sürece. Unutmayın… SADECE atanmış verileri paylaşırsınız.

Duvardan iki parça. isr kesmesi yalnızca çizim çizgileri arasında kesinti yapar. Bir 'while veya for' döngüsünde kilitliyseniz, döngü çıkana kadar hiçbir şey olmaz. Bu birkaç mikrosaniye olabileceğinden ve veriler eski olduğundan önemli değil.

Diğer sorun ise, bir mikro 'içinde' %100 hatasız hesaplama olmasıdır. Herhangi bir 'dışarıdan' (kablo) iletişim hatalara tabidir. Teslim edilen verilerin hatasız olduğunu ve kaynakla eşleştiğini kontrol etmenin birçok yolu vardır. En kolay yol sağlama toplamıdır. Gönderen baytların toplamlarını (gerçek değerler) ekleyin ve toplamları gönderin ve alıcı tarafta toplamları ekleyin ve eşleşip eşleşmediğine bakın. Tamam eşleşirlerse veya eşleşmezlerse bu veri setini atın. Elbette bu, bayt değil bir tamsayı değeri göndermeyi içerir. Böylece tamsayıyı HI bayt ve LO baytlarına böler ve ayrı baytlar olarak gönderirsiniz. Ardından alıcıda bir araya getirin.

KOLAY:

int x = 5696; (herhangi bir geçerli int değeri, maksimum 65k veya 32k negatiftir)

bayt merhaba = x >>8; (22)

bayt lo = x; (64)

baytları gönderin ve diğer ucunda birleştirin….

bayt merhaba = Wire.read();

bayt lo = Wire.read();

int yenix = (merhaba <<8) + lo; (5696)

7. Adım: KAPATMA

KAPANIŞ
KAPANIŞ
KAPANIŞ
KAPANIŞ
KAPANIŞ
KAPANIŞ
KAPANIŞ
KAPANIŞ

Kapatmak için bu sonik sensör, ana karta gerçek zamanlı olarak ham mesafe verilerini verir. Bu, mikroyu serbest bırakır ve çizimi çok daha az karmaşık hale getirir. Mikro artık rastgele tahminler yerine iyi verilere dayanarak yavaşlamak, dönmek, durdurmak veya geri gitmek için iyi bir karar verebilir. Eskizleri kablosuz olarak yüklemek ve çiziminizde hızlı bir değişiklik yapmak için robotunuzu her zaman bağlamak zorunda kalmak için bluetooth IDE hakkındaki diğer gönderime bakın. Bunu görüntülediğiniz için teşekkürler. yaşlı adam