İçindekiler:
- 1. Adım: NodeMCU'yu Wi-Fi'ye bağlayın
- Adım 2: ANWB.nl'den HTTPS'den Veri İsteyin
- 3. Adım: Verileri Kullanılabilir Bilgilere Dönüştürün
- 4. Adım: Tetikleyiciyi Kurun
- Adım 5: Tasarım Geri Bildirimi
- Adım 6: Kodu Çalıştırın
Video: Paspaslı Trafik Raporu Kontrolü(NL): 6 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Bu talimatta, Hollanda karayollarının trafik raporlarını kontrol edecek bir paspasın nasıl yapıldığını anlatacağım. Paspasınızla dışarı çıktığınızda ve rotanızda trafik sıkışıklığı olduğunda paspas kırmızı renge dönecektir. Trafik sıkışıklığı olmadığında paspas yeşile döner.
Bir NodeMCU 1.0 (ESP0-12E Modülü) üzerinde çalışacağım. Bu projenin kodu diğer cihazlarda da çalışabilir (örneğin Arduino kartları). Bu proje, trafik raporları için Hollandalı bir kaynak olan ANWB'ye dayanmaktadır.
Bu proje için ihtiyacımız olan:
- NodeMCU - Atlama telleri - LED ışık veya şerit - Analog sensör (Alüminyum folyo, Sünger) - Wi-Fi bağlantısı - Paspas
Atmamız gereken adımlar:
1. NodeMCu'yu Wi-Fi'ye bağlayın 2. ANWB.nl'den HTTPS aracılığıyla veri isteyin 3. Verileri kullanılabilir Bilgilere dönüştürün 4. Tetikleyiciyi kurun 5. Geri bildirim tasarlayın
1. Adım: NodeMCU'yu Wi-Fi'ye bağlayın
Bu adım, cihazın internete bağlı olup olmadığını görmek için başarılı bir HTTPSRequest'in nasıl yapılacağını gösterecektir.
İlk olarak, Arduino IDE'ye ESP8266 kütüphanesini kurun. ESP8266 > HTTPSRequest örneklerinden açın.
Aşağıda gösterildiği gibi, kodunuzun üst kısmına Wi-Fi kimlik bilgilerinizi girin:
const char* ssid = "SİZİN_SSID'İNİZ";
const char* şifre = "YOUR_PASS";
Kodu cihazınıza yükleyin ve NodeMCU'nun internete bağlanıp bağlanmadığını kontrol edin. HTTPSRequest örneği, bilgi almak için varsayılan olarak Github'u kullanır. HTTPSRequest başarılı olduğunda, seri monitörde Github verilerini alırsınız.
Adım 2: ANWB.nl'den HTTPS'den Veri İsteyin
Bu ikinci adımda, veri kaynağını varsayılandan bu proje için gereken kaynağa değiştirirsiniz: ANWB.nl.
Kodunuzun en üstünde, char* ana bilgisayarını www.anwb.nl (veya verilerinizi almak istediğiniz başka bir kaynak) olarak değiştirin:
const char* ana bilgisayar = "www.anwb.nl";!! Başka bir kaynak kullanırsanız, 3. adım benim kodumdan farklı olacaktır. 3. Adım, kullanılabilir bilgileri almak için özel kodlama gerektirir!
Ardından, işlev kurulumundaki dize url'sini, bilgilerin alındığı yol olan "/feeds/gethf" olarak değiştirin:
String url = "/feeds/gethf";!! Başka bir kaynak kullanıyorsanız, kaynağınıza giden yolu kullanın!
Kodu yüklediğinizde, www.anwb.nl/feeds/gethf adresinden tüm verilerle birlikte bir yanıt almalısınız. Bu kod, line adlı bir dizgeye kaydedilir.
3. Adım: Verileri Kullanılabilir Bilgilere Dönüştürün
Şimdiye kadar, kod yalnızca NodeMCU başlatıldığında veya sıfırlandığında çalıştı, çünkü tüm kod kurulum işlevindeydi. Tetikleyiciyi kodu sürekli çalıştıracak şekilde ayarlamak için HTTPS isteğini çalıştıran kodun konumunu değiştirmeniz gerekir. Döngü işlevinin altına başka bir işlev eklersiniz. Ben buna void ExtractData adını verdim:
özüveri(){
}
Kodun bir kısmını kurulum işlevinden ExtractData()'ya kopyalayın. Kurulum işlevinin sonuna kadar aşağıdaki satırla başlayın:
if (!client.connect(host, Kod artık yeni işlevinizdedir, bu nedenle kopyalanan kodu kurulum işlevinden kaldırın.
Ardından, döngü işlevinde ExtractData işlevini çağırın ve nodeMCU'ya dinlenme süresi vermek için biraz gecikme ekleyin:
boşluk döngüsü(){
özüveri(); gecikme(30000); // bu daha sonra bir analog sensörümüz olduğunda kaldırılacaktır }
Aldığınız veriler bir dizgede saklandığından ve bu dizgenin sadece bir kısmına ihtiyaç duyulduğundan, birkaç for döngüsü yazmanız gerekir.
İlk olarak, 'yol' kelimesinin tüm konumlarını kontrol edin. 'Yol' kelimesinden sonra yolun adı gelir (A1, A2, vb.).
For döngülerini yazmaya başlamadan önce, kullanacağınız bazı değişkenleri tanımlamanız gerekir:
int noOfPos = 0;
boolean hasRunOnce = false; int = 0; int roadArray[20];
Şimdi bazı döngüler yazmanın zamanı geldi. ExtractData işlevinin altına for döngülerini yazdım. Onu ayrı işlevlere bölmeye çalıştım ama çalıştıramadım.
1 numaralı döngü için, dize satırındaki yol kelimesinin konumlarını bulun:
for(int i = 0; i < line.length(); i++){ int pos = line.indexOf("yol\":", from); roadArray[noOfPos] = pos; noOfPos += 1; from = pos + 1; if(hasRunOnce == true && pos == line.indexOf("yol\":")){ i = line.length(); } hasRunOnce = true; }
Ardından, yukarıdan for döngüsünün konumlarını kullanarak hangi yollarda trafik sıkışıklığı olduğunu kontrol edin. Yol adlarının konumu her zaman aynıdır ve 7 karakterle başlar ve yol kelimesinden sonra 10 karakterle biter.
Şimdi bir sonraki for döngüsünde doldurulacak olan nameOfRoadArray dizisini tanımlıyoruz:
Dize nameOfRoadArray[20];
For loop No. 2: for loop no girişi ile yolların tüm isimlerini bulun. 1
for(int k = 0; k < 20; k++){ int pos = roadArray[k]; int positionOfRoadName = konum + 7; int endOfPositionOfRoadName = konum + 10; nameOfRoadArray[k] = line.substring(positionOfRoadName, endOfPositionOfRoadName); }
nameOfRoudArray dizisi, sinyal verilen tüm trafik sıkışıklıkları ile doldurulmalıdır.
Ardından, yolunuzun trafik sıkışıklığı olan yollarda olup olmadığını kontrol edeceksiniz. Verilerdeki yolları almak için nameOfRoadArray'i yazdırın. Bunu Serial.println(nameOfRoadArray[k]); dosyasını ekleyerek yapın. 2. for döngüsüne şöyle:
for(int k = 0; k < 20; k++){ int pos = roadArray[k]; int positionOfRoadName = konum + 7; int endOfPositionOfRoadName = konum + 10; nameOfRoadArray[k] = line.substring(positionOfRoadName, endOfPositionOfRoadName); Serial.println(nameOfRoadArray[k]); }
Doğruysa, Seri monitörde trafik sıkışıklığı olan tüm yolları göreceksiniz.
Son For döngüsünü yazmadan önce, bir boolean'ı global bir değişken olarak tanımlamanız gerekir. TrafficJam olarak adlandırılan boole değeri varsayılan olarak yanlıştır ve bir trafik sıkışıklığı için ExtractData işlevinin true değerini döndürmesi durumunda değişecektir. Aşağıdaki kod.ino dosyasının üstüne gelir:
boolean TrafficJam = false;
3 numaralı döngü için, yolun, bu durumda A1'in trafik sıkışıklığı listesinde olup olmadığını kontrol edin.
for(int l=0; l < 20; l++){ if(nameOfRoadArray[l] == "A1\""){ //A1'i lehinize göre değiştirin TrafficJam = true; }
Seri monitörde trafik sıkışması yazdırırsanız, A1'de trafik sıkışıklığı olup olmadığını bilirsiniz.
Bu kodu ExtractData işlevinin en altına koyun:
Serial.println(trafik Sıkışıklığı); // trafik sıkışıklığı olup olmadığına bakın
Bu bilgilerle, 5. adımda sistemin geri bildirimi üzerinde daha fazla çalışacağız.
4. Adım: Tetikleyiciyi Kurun
Artık verileri kaynaktan başarılı bir şekilde alabileceğimize göre, nodeMCU'yu ExtractData işlevini çalıştırması için tetikleyecek bir sensör oluşturmanın zamanı geldi. Paspasımdan analog bir sensör yapmayı seçtim. Tetiği başka bir sensör kullanarak değiştirebilirsiniz.
Analog sensör oluşturma
2 adet alüminyum folyo, iki adet jumper teli ve bir sünger kullandım.
Süngerin içine bir delik açın, alüminyum folyoların temas edeceği yer burasıdır. Süngerin her iki tarafına alüminyum folyo yapıştırın. Atlama tellerini alüminyum folyoya bağlayın. Jumper kablolarını nodeMCU'ya bağlayın. Bir tarafı A0 pinine ve diğer tarafı V3 pinine. Paspasınızın altına süngeri koyun ve paspasınızı bir sensöre dönüştürdünüz. Mükemmel!
Paspasın üzerinde birinin durup durmadığını görmek için sensörden değeri okuyacak kod:
int sensorValue = analogRead(A0);
if (sensorValue == 1024){ extractData(); }
Alüminyum folyo temas ettiğinde (birisi matın üzerinde durduğunda), sensorValue 1024'tür. Bu, ExtractData() işlevinin tetiklenmesiyle sonuçlanır. Ve bu tam olarak sistemin yapmasını istediğimiz şey.
Adım 5: Tasarım Geri Bildirimi
Kullanıcıya geri bildirim vermek için bir LED şerit kullandım. Trafik sıkışıklığı olduğunda, ışık kırmızıya dönecektir. Yol gitmek için iyi olduğunda, yeşile dönecek. LED şeridimi kontrol etmek için adafruit neopixel kitaplığını kullandım.
LED şeridinin tanımlandığından emin olmak için bu kodu dosyanızın üstüne yazın:
#Dahil etmek
#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel piksel = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
Kurulum işlevine bir sonraki kodu yazın:
//neopiksel
piksel.begin(); piksel.göster();
Ve döngü işlevinde aşağıdaki kod:
if (trafficJam == doğru){
for(int i; i < PIXEL_COUNT; i++){ piksel.setPixelColor(i, 255, 0, 0); // kırmızı pikseller.show(); gecikme(200); } } else{ for(int i; i < PIXEL_COUNT; i++){ piksel.setPixelColor(i, 0, 255, 0); // yeşil piksel.show(); gecikme(200); }
Yukarıdaki kodda bir if/else işlevi vardır. ExtractData işlevi bir trafik sıkışıklığının varlığını döndürdüğünde, LED şeridi kırmızıya döner. Değilse, LED şerit yeşile dönecektir.
Adım 6: Kodu Çalıştırın
Şimdi kodun tamamını çalıştırırsak, sensör ve ışık çalışmalıdır. Paspasın üzerinde durduğunuzda sensör bağlanacak ve ExtractData işlevi çalışacaktır. Yol adları dizisinde aradığımız yol mevcut olduğunda, LED şerit kırmızıya dönerek trafik sıkışıklığını bildirir. Dizide değilse, LED şeridi yeşile döner ve gitmeye hazır olduğunuzu bilirsiniz!
İyi yolculuklar ve okuduğunuz için teşekkürler. Umarım biraz ilham veya bilgi bulmuşsunuzdur. Geri bildiriminiz varsa, yanıtlamaktan çekinmeyin!
Önerilen:
Excel Periyodik Raporu: 6 Adım
Excel Periyodik Raporu: Excel 2010'daki periyodik tüketim raporları için ipuçlarım aşağıdadır. Aşağıdaki eğitim videosunda, bu rapor bize haftalık, aylık, üç aylık periyotlara göre bir ton bitmiş ürün başına spesifik elektrik, su, oksijen, azot tüketimini anlatıyor.
Raspberry Pi Kullanarak Covid Canlı Raporu: 6 Adım
Raspberry Pi Kullanarak Covid Canlı Raporu: Bildiğimiz gibi tüm dünya COVID-19 pandemisinden etkileniyor ve neredeyse herkes evden çalışıyor. Teknik becerilerimizi geliştirmek veya bazı iyi Pythonic komut dosyaları yazmak için bu süreyi hepimiz en iyi şekilde kullanmalıyız. Basit bir Python görelim
Butonlar, Raspberry Pi ve Scratch ile Parlaklık Kontrolü PWM Tabanlı LED Kontrolü: 8 Adım (Resimlerle)
Basmalı Düğmeler, Raspberry Pi ve Scratch Kullanarak Parlaklık Kontrolü PWM Tabanlı LED Kontrolü: Öğrencilerime PWM'nin nasıl çalıştığını açıklamanın bir yolunu bulmaya çalışıyordum, bu yüzden kendime 2 basmalı düğme kullanarak bir LED'in parlaklığını kontrol etmeye çalışma görevi verdim - bir düğme bir LED'in parlaklığını arttırır ve diğeri onu karartır. Programlamak için
ThingSpeak MQTT ve IFTTT Uygulamalarını Kullanan Hava Durumu Raporu: 8 Adım
ThingSpeak MQTT ve IFTTT Uygulamalarını Kullanan Hava Durumu Raporu: Giriş E-posta bildirimi olarak günlük hava durumu raporları sağlayan bulut tabanlı bir hava durumu uygulaması. Bu web Uygulaması, SHT25 ve Adafruit Huzzah ESP8266 kullanarak Sıcaklık ve Nemi ölçer. Bize Gerçek Zamanlı Sıcaklık ve Nem sağlar
SMART MAKE HATC - 4x RTL-SDR (50$) ile Ev Yapımı Hava Trafik Kontrolü: 7 Adım
SMART MAKE HATC - 4x RTL-SDR (50$) ile Ev Yapımı Hava Trafik Kontrolü: Düşük maliyetli HATC kavramının kanıtı - Ev Yapımı Hava Trafik KontrolüAşağıda, hava trafiği alımı hakkında basit bir bilgi koleksiyonu, kullanılacak bazı yazılımların bir bağlantısı ve konsept donanım sisteminin kanıtı için bir teklif