İçindekiler:

Paspaslı Trafik Raporu Kontrolü(NL): 6 Adım
Paspaslı Trafik Raporu Kontrolü(NL): 6 Adım

Video: Paspaslı Trafik Raporu Kontrolü(NL): 6 Adım

Video: Paspaslı Trafik Raporu Kontrolü(NL): 6 Adım
Video: My FIRST DAY in Bangkok was ABSOLUTE MADNESS 🇹🇭 2024, Temmuz
Anonim
Paspaslı Trafik Raporu Kontrolü(NL)
Paspaslı Trafik Raporu Kontrolü(NL)

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

Tetikleyiciyi yükleyin
Tetikleyiciyi yükleyin
Tetikleyiciyi yükleyin
Tetikleyiciyi yükleyin
Tetikleyiciyi yükleyin
Tetikleyiciyi yükleyin

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: