İçindekiler:

☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu: 7 Adım (Resimlerle)
☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu: 7 Adım (Resimlerle)

Video: ☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu: 7 Adım (Resimlerle)

Video: ☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu: 7 Adım (Resimlerle)
Video: Приваловские миллионы (1972) (1 серия) фильм 2024, Temmuz
Anonim
☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu
☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu
☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu
☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu
☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu
☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu
☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu
☠WEEDINATOR☠ Bölüm 2: Uydu Navigasyonu

Weedinator navigasyon sistemi doğdu!

Akıllı telefon ile kontrol edilebilen, gezici bir tarım robotu.

… Ve nasıl bir araya getirildiğinin olağan sürecinden geçmek yerine, aslında nasıl çalıştığını açıklamaya çalışayım dedim - açıkçası HER ŞEY değil ama en önemli ve ilginç kısımlar. Lütfen kelime oyunu için kusura bakmayın, ancak ilginç bulduğum ve en düşük paydaya bölündüğüm bireysel modüller arasındaki veri akışı, gerçek "bitler" - sıfırlar ve birler ile sonuçlanır. Bitler, baytlar, karakterler ve dizeler konusunda kafanız karıştıysa, kafanız karışmasın şimdi tam zamanı olabilir mi? Ayrıca 'Hata İptal Etme' adlı biraz soyut bir kavramı da deneyeceğim ve karıştıracağım.

Sistemin kendisi şunları içerir:

  • GPS/GNSS: Ublox C94 M8M (Gezi ve Taban)
  • 9DOF Razor IMU MO dijital pusula
  • Fona 800H 2G GPRS hücresel
  • 2.2" TFT ekran
  • Arduino Due 'Usta'
  • Çeşitli Arduino 'Köleler'.

Garip bir şekilde, birçok uydu navigasyon cihazında dijital pusula yoktur; bu da, hareketsizseniz ve kaybolduysanız, cihazın uydulardan size doğru yönü gösterebilmesi için rastgele herhangi bir yönde yürümeniz veya araç sürmeniz gerektiği anlamına gelir. Kalın bir ormanda veya yeraltı otoparkında kaybolursanız, doldurulursunuz!

Adım 1: Nasıl Çalışır?

Nasıl çalışır
Nasıl çalışır

Şu anda, bir akıllı telefon veya bilgisayardan basit bir çift koordinat yükleniyor ve bunlar daha sonra Weedinator tarafından indiriliyor. Bunlar daha sonra derece cinsinden bir yön ve mm cinsinden gidilecek mesafe olarak yorumlanır.

GPRS fona, 2G hücresel ağ üzerinden çevrimiçi bir veritabanına erişmek ve bir Arduino Nano aracılığıyla koordinatları alıp Arduino Due'a iletmek için kullanılır. Due, Master'dır ve I2C ve seri veriyolları aracılığıyla bir dizi diğer Arduino'yu Köle olarak kontrol eder. Due, Ublox ve Razor'dan gelen canlı verilerle etkileşime girebilir ve Arduino bağımlılarından biri tarafından hesaplanan bir başlık görüntüleyebilir.

Ublox uydu izleyicisi, çok doğru düzeltmeler elde etmek için hata iptali kullandığından özellikle akıllıdır - yaklaşık 40 mm'lik nihai bir nominal toplam sapma. Modül, biri "rover", Weedinator ile birlikte hareket eden ve diğeri, "taban", açıkta bir yerde bir direğe sabitlenen özdeş bir çiftten oluşur. Hata giderme, zaman içinde büyük miktarda numune kullanarak gerçekten doğru bir düzeltmeye ulaşabilen bazın elde etmesiyle sağlanır. Daha sonra değişen atmosferik koşulları telafi etmek için bu numunelerin ortalaması alınır. Cihaz hareket ediyor olsaydı, kesinlikle herhangi bir ortalama elde edemeyecekti ve değişen bir ortamın insafına kalacaktı. Ancak, statik ve hareketli bir cihaz birlikte çalışırsa, birbirleriyle iletişim kurabildikleri sürece, her ikisinden de yararlanabilirler. Herhangi bir zamanda, temel birim hala bir hataya sahiptir, ancak aynı zamanda önceden hesaplanmış süper hassas bir düzeltmeye sahiptir, böylece bir koordinat setini diğerinden çıkararak gerçek hatayı hesaplayabilir. Daha sonra hesaplanan hatayı bir radyo bağlantısı aracılığıyla geziciye gönderir, bu da hatayı kendi koordinatlarına ekler ve hey presto, hata iptalimiz var! Pratik anlamda, hata iptali, 3 metre ile 40 mm toplam sapma arasındaki farkı yaratır.

Komple sistem karmaşık görünüyor, ancak aslında iletken olmayan bir yüzey üzerinde gevşek veya tüm modüllerin güvenli bir şekilde cıvatalanmasını sağlayan tasarladığım PCB'yi kullanarak inşa edilmesi oldukça kolay. Gelecekteki geliştirme, PCB üzerine inşa edilmiştir ve direksiyon, ileri hareket ve yerleşik bir CNC makinesi için motorları kontrol etmek için çok sayıda Arduino'nun dahil edilmesine izin verir. Navigasyon, renkli nesneleri algılamak için kameralar kullanan en az bir nesne tanıma sistemi tarafından da desteklenecektir, örneğin bir tür ızgaraya dikkatlice yerleştirilmiş floresan golf topları - Bu alanı izleyin!

2. Adım: Bileşenler

Bileşenler
Bileşenler
Bileşenler
Bileşenler
Bileşenler
Bileşenler
  • Ublox C94 M8M (Gezi ve Taban) x 2 adet
  • 9DOF Razor IMU MO dijital pusula
  • Fona 800H 2G GPRS hücresel 1946
  • Arduino Ödenmesi
  • Arduino Nano x 2
  • SparkFun Pro Mikro
  • Adafruit 2.2" TFT IL1940C 1480
  • PCB (ekli Gerber dosyalarına bakın) x 2 adet
  • 1206 SMD sıfır ohm dirençleri x 12 of
  • 1206 LED x 24

PCB dosyası 'Design Spark' yazılımı ile açılır.

Adım 3: Modülleri Kablolama

Modülleri Kablolama
Modülleri Kablolama

Bu kolay kısım - özellikle yaptığım PCB ile kolay - sadece yukarıdaki diyagramı takip edin. Seri ve I2C hatlarında bile 3v modülleri 5v'ye bağlamaktan kaçınmak için özen gösterilmelidir.

4. Adım: Kod

kod
kod

Kodun çoğu, verilerin sistemde düzenli bir şekilde hareket etmesini sağlamakla ilgilidir ve çoğu zaman veri formatlarını tamsayılardan kayan değerlere, dizgilere ve karakterlere dönüştürme ihtiyacı vardır, bu çok kafa karıştırıcı olabilir! 'Seri' protokol yalnızca karakterleri işleyecek ve I2C protokolü çok küçük tam sayıları işleyecek, onları karakterlere dönüştürmeyi ve sonra iletim hattının diğer ucunda tam sayılara dönüştürmeyi daha iyi buldum.

Weedinator denetleyicisi temel olarak çok sayıda bireysel Arduino veya 'MCU' içeren 8 bitlik bir sistemdir. 8 bit, gerçek ikili sıfırlar ve birler olarak tanımlandığında şöyle görünebilir: B01100101, şuna eşittir:

(1x2)+(0x2)2+(1x2)3+(0x2)4+(0x2)5+(1x2)6+(1x2)7+(0x2)8 =

Ondalık Basamak Değeri 128 64 32 16 8 4 2 1
İkili Rakam Değeri 0 1 1 0 0 1 0 1

= 101

Ve mümkün olan maksimum değer 255 …. Yani I üzerinden iletebileceğimiz maksimum 'bayt' tamsayı2C, 255'tir ve bu çok sınırlayıcıdır!

Bir Arduino'da I kullanarak bir seferde 32'ye kadar ASCII karakteri veya bayt iletebiliriz.2C çok daha kullanışlıdır ve karakter seti aşağıdaki gibi 7 bit formatında sayılar, harfler ve kontrol karakterlerini içerir:

resim
resim

Neyse ki, Arduino derleyicisi arka planda karakterden ikiliye dönüştürmenin tüm işini yapıyor, ancak yine de veri iletimi için doğru karakter tipini bekliyor ve 'Dizeleri' kabul etmiyor.

Şimdi işlerin kafa karıştırıcı olabileceği zamandır. Karakterler, char tanımı kullanılarak tek karakter olarak veya char[20] kullanılarak 20 karakterlik tek boyutlu bir dizi olarak ifade edilebilir. Arduino String, bir karakter dizisine çok benzer ve kelimenin tam anlamıyla, insan beyni tarafından genellikle 'kelimeler' olarak yorumlanan bir karakter dizisidir.

// 'distanceCharacter' karakterini oluşturur:

Dizi başlatıcı = ""; DistanceString = başlatıcı + DistanceString; int n = mesafeString.length(); for (int aa=0;aa<=n;aa++) { DistanceCharacter[aa] = DistanceString[aa]; }

Yukarıdaki kod, uzun bir karakter dizisini, daha sonra I üzerinden iletilebilecek bir karakter dizisine dönüştürebilir.2C veya seri.

İletim hattının diğer ucunda, veriler aşağıdaki kod kullanılarak tekrar bir diziye dönüştürülebilir:

mesafeDizesi = mesafeDizesi + c; // string = string + karakter

Bir karakter dizisi doğrudan bir tam sayıya dönüştürülemez ve önce dize biçimine girmelidir, ancak aşağıdaki kod bir dizeden bir tam sayıya dönüştürülür:

int sonuç = (distanceString).toInt();

int mesafeMetre = sonuç;

Artık hesaplama yapmak için kullanabileceğimiz bir tamsayıya sahibiz. Kayan noktaların (ondalık basamaklı sayılar) iletim aşamasında tam sayılara dönüştürülmesi ve ardından iki ondalık basamak için 100'e bölünmesi gerekir, örneğin:

kayan mesafeMetres = mesafeMm / 1000;

Son olarak, bir karakter ve tamsayı karışımından bir dize oluşturulabilir, örneğin:

// Verilerin bir karaktere derlendiği yer:

dataString = başlatıcı + "BEAR" + zbearing + "DIST" + zdistance; // 32 karakterle sınırlıdır // Dize = dize + karakterler + tamsayı + karakterler + tamsayı.

Kodun geri kalanı, Arduino kitaplıklarındaki çeşitli örneklerde bulunabilen standart Arduino öğeleridir. 'Örnekler >>>> Strings' örneğine ve 'wire' kitaplık örneklerine bakın.

Bir şamandıra iletmek ve almak için tüm süreç:

Float ➜ Integer ➜ String ➜ Karakter dizisine dönüştürün ….. sonra Master ➜➜'dan TRANSMIT karakter dizisini dönüştürün

➜➜ Slave'de bireysel karakterleri ALIN …. sonra Karakter ➜ String ➜ Integer ➜ Float'ı dönüştürün

Adım 5: Veritabanı ve Web Sayfası

Veritabanı ve Web Sayfası
Veritabanı ve Web Sayfası
Veritabanı ve Web Sayfası
Veritabanı ve Web Sayfası

Yukarıda veritabanı yapısı gösterilmektedir ve php ve html kod dosyaları eklenmiştir. Kullanıcı adları, veritabanı adları, tablo adları ve parolalar güvenlik için boş bırakılmıştır.

Adım 6: Navigasyon Testleri

Navigasyon Testleri
Navigasyon Testleri
Navigasyon Testleri
Navigasyon Testleri
Navigasyon Testleri
Navigasyon Testleri

I2C aracılığıyla Weedinator kontrol panosuna bir veri kaydedici bağlamayı başardım ve Ublox M8M uydu konumlandırma performansı hakkında bir fikir edindim:

Yeşil grafikle gösterilen 'Soğuk Başlatma'da, modül 'normal' bir GPS'e oldukça benzeyen birçok hatayla başladı ve yaklaşık 2 saat sonra gezici arasında bir RTK düzeltmesi alana kadar yavaş yavaş hata azaldı. ve taban (kırmızı çarpı ile gösterilir). Bu 2 saatlik süre boyunca, temel modül sürekli olarak enlem ve boylam için bir ortalama değer oluşturur ve günceller ve önceden programlanmış zaman aralığı iyi bir düzeltmeye sahip olduğuna karar verdikten sonra. Sonraki 2 grafik, bir 'Sıcak başlatma'dan sonraki davranışı gösterir. ' temel modülün zaten iyi bir ortalama hesapladığı yer. En üstteki grafik 200 dakikalık bir sürenin üzerindedir ve bazen düzeltme kaybolur ve gezici Weedinator'a düzeltmenin geçici olarak güvenilmez hale geldiğine dair bir NMEA mesajı gönderir.

Alttaki mavi grafik, üstteki grafikteki kırmızı kutuya bir 'yakınlaştırma'dır ve Ublox performansının iyi bir temsili anlık görüntüsünü gösterir, toplam sapma 40 mm'dir, bu da Weedinator'ı bulunduğu yere yönlendirmek için yeterince iyidir., ama muhtemelen tek tek bitkilerin etrafındaki toprağı yetiştirmek için yeterince iyi değil mi?

Üçüncü grafik, Rover ve Base ile 100 metre arayla toplanan verileri gösterir - Ek bir hata tespit edilmedi - ayırma mesafesi doğruluk açısından hiçbir fark yaratmadı.

7. Adım: Son

Önerilen: