İçindekiler:
- Adım 1: Projenin İşlevselliğini Tasarlamak
- Adım 2: Kurulum ve Kablo Şeması
- Adım 3: Bileşenleri ve Temel Kodu Test Etme
- Adım 4: MPU Kalibrasyonu
- Adım 5: Son Kod
Video: Dijital Pusula ve Yön Bulucu: 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:16
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
İ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ı
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
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 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:
Dijital Kumpas Nasıl Yıkılır ve Dijital Kumpas Nasıl Çalışır: 4 Adım
Dijital Kumpas Nasıl Yıkılır ve Dijital Kumpas Nasıl Çalışır: Birçok kişi ölçüm için kumpas kullanmayı bilir. Bu eğitim size bir dijital kumpasın nasıl parçalanacağını ve dijital kumpasın nasıl çalıştığının bir açıklamasını öğretecektir
Arduino ve HMC5883L Manyetometre Kullanan Dijital Pusula: 6 Adım
Arduino ve HMC5883L Manyetometre Kullanan Dijital Pusula: Merhaba arkadaşlar, Bu sensör coğrafi Kuzey, Güney, Doğu ve Batı'yı gösterebilir, biz insanlar da gerektiğinde kullanabiliriz. Yani. Bu yazıda Manyetometre sensörünün nasıl çalıştığını ve bir mikrokontrol ile nasıl arayüzleneceğini anlamaya çalışalım
GY511 Modülü Arduino İle Nasıl Kullanılır [Dijital Pusula Yapın]: 11 Adım
GY511 Modülü Arduino İle Nasıl Kullanılır [Dijital Pusula Yap]: Genel Bakış Bazı elektronik projelerinde her an coğrafi konumu bilmemiz ve buna göre belirli bir işlem yapmamız gerekir. Bu eğitimde, dijital bir pusula yapmak için LSM303DLHC GY-511 pusula modülünü Arduino ile nasıl kullanacağınızı öğreneceksiniz
Dijital Saplama Bulucu: 6 Adım (Resimlerle)
Dijital Saplama Bulucu: Saplama Bulucu basit bir konsepttir. İki Kapasitif sensör: biri bir darbe dalgası gönderir, ikincisi iki plaka arasındaki malzeme boyunca voltaj düşüşünü alır ve ölçer
Arduino Dijital Pusula Projesi: 3 Adım
Arduino Dijital Pusula Projesi: Merhaba! Bu talimatta, Arduino ve İşleme IDE'sini kullanarak nasıl Dijital Pusula yapabileceğinizi göreceksiniz. Bu oldukça basit ama ilginç ve havalı görünen Arduino Projesi. Bu eğitimin demo örneğini videoda izleyebilirsiniz