İçindekiler:

Bisikletçiler için Takip Modülü: 5 Adım
Bisikletçiler için Takip Modülü: 5 Adım

Video: Bisikletçiler için Takip Modülü: 5 Adım

Video: Bisikletçiler için Takip Modülü: 5 Adım
Video: BİSİKLET 5 (Kısa Film) 2024, Temmuz
Anonim
Bisikletçiler için Takip Modülü
Bisikletçiler için Takip Modülü

Bisikletçiler için bu takip modülü, bir yarışta meydana gelen çarpışmaları otomatik olarak algılayan ve bir dokunmatik sensöre dokunarak mekanik bir arıza tespit eden bir modüldür. Bu olaylardan biri gerçekleştiğinde, modül olayı LoRa aracılığıyla bir ahududu pi üzerindeki bir veri tabanına gönderir. Bu olay bir LCD ekranda ve bir web sitesinde gösterilecektir. Ayrıca web sitesinde etkinliklerle belirli bir bisiklet yarışını arayabilir ve veritabanına bisiklet yarışları veya bisikletçiler ekleyebilirsiniz. Bu projeyi Bisiklete binme ve IOT ile çok ilgilendiğim için yaptım, bu yüzden bu iki konuyu birleştirmek benim için çok heyecan vericiydi.

Bisikletçiler için bir takip modülü yapmadan önce malzemelerinizi toplamanız gerekiyor. Araç ve gereçleri aşağıdaki listelerde bulabilir veya Malzeme Listesini (Build Of Materials) indirebilirsiniz.

Gereçler:

  • pleksi cam (56mm X 85mm)
  • 10 X 2M cıvata 10mm ve somunlar
  • 10 X 3M cıvata 10mm ve somunlar
  • 2 X 3M cıvata 50mm ve somunlar
  • LCD kasanızı 3D yazdırmak için PLA Filament
  • ısıyla daralan
  • Erkek - Dişi kablolar
  • Temel bir PCB
  • Erkek başlıklar
  • Ahududu Pi 3b+
  • 16 GB'lık bir SD kart
  • Sparkfun 4X20 LCD
  • Kapasitif dokunmatik sensör
  • Bir zil
  • 3 eksenli bir ivme + cayro metre
  • bir GPS modülü
  • SODAQ Mbili kurulu
  • Bir LoRa WAN modülü
  • 3.7V 1000mAh pil
  • Bir Raspberry Pi 3b+ güç kaynağı

Aletler:

  • lehim kalay
  • Havya
  • maşa
  • Tornavidalar
  • yapboz
  • Sondaj makinesi
  • 2.5 ve 3.5 matkaplar
  • Çakmak / sıcak hava tabancası

Tüm malzemeleri satın almanız gerekiyorsa, 541,67 €'luk bir bütçeye ihtiyacınız olacaktır. Bu proje çok pahalı çünkü 299€'ya mal olan bir LoRa hızlı geliştirme kiti kullandım (bu kiti okulumdan kullanma şansım oldu). Her zaman normal bir Arduino kullanabilir ve çok para kazanabilirsiniz, ancak o zaman programlar farklı olacaktır.

Adım 1: Fritzing Şeması

Fritzing Şeması
Fritzing Şeması
Fritzing Şeması
Fritzing Şeması

İlk adım devreleri kurmaktır. Bu proje için biri Raspberry Pi ve diğeri SADAQ Mbili kartı olan 2 elektrik devremiz var. Raspberry Pi devresi ile başlayacağız.

Ahududu Pi Fritzing şeması:

Raspberry Pi şeması oldukça basit, Pi ile bağladığımız tek şey 4X20 Sparkfun LCD ekran. Ekran Seri iletişim, SPI veya I2C ile çalışır. Hangi iletişim protokolünü kullanacağınız size kalmış. Çok basit olduğu için SPI protokolünü kullandım. Benim gibi SPI kullanıyorsanız, aşağıdaki bağlantılara ihtiyacınız var:

  • VCC LCD VCC Ahududu Pi
  • GND LCD GND Ahududu Pi
  • SDI LCD MOSI (GPIO 10) Raspberry Pi
  • SDO LCD MISO (GPIO 9) Raspberry Pi
  • SCK LCD SCLK (GPIO 11) Raspberry Pi
  • CS LCD CS0 (GPIO 8) Ahududu Pi

Fritzing şemasında LCD ekranın 2X16 ekran olduğunu göreceksiniz. Bunun nedeni, frizlemede 4X20 LCD bulamamamdı. Ancak, tüm bağlantılar bazılarıdır, bu yüzden gerçekten önemli değil.

SODAQ Mbili Fritzing şeması:

4 elektronik bileşeni SODAQ Mbili kartına bağlayacağız, bu nedenle bu elektrik şeması da çok basit. Kapasitif dokunmatik sensörü bağlayarak başlayacağız. Bu sensörlerin ÇIKIŞ pimi, sensöre dokunulduğunda YÜKSEK, aksi takdirde DÜŞÜK olacaktır. Bu, OUT pininin Mbili kartının dijital girişine bağlayabileceğimiz dijital bir çıkış olduğu anlamına gelir. Bağlantılar aşağıdaki gibidir:

  • OUT dokunmatik sensör D5 Mbili
  • VCC dokunmatik sensör 3.3V Mbili
  • GND Dokunmatik sensör GND Mbili

İkinci bileşen, Üçlü erişim + cayro sensörüdür. Mbili kartıyla iletişim kurmak için I2C protokolünü kullanan GY-521 kartını kullandım. GY-521 kartının AD0 pininin Mbili kartının VCC'sine bağlanması gerektiğine dikkat edin! Bunun nedeni, Mbili kartının GY-521 gibi aynı I2C adresine sahip bir saate sahip olmasıdır. AD0 pinini VCC'ye bağlayarak GY-521'in I2C adresini değiştiriyoruz. Bağlantılar aşağıdaki gibidir:

  • VCC GY-521 3.3V Mbili
  • GND GY-521 GND Mbili
  • SCL GY-521 SCL Mbili
  • SDA GY-521 SDA Mbili
  • AD0 GY-521 3.3V Mbili

Daha sonra Buzzer'ı bağlayacağız. Akım olduğunda ses çıkaran standart buzzer kullanıyorum. Bu, zili Mbili kartının dijital pinine bağlayabileceğimiz anlamına gelir. Bağlantılar aşağıdaki gibidir:

  • + Buzzer D4 Mbili
  • - Buzzer GND Mbili

Son olarak, GPS modülünü bağlayacağız. GPS modülü, RX ve TX aracılığıyla iletişim kurar. Bağlantılar aşağıdaki gibidir:

  • VCC GPS 3.3V Mbili
  • GND GPS GND Mbili
  • TX GPS RX Mbili
  • RX GPS TX Mbili

Adım 2: Normalleştirilmiş Veritabanı

Normalleştirilmiş Veritabanı
Normalleştirilmiş Veritabanı

İkinci adım, normalleştirilmiş bir Veritabanı tasarlamaktır. ERD'mi Mysql'de tasarladım. Veritabanımın Hollandaca yazılmış olduğunu göreceksiniz, burada tabloları açıklayacağım.

Tablo 'ploeg':

Bu tablo bisiklet kulüpleri için bir tablodur. Bir bisiklet kulübü kimliği ve bir bisiklet kulübü adı içerir.

Tablo 'renners':

Bu masa bisikletçiler için bir masadır. Her bisikletçinin, aynı zamanda tablonun Birincil Anahtarı olan bir LoRaID'si vardır. Ayrıca bir soyadı, adı, menşe Ülkesi ve bisiklet kulübü masasına bağlı bir bisiklet kulübü kimliği vardır.

Tablo 'plaatsen':

Bu tablo, Belçika'da bisiklet yarışı yapılabilecek yerleri saklayan bir tablodur. Şehrin adını (Birincil Anahtar olan) ve şehrin bulunduğu ili içerir.

Tablo 'wedstrijden':

Bu tablo tüm bisiklet yarışlarını saklar. Tablonun Birincil Anahtarı bir kimliktir. Tabloda ayrıca bisiklet yarışının adı, yerler tablosuna bağlı yarışın şehri, yarışın mesafesi, bisikletçilerin kategorisi ve yarış tarihi yer almaktadır.

Tablo 'gebeurtenissen':

Bu tablolar meydana gelen tüm olayları saklar. Bu, bir bisikletçi bir kazaya karıştığında veya mekanik bir arıza geçirdiğinde, olayın bu tabloda saklanacağı anlamına gelir. Tablonun Birincil Anahtarı bir kimliktir. Tablo ayrıca olayın tarih saatini, konumun Enlemini, konumun Boylamını, bisikletçinin LoRaID'sini ve olayın türünü (çarpışma veya mekanik arıza) içerir.

Tablo 'wedstrijdrenner':

Bu tablo çoktan çoğa ilişki için gerekli olan bir tablodur.

3. Adım: LoRa Modülünüzü Kaydedin

LoRa Modülünüzü Kaydedin
LoRa Modülünüzü Kaydedin

Kodu kullanmaya başlamadan önce LoRa modülünüzü bir LoRa ağ geçidine kaydetmeniz gerekir. Belçika'da LoRa modülüm için iletişimi ayarlayan 'Proximus' adlı bir telekom şirketi kullandım. LoRa düğümümle gönderdiğim veriler web sitesinde AllThingsTalk'tan toplanıyor. Verilerinizi toplamak için AllThingsTalk API'sini de kullanmak istiyorsanız, buradan kaydolabilirsiniz.

AllThingsTalk'a kaydolduktan sonra LoRa düğümünüzü kaydetmeniz gerekir. Bunun için aşağıdaki adımları takip edebilir veya yukarıdaki resme bakabilirsiniz.

  1. Ana menüdeki 'Cihazlar'a gidin
  2. 'Yeni Cihaz' üzerine tıklayın
  3. LoRa düğümünüzü seçin
  4. Tüm anahtarları doldurun.

Artık işin bitti! LoRa düğümünüzle gönderdiğiniz tüm veriler AllThingsTalk oluşturucunuzda görünecektir. Kayıtla ilgili herhangi bir sorun yaşarsanız, her zaman AllThingsTalk belgelerine başvurabilirsiniz.

Adım 4: Kod

kod
kod
kod
kod
kod
kod
kod
kod

Bu proje için 5 kodlama diline ihtiyacımız olacak: HTML, CSS, Java Script, Python (Flask) ve Arduino dili. Öncelikle Arduino programını anlatacağım.

Arduino programı:

Programın başında bazı Global Değişkenler beyan ediyorum. GPS'imle bağlantı için SoftwareSerial kullandığımı göreceksiniz. Bunun nedeni, Mbili kartının yalnızca 2 seri bağlantı noktasına sahip olmasıdır. GPS'i Serial0'a bağlayabilirsiniz, ancak o zaman hata ayıklama için Arduino terminalini kullanamazsınız. SoftwareSerial kullanmamın nedeni bu.

Global Değişkenlerden sonra programı okumayı kolaylaştıran bazı fonksiyonları beyan ediyorum. GPS koordinatlarını okurlar, sesli uyarı verirler, LoRa aracılığıyla değerleri gönderirler, …

Üçüncü blok kurulum bloğudur. Bu blok, pinleri, seri iletişimi ve I2C iletişimini kuran programın başlangıcıdır.

Kurulum bloğundan sonra ana program gelir. Bu ana döngünün başında dokunmatik sensörün aktif olup olmadığını kontrol ediyorum. Eğer öyleyse, sesli uyarı veririm, GPS verilerini alırım ve tüm değerleri LoRa veya Bluetooth üzerinden Raspberry PI'ye gönderirim. Dokunmatik sensörden sonra İvmeölçerin değerlerini okudum. Bir formülle X ve Y ekseninin tam açısını hesaplarım. Bu değerler çok büyükse bisikletçinin kaza yaptığı sonucuna varabiliriz. Bir çarpışma olduğunda tekrar sesli uyarı veririm, GPS verilerini alırım ve tüm değerleri LoRa veya Bluetooth üzerinden Raspberry PI'ye gönderirim.

Muhtemelen 'Bluetooth ve LoRa'yı neden kullanıyorsunuz?' diye düşünüyorsunuz. Bunun nedeni, kullandığım LoRa modülünün lisansıyla ilgili bir sorun yaşamamdı. Programın demolarım için çalışması için bir süre Bluetooth kullanmak zorunda kaldım.

2. Arka uç:

Arka uç biraz karmaşık. Rotalarım için ön uç için erişilebilir olan Flask kullanıyorum, bazı ön uç sayfaları otomatik olarak güncellemek için socketio kullanıyorum, mesajları LCD ekranda göstermek ve Bluetooth aracılığıyla mesaj almak için GPIO pinlerini kullanıyorum (kullanıyorsanız gerekli değil) LoRa) ve AllThinksTalk API'sini düzenli olarak okumak ve şişe sunucusunu başlatmak için Threading ve Zamanlayıcıları kullanıyorum.

Ayrıca gelen tüm kazaları depolamak, bisikletçilerin kişisel verilerini ve yarış verilerini okumak için SQL veritabanını kullanıyorum. Bu veritabanı arka uca bağlıdır ve ayrıca Raspberry Pi üzerinde de çalışır. Veritabanıyla etkileşim kurmak için bir 'Database.py' sınıfı kullanıyorum.

Fritzing şemasından bildiğiniz gibi lcd, Raspberry Pi'ye SPI protokolü ile bağlanır. Biraz daha kolaylaştırmak için bir 'LCD_4_20_SPI.py' sınıfı yazdım. Bu sınıf ile kontrastı değiştirebilir, arka ışık rengini değiştirebilir, ekrana mesaj yazabilir, …. Bluetooth kullanmak istiyorsanız 'SerialRaspberry.py' sınıfını kullanabilirsiniz. Bu sınıf, Bluetooth modülü ile Raspberry Pi arasındaki seri iletişimi yönetir. Yapmanız gereken tek şey, Raspberry Pi'ye bir Bluetooth modülünü RX'i TX'e bağlayarak veya tam tersini yapmaktır.

Ön uç için rotalar @app.route kuralı ile yazılır. Burada, veri tabanına veri eklemek veya veri tabanından veri almak için kendi özel rotanızı oluşturabilirsiniz. Rotanın sonunda her zaman bir yanıtınız olduğundan emin olun. Bir hata oluştuğunda bile her zaman bir JSON nesnesini ön uca döndürürüm. Değişkenin çevresine yerleştirerek url'de bir değişken kullanabilirsiniz.

Bir yarışın çöktüğü web sayfası için socketio kullanıyorum. Raspberry Pi bir çökme aldığında, socketio aracılığıyla ön uca bir mesaj gönderiyorum. Ön uç, daha sonra yeni bir çökme olduğu için veritabanını tekrar okumaları gerektiğini bilir.

Kodumda LoRa iletişiminin komuta ayarlandığını göreceksiniz. LoRa'yı kullanmak istiyorsanız, AllThinksTalk API'sine tekrarlayan bir istek gönderen bir zamanlayıcı başlatmanız gerekir. Bu API'den, belirli bir LoRa düğümü tarafından gönderilen sensör değerlerini (GPS, Time, Crash türü) alacaksınız. Veritabanına bir kilitlenme eklemek için bu değerleri kullanabilirsiniz.

3. Yaprak ucu:

Yaprak ucu 3 dilden oluşur. Web sitesi metni için HTML, web sitesi işaretlemesi için CSS ve arka uçla iletişim için JavaScript. Bu proje için 4 web sitesi sayfam var:

  • Tüm bisiklet yarışlarını bulabileceğiniz index.html.
  • Spesifik bir yarış için tüm kazaları ve mekanik arızaları içeren bir sayfa.
  • Veritabanına bisikletçiler ekleyebileceğiniz ve takımlarını düzenleyebileceğiniz bir sayfa.
  • Veritabanına tüm katılımcıları ile yeni bir yarış ekleyebileceğiniz bir sayfa.

Onları nasıl tasarlayacağınız tamamen size kalmış. İsterseniz web sitemden biraz ilham alabilirsiniz. Maalesef web sitem Hollanda dilinde yapıldı, bunun için üzgünüm.

Her sayfa için ayrı bir CSS dosyam ve JavaScript dosyam var. Her JavaScript dosyası, verileri arka uç aracılığıyla veritabanından almak için getirme kullanır. Komut dosyası verileri aldığında, html dinamik olarak değişir. Kazaları ve mekanik arızaları bulabileceğiniz sayfada, tüm olayların gerçekleştiği bir harita bulacaksınız. Bu haritayı göstermek için broşür kullandım.

Tüm kodlarıma burada Github'ımda bakabilirsiniz.

Adım 5: Yapıları İnşa Edin

İnşaatları İnşa Edin
İnşaatları İnşa Edin
İnşaatları İnşa Et
İnşaatları İnşa Et
İnşaatları İnşa Edin
İnşaatları İnşa Edin

İnşaata başlamadan önce, Malzeme Listesindeki veya 'Araçlar + Malzemeler' sayfasındaki tüm malzemelere sahip olduğunuzdan emin olun.

Ahududu Pi + LCD

Raspberry Pi davasıyla başlayacağız. Her zaman bir davayı 3D yazdırabilirsiniz, bu aynı zamanda benim ilk fikrimdi. Ancak son teslim tarihim çok yaklaştığı için basit bir dava açmaya karar verdim. Raspberry Pi'den standart kasayı aldım ve LCD ekranımdaki kablolar için kasada bir delik açtım. Bunu yapmak için şu basit adımları uygulamanız yeterlidir:

  1. Kasanın kapağına bir delik açın. Bunu kapağın yanında 7 mm'lik bir matkapla yaptım. Bunu yukarıdaki resimde görebilirsiniz.
  2. Kabloları LCD ekrandan alın ve kabloların üzerine bir büzülme başlığı kaydırın.
  3. Kafa büzülmelerini küçültmek için çakmak veya sıcak hava tabancası kullanın.
  4. Kabloları, kafa büzüşmeli olarak kasadaki delikten çekin ve tekrar LCD'ye bağlayın.

Artık Raspberry Pi için kasaya hazır olduğunuza göre, LCD ekran kasasıyla başlayabilirsiniz. LCD Ekranım için kasayı 3D yazdırdım çünkü bu bağlantıda çevrimiçi bir kasa buldum. Sadece kasanın yüksekliğinde küçük bir değişiklik yapmak zorunda kaldım. Çiziminizin iyi olduğunu düşündüğünüzde, dosyaları dışa aktarabilir ve yazdırmaya başlayabilirsiniz. Nasıl 3B yazdırılacağını bilmiyorsanız, fusion 360 ile nasıl 3B yazdırılacağına ilişkin bu talimatı takip edebilirsiniz.

SODAQ MBili inşaat

SODAQ Mbili kartı için gerçekten bir dava açmadım. Bileşenlerimi konstrüksiyonun etrafına kılıfsız yerleştirmek için bir pleksi cam kullandım. Bunu da yapmak istiyorsanız, şu adımları takip edebilirsiniz:

  1. SODAQ Mbili panosunun boyutlarıyla pleksiglası imzalayın. Boyutlar: 85mm X 56mm
  2. Pleksiglası bir yapbozla kesin.
  3. Elektronik bileşenleri pleksiglasın üzerine yerleştirin ve delikleri bir kalemle işaretleyin.
  4. Az önce imzaladığınız delikleri ve zıtlıklar için delikleri 3,5 mm'lik bir matkapla delin.
  5. Tüm elektronik bileşenleri 3M 10mm cıvata ve somunlarla pleksiglas üzerine monte edin.
  6. Son adım, pleksiglası Mbili panosunun üzerine monte etmektir. Bunu zıtlıklar ile yapabilirsiniz, ancak pleksiglası tahtanın üzerine monte etmek için iki adet 3M 50mm cıvata ve 8 adet 3M somun kullandım.

Önerilen: