İçindekiler:

Dijital Pusula ve Yön Bulucu: 6 Adım
Dijital Pusula ve Yön Bulucu: 6 Adım

Video: Dijital Pusula ve Yön Bulucu: 6 Adım

Video: Dijital Pusula ve Yön Bulucu: 6 Adım
Video: 2022'de Dijital Pazarlama Ajansınızı nasıl kurarsınız? Adım Adım Dijital Pazarlama Ajansı Kurun 2024, Temmuz
Anonim
Dijital Pusula ve Yön Bulucu
Dijital Pusula ve Yön Bulucu

Yazarlar:

Cullan Whelan

Andrew Luft

Blake Johnson

Teşekkür:

Kaliforniya Denizcilik Akademisi

Evan Chang Siu

Tanıtım:

Bu projenin temeli, rota takibine sahip dijital bir pusuladır. Bu, kullanıcının dijital bir aparat kullanarak uzun mesafeler boyunca bir rotayı takip etmesini sağlar. Halk dilinde bir yön, pusula ile gösterildiği gibi, kuzeyden saat yönünde ölçülen ve sıfır derece olarak kabul edilen bir açıdır. Cihazın iki ana işlevi vardır: birincisi, cihazın mevcut yönünü bir dijital ekran referansında görüntülemek ve ikincisi, kullanıcının üst kısmındaki bir LED halkasında görüntülenecek olan, kullanıcı tarafından istenen bir başlığı girme yeteneğidir. pusula konut. Kullanıcı daha sonra cihazın yanan LED ile ilgili yönünü ayarlar. Cihazın yönü değiştikçe LED merkez LED'e gidecek ve böylece doğru istikametin kurulduğunu gösterecektir.

Gereçler:

- DIYmall 6M GPS Modülü

- HiLetgo MPU9250/6500 9 Eksenli 9 DOF 16 Bit

- Adafruit NeoPiksel Yüzük 16

- MakerFocus 4 adet 3.7V Lityum Şarj Edilebilir Pil

- ELEGOO MEGA 2560 R3 Kartı

- Adafruit Mini Lipo w/Mini-B USB Jack - USB LiIon/LiPoly şarj cihazı - v1

- MicroSD Soketli Dokunmatik Ekranlı Breakout Board ile 2,8 TFT LCD

Adım 1: Projenin İşlevselliğini Tasarlamak

Projenin İşlevselliğinin Tasarlanması
Projenin İşlevselliğinin Tasarlanması

İlk adım, mantığı ve son operasyonel işlevselliği anlamaktır. Bu mantık şeması, üç cihaz durumunu ve iki sensör durumunu gösterir.

Durum 1: Yükleme Durumu

Yükleme durumu, Arduino Mega'nın başlatıldığında iki sensörden veri geri almasına izin vermek için kullanılır. Cihaz ekranda yükleme görüntüleyecek, ekrandaki tüm sayı değerlerini silecek ve NeoPixel halkasındaki LED'ler daire şeklinde yanacaktır.

Durum 2: Pusula Modu

Bu durumda cihaz bir dijital pusula gibi davranacaktır. NeoPixel halkası, cihazın yönüne göre Kuzey yönünü belirtmek için yanacaktır. Gerçek cihaz başlığı, cihazın Enlem ve Boylamıyla birlikte LCD ekranda görüntülenecektir. Kullanıcı, Durum 3'te görüntülenecek kullanıcı başlığına da bu durum içinde girebilecektir.

Durum 3: Yön İzleme Modu

Bu durumda cihaz, kullanıcının istediği yöne yerleşmesine yardımcı olacaktır. Cihaz şimdi enlem ve boylam verileriyle birlikte LCD ekranda cihazların rotasını ve kullanıcıların rotasını gösterecektir. NeoPixel halkası artık kullanıcıların cihaz yönüne göre ilerlediğini göstermek için yanacaktır.

Hem Durum 2 hem de Durum 3 içinde iki sensör durumu vardır, bu sensör durumları cihazın çalışma durumuna bağlı olarak cihazın en doğru verileri sağlayan sensörden veri çekmesine izin verir.

Sensör Durumu 1: MPU

Cihaz hareket etmiyorsa, cihaz hareket etmediğinde en doğru veri olduğu için yön verileri MPU'dan çekilecektir.

Sensör Durumu 2: GPS

Cihaz hareket ediyorsa, bu durumda en doğru veri olduğu için rota verileri GPS çipinden alınacaktır.

Cihaz, değişen ünitenin kullanım koşullarını hesaba katmak için herhangi bir zamanda bunlar arasında sensör durumları arasında geçiş yapabilir. Cihazda kullanılan iki sensörün her ikisi de sağladıkları verilerin doğruluğunu etkileyen koşullara sahip olduğundan, bu cihazın çalışması için önemlidir. MPU söz konusu olduğunda, çip, binalardaki arabaların ve metal yapı malzemelerinin neden olduğu yerel manyetik alanlardan kolaylıkla etkilenebilir. Böylece aynı etkilerden etkilenmeyen çok daha doğru bir rota sağlayabilen bir GPS çipi kullanılır. Bununla birlikte, GPS, enlem ve boylam verilerindeki değişikliği kullanarak yönü hesapladığı için yalnızca hareket halindeyken yön verileri sağlayabilir. Bu nedenle çipler birbirini tamamlar ve iki sensör durumunu kullanarak en doğru ve güvenilir cihaz işlevselliğini sağlar.

Adım 2: Kurulum ve Kablo Şeması

Kurulum ve Kablo Şeması
Kurulum ve Kablo Şeması
Kurulum ve Kablo Şeması
Kurulum ve Kablo Şeması
Kurulum ve Kablo Şeması
Kurulum ve Kablo Şeması

Proje, yukarıdaki panoya benzer Arduino Mega klon kartı kullanmaktadır. Projedeki tüm bileşenler bu panoya bağlanacaktır. Yukarıda, bu proje için bileşenlerin nasıl kablolanacağına dair ayrıntılı diyagramlar bulunmaktadır. Butonların detaylı bir devresi yoktur, çünkü bunlar birçok şekilde kurulabilir. Bu projede, atanmış pinine 3 voltluk bir sinyal göndermek için 100K'lık bir çekme direnci ve basit bir düğme kullanıyorlar.

Adım 3: Bileşenleri ve Temel Kodu Test Etme

Proje, daha önce açıklandığı gibi hem MPU hem de GPS çipinden veri çekecektir. Ekli, parçaların işlevselliğini doğrulamak için MPU, GPS ve MPU'dan gelen verilerin test edilmesini sağlayan ekranlı üç koddur. Kod her çip için ayrı olduğundan ve nihai kodda öngörülemeyen hatalara neden olma korkusu olmadan herhangi bir sorun çözülebildiğinden, bileşenlerin bu aşamada çalışır hale getirilmesi önemlidir.

Gerekli Kütüphaneler:

Adafruit_ILI9341_Albert.h

SPI.h

Adafruit_GFX.h

Adafruit_ILI9341.h

MinikGPS++.h

Adafruit_NeoPixel.h

MPU9250.h

Bunların hepsine yukarıdaki başlıklarda arama yaparak ulaşabilirsiniz. Bu kitaplıkların birden fazla kaynaktan çok sayıda kopyası olduğundan ve yalnızca orijinallere bağlantı verme topluluk standardına bağlı kalarak bağlantı göndermeyeceğim, bunları kendiniz bulmanızı sağlayacağım.

Adım 4: MPU Kalibrasyonu

MPU Kalibrasyonu
MPU Kalibrasyonu

Devlet 2 ve Devlet 3'te MPU aracılığıyla bulunan yön, dört çeyreğe bölünmüştür. Bu gerekliydi çünkü kalibrasyon yöntemimiz manyetometreden x ve y eksenleri boyunca minimum ve maksimum büyüklükleri bulmayı gerektiriyordu. Bu, cihazı, Dünya'nınki dışındaki herhangi bir önemli elektromanyetik alandan arınmış, üç ekseni etrafında rastgele döndürerek yapıldı. Daha sonra x ve y ekseni boyunca minimum ve maksimum değerleri aldık ve negatif bir ile bir arasındaki büyüklükleri sınırlamak için bunları bir ölçekleme denklemine yerleştirdik. Yukarıdaki şekilde, BigX ve BigY, sırasıyla x ve y ekseni boyunca manyetometre verilerinin maksimum değerleridir; LittleX ve LittleY, sırasıyla x ve y ekseni boyunca manyetometre verilerinin minimum değerleridir, IMU.getMagX_uT() ve IMU.getMagY_uT(), sırasıyla x ve y ekseni boyunca herhangi bir zamanda manyetometreden çekilen değerlerdir ve Mx ve My, yönü hesaplamak için kullanılan yeni ölçeklenmiş değerlerdir.

Adım 5: Son Kod

Son Kod
Son Kod
Son Kod
Son Kod
Son Kod
Son Kod
Son Kod
Son Kod

Son adım, son kodu oluşturmaktır. Projelerin nihai kodunun bir kopyasını ekledim. Kodun içinde gezinmeye yardımcı olmak için notlar içinde yapılmıştır. Bu bölümün en büyük zorluğu kadranların doğru çalışmasını sağlamaktı. Çeyreklerin uygulanmasının, tahmin edebileceğimizden daha sıkıcı ve mantığa meydan okuyan olduğu ortaya çıktı. Başlangıçta temel bir arctan (My/Mx) uyguladık ve ardından Arduino varsayılan olarak radyan olarak çıktı verdiği için radyandan dereceye dönüştürdük. Ancak, bunun çalıştığı tek kadran 90 dereceden 180 dereceye kadardı, bu da bize negatif bir çıktı verdi ve sonunda Kadran III oldu. Bunun çözümü, hala doğru bir şekilde arttığı için mutlak değeri almaktı. Durum 2'de doğru NeoPixel LED'i yakmak için bu değer daha sonra 360'tan çıkarıldı ve durum 3'te başlığın kullanıcının giriş başlığından daha büyük veya daha küçük olmasına bağlı olarak benzer bir matematiksel işlem kullanıldı, her ikisi de yukarıdaki kod. Yukarıdaki şekillerde Başlık, cihaz yönü ile durum 2 durumunda kuzeyden ve kullanıcı başlığından sapma arasındaki farka göre yanacak NeoPixel ışığına karşılık gelir. Bu durumda, 90 ila 180 derece, Kadran III'e karşılık gelir. Her iki durumda da tft.print, ekranın aygıt yönünü kuzeyden okumasına neden olur.

Diğer üç kadran için, arctan(My/Mx) uygulaması, cihaz döndürüldükçe artışın tersine çevrilmesine yol açtı, yani yön açısı, yukarı doğru sayması gerektiğinde geriye doğru sayacaktı ve bunun tersi de oldu. Bu problemin çözümü arktanjantı arktan(Mx/My) formuna çevirmekti. Bu, artım inversiyonunu çözerken, kadranların devreye girdiği doğru cihaz başlığını vermedi. Bunun basit çözümü, karşılık gelen çeyreğe dayalı bir kayma eklemekti. Bu, her çeyreğin 2. ve 3. durumlarından bir kez daha kod parçaları olan aşağıdaki şekillerde görülebilir.

İlk if ifadesi, MPU denklemi ile hesaplanan başlık kullanıcı başlığından büyükse gerçekleştirilir. Bu durumda cihaz başlığına kullanıcının girdi başlığı eklenir ve 360'dan karşılık gelen değer çıkarılır. Else ifadesi yapılırsa MPU başlık denklemi kullanıcının girdi başlığından çıkarılır. Bu koşullar, yalnızca NeoPixel için doğru bir değer elde etmek için değil, aynı zamanda 0 ila 359 derece arasındaki kabul edilebilir aralığın dışında bir değer elde etmekten kaçınmak için uygulandı.

Önerilen: