Isi kandungan:

Pemeriksaan Laporan Trafik (NL) Dengan Keset: 6 Langkah
Pemeriksaan Laporan Trafik (NL) Dengan Keset: 6 Langkah

Video: Pemeriksaan Laporan Trafik (NL) Dengan Keset: 6 Langkah

Video: Pemeriksaan Laporan Trafik (NL) Dengan Keset: 6 Langkah
Video: English Year 6:Road Safety Campaign. 2024, Julai
Anonim
Pemeriksaan Laporan Trafik (NL) Bersama Keset
Pemeriksaan Laporan Trafik (NL) Bersama Keset

Dalam arahan ini saya akan menerangkan bagaimana membina doormat yang akan memeriksa laporan lalu lintas lebuh raya Belanda. Sebaik sahaja anda melangkah keluar di pintu keset anda dan terdapat kesesakan lalu lintas di laluan anda, tikar akan berubah menjadi warna merah. Apabila tidak ada kesesakan lalu lintas, tikar akan bertukar menjadi hijau.

Saya akan mengusahakan NodeMCU 1.0 (Modul ESP0-12E). Kod untuk projek ini boleh digunakan pada peranti lain juga (mis. Papan Arduino). Projek ini berdasarkan sumber Belanda untuk laporan lalu lintas, ANWB.

Apa yang kita perlukan untuk projek ini:

- NodeMCU - Kabel pelompat - Lampu LED atau jalur - Sensor analog (Aluminiuim foil, Sponge) - Sambungan Wi-Fi - Keset

Langkah-langkah yang harus kita ambil:

1. Sambungkan NodeMCu ke Wi-Fi 2. Minta data melalui HTTPS dari ANWB.nl 3. Ubah data menjadi Maklumat yang boleh digunakan 4. Pasang pencetus 5. Maklum balas reka bentuk

Langkah 1: Sambungkan NodeMCU ke Wi-Fi

Langkah ini akan menunjukkan cara melakukan HTTPSRequest yang berjaya untuk melihat sama ada peranti tersebut disambungkan ke internet.

Pertama, pasang perpustakaan ESP8266 di Arduino IDE. Buka dari contoh ESP8266>

Isi kelayakan Wi-Fi anda di bahagian atas kod anda, seperti yang ditunjukkan di bawah:

const char * ssid = "YOUR_SSID";

const char * kata laluan = "YOUR_PASS";

Muat naik kod ke peranti anda dan periksa sama ada NodeMCU menyambung ke internet. Contoh HTTPSRequest menggunakan Github sebagai lalai untuk mendapatkan maklumat dari. Apabila HTTPSRequest berjaya, anda akan menerima data Github di monitor bersiri.

Langkah 2: Minta Data Dari HTTPS Dari ANWB.nl

Pada langkah kedua ini, anda menukar sumber data dari lalai ke sumber yang diperlukan untuk projek ini: ANWB.nl.

Di bahagian atas kod anda, ubah char * host ke www.anwb.nl (atau sumber lain yang anda mahu dapatkan data anda):

const char * host = "www.anwb.nl";!! Sekiranya anda menggunakan sumber lain, langkah 3 akan berbeza dengan kod saya. Langkah 3 memerlukan pengekodan khusus untuk mendapatkan maklumat yang boleh digunakan!

Seterusnya, ubah url string dalam penyediaan fungsi menjadi "/ feeds / gethf", jalan dari mana maklumat diambil:

Rentetan url = "/ feeds / gethf";!! Sekiranya anda menggunakan sumber lain, gunakan jalan ke sumber anda!

Apabila anda memuat naik kod, anda akan mendapat respons dengan semua data dari www.anwb.nl/feeds/gethf. Kod ini disimpan ke dalam rentetan yang disebut garis.

Langkah 3: Ubah Data Menjadi Maklumat Yang Boleh Digunakan

Hingga kini, kod tersebut hanya berjalan ketika NodeMCU dimulakan atau diset semula, kerana semua kod tersebut berada dalam fungsi penyiapan. Untuk menetapkan pemicu untuk menjalankan kod secara berterusan, anda harus mengubah kedudukan kod yang menjalankan permintaan HTTPS. Di bawah fungsi gelung, anda menambah fungsi lain. Saya telah memanggilnya ekstrak batalData:

ekstrakData () {

}

Salin sebahagian kod dari fungsi persediaan ke extractData (). Mulakan dengan baris berikut hingga akhir fungsi persediaan:

jika (! client.connect (host, Kodnya sekarang ada dalam fungsi baru anda, jadi keluarkan kod yang disalin dari fungsi persediaan.

Seterusnya, panggil fungsi extractData dalam fungsi gelung dan tambahkan sedikit kelewatan untuk memberi masa pada nodeMCU untuk berehat:

gelung kosong () {

ekstrakData (); kelewatan (30000); // ini akan dihapus kemudian apabila kita mempunyai sensor analog}

Oleh kerana data yang anda terima disimpan dalam rentetan dan hanya bahagian rentetan ini yang diperlukan, anda harus menulis beberapa gelung.

Pertama, periksa semua kedudukan perkataan 'jalan'. Selepas perkataan 'jalan', nama jalan akan mengikuti (A1, A2, dll.).

Sebelum mula menulis gelung untuk, anda harus menyatakan beberapa pemboleh ubah yang akan anda gunakan:

int noOfPos = 0;

boolean hasRunOnce = false; int dari = 0; int roadArray [20];

Kini tiba masanya untuk menulis beberapa gelung. Saya telah menulis untuk gelung di bahagian bawah fungsi extractData. Saya cuba membahagikannya kepada fungsi yang berasingan, tetapi saya tidak berjaya.

Untuk gelung No. 1: cari kedudukan kata jalan dalam garis rentetan:

untuk (int i = 0; i <line.length (); i ++) {int pos = line.indexOf ("road \": ", from); roadArray [noOfPos] = pos; noOfPos + = 1; dari = pos + 1; if (hasRunOnce == true && pos == line.indexOf ("road \": ")) {i = line.length (); } hasRunOnce = benar; }

Seterusnya, periksa jalan mana yang mengalami kesesakan lalu lintas, dengan menggunakan kedudukan gelung untuk dari atas. Kedudukan nama jalan selalu sama dan bermula 7 aksara dan berakhir 10 aksara selepas kata jalan.

Sekarang kita menentukan nama arrayOfRoadArray, yang akan diisi seterusnya untuk gelung:

String nameOfRoadArray [20];

Untuk gelung No. 2: Cari semua nama jalan dengan input dari gelung no. 1

untuk (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); }

Nama arrayOfRoudArray harus diisi dengan semua kesesakan lalu lintas yang ditandakan.

Seterusnya, anda akan memeriksa sama ada jalan anda berada di deretan jalan dengan kesesakan lalu lintas. Cetak namaOfRoadArray untuk mendapatkan jalan dalam data. Lakukan ini dengan menambahkan Serial.println (nameOfRoadArray [k]); ke dalam gelung ke-2 seperti:

untuk (int k = 0; k <20; k ++) {int pos = roadArray [k]; int positionOfRoadName = pos + 7; int endOfPositionOfRoadName = pos + 10; nameOfRoadArray [k] = line.substring (positionOfRoadName, endOfPositionOfRoadName); Serial.println (nameOfRoadArray [k]); }

Sekiranya betul anda akan melihat semua jalan dengan kesesakan lalu lintas di monitor Serial.

Sebelum menulis loop terakhir, anda mesti menyatakan boolean sebagai pemboleh ubah global. Boolean, yang disebut trafficJam secara lalai adalah salah dan akan berubah jika fungsi ekstrakData akan kembali benar untuk kesesakan lalu lintas. Kod berikut terdapat di atas fail.ino:

boolean trafficJam = false;

Untuk gelung No. 3: Periksa sama ada jalan, dalam kes ini A1, berada dalam senarai kesesakan lalu lintas.

untuk (int l = 0; l <20; l ++) {if (nameOfRoadArray [l] == "A1 \" ") {// ubah A1 ke jalan yang anda gemari trafficJam = true;}

Sekiranya anda mencetak trafficJam di monitor bersiri, anda tahu sama ada terdapat kesesakan lalu lintas di A1 atau tidak.

Letakkan kod ini di bahagian bawah fungsi extractData:

Serial.println (trafficJam); // lihat jika ada kesesakan lalu lintas

Dengan maklumat ini, kami akan berusaha lebih jauh mengenai maklum balas sistem pada langkah 5.

Langkah 4: Pasang Pencetus

Pasang Pencetus
Pasang Pencetus
Pasang Pencetus
Pasang Pencetus
Pasang Pencetus
Pasang Pencetus

Oleh kerana sekarang kita dapat mengambil data dengan berjaya dari sumbernya, sudah waktunya untuk membina sensor yang akan mencetuskan nodeMCU untuk menjalankan fungsi ekstrakData. Saya memilih untuk membuat sensor analog daripada keset saya. Anda boleh menukar pemicu dengan menggunakan sensor lain.

Membina sensor analog

Saya menggunakan 2 keping aluminium foil, dua wayar pelompat dan span.

Bor lubang di span, ini adalah tempat di mana aluminium foil akan bersentuhan. Lap aluminium foil di kedua-dua sisi span. Sambungkan wayar pelompat ke kerajang aluminium. Sambungkan wayar pelompat ke nodeMCU. Satu sisi ke pin A0 dan yang lain ke pin V3. Letakkan span di bawah doormat anda dan anda baru sahaja menukar doormat anda menjadi sensor. Hebat!

Kod untuk membaca nilai dari sensor untuk melihat apakah seseorang berdiri di atas keset:

int sensorValue = analogRead (A0);

jika (sensorValue == 1024) {extractData (); }

Semasa aluminium foil bersentuhan (ketika seseorang berdiri di atas tikar), sensorValue adalah 1024. Ini mengakibatkan fungsi ekstrakData () menembak. Dan itulah yang kita mahu sistem ini lakukan.

Langkah 5: Maklum Balas Reka Bentuk

Saya menggunakan LEDstrip untuk memberi maklum balas kepada pengguna. Apabila berlaku kesesakan lalu lintas, lampu akan berwarna merah. Apabila jalan baik untuk dilalui, ia akan bertukar menjadi hijau. Saya menggunakan perpustakaan neopixel adafruit untuk mengawal jalur LED saya.

Tuliskan kod ini di bahagian atas fail anda untuk memastikan jalur LED ditentukan:

#sertakan

#define PIXEL_PIN D5 #define PIXEL_COUNT 10 #define PIXEL_TYPE NEO_GRB + NEO_KHZ800 Adafruit_NeoPixel pixel = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);

Tuliskan kod seterusnya dalam fungsi persediaan:

// neopixel

piksel.begin (); piksel.show ();

Dan kod berikut dalam fungsi gelung:

jika (trafficJam == benar) {

untuk (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 255, 0, 0); // piksel merah.tunjukkan (); kelewatan (200); }} lain {untuk (int i; i <PIXEL_COUNT; i ++) {pixels.setPixelColor (i, 0, 255, 0); // piksel hijau.tunjukkan (); kelewatan (200); }

Dalam kod di atas terdapat fungsi if / else. Apabila fungsi extractData mengembalikan kehadiran kesesakan lalu lintas LED akan menjadi merah. Sekiranya tidak, Jalur LED akan bertukar menjadi hijau.

Langkah 6: Jalankan Kod

Sekiranya kita menjalankan kod lengkap sekarang, sensor dan cahaya harus berfungsi. Apabila anda berdiri di atas keset, sensor akan bersambung dan fungsi extractData akan berjalan. Apabila terdapat sebilangan nama jalan, jalan yang kita cari ada, jalur LED akan menjadi merah, menandakan kesesakan lalu lintas. Sekiranya tidak berada dalam larik, Jalur LED akan bertukar menjadi hijau dan anda tahu anda boleh pergi!

Selamat menempuh perjalanan dan terima kasih kerana membaca. Saya harap anda mendapat sedikit inspirasi atau maklumat. Sekiranya anda mendapat maklum balas, sila balas!

Disyorkan: