Daftar Isi:

Pemeriksaan Laporan Lalu Lintas (NL) Dengan Keset: 6 Langkah
Pemeriksaan Laporan Lalu Lintas (NL) Dengan Keset: 6 Langkah

Video: Pemeriksaan Laporan Lalu Lintas (NL) Dengan Keset: 6 Langkah

Video: Pemeriksaan Laporan Lalu Lintas (NL) Dengan Keset: 6 Langkah
Video: Latihan Soal Pembuatan Jurnal Penyesuaian Perusahaan Jasa dan Pembahasannya 2024, Juli
Anonim
Pemeriksaan Laporan Lalu Lintas (NL) Dengan Keset
Pemeriksaan Laporan Lalu Lintas (NL) Dengan Keset

Dalam instruksi ini saya akan menjelaskan cara membuat keset yang akan memeriksa laporan lalu lintas jalan raya Belanda. Begitu Anda melangkah keluar dengan keset dan ada kemacetan lalu lintas di rute Anda, keset akan berubah menjadi warna merah. Ketika tidak ada kemacetan lalu lintas, tikar akan berubah menjadi hijau.

Saya akan mengerjakan NodeMCU 1.0 (Modul ESP0-12E). Kode untuk proyek ini juga dapat berfungsi di perangkat lain (mis., papan Arduino). Proyek ini didasarkan pada sumber Belanda untuk laporan lalu lintas, ANWB.

Apa yang kami butuhkan untuk proyek ini:

- NodeMCU - Kabel jumper - Lampu LED atau strip - Sensor analog (Aluminiuim foil, Spons) - Koneksi Wi-Fi - Keset

Langkah-langkah yang harus kita lakukan:

1. Hubungkan NodeMCu ke Wi-Fi 2. Minta data melalui HTTPS dari ANWB.nl 3. Ubah data menjadi Informasi yang dapat digunakan 4. Instal pemicu 5. Umpan balik desain

Langkah 1: Hubungkan NodeMCU ke Wi-Fi

Langkah ini akan menunjukkan cara melakukan HTTPSRequest yang berhasil untuk melihat apakah perangkat terhubung ke internet.

Pertama, instal library ESP8266 di Arduino IDE. Buka dari contoh ESP8266 >

Isi kredensial Wi-Fi Anda di bagian atas kode Anda, seperti yang ditunjukkan di bawah ini:

const char* ssid = "YOUR_SSID";

const char* kata sandi = "YOUR_PASS";

Unggah kode ke perangkat Anda dan periksa apakah NodeMCU terhubung ke internet. Contoh HTTPSRequest menggunakan Github sebagai default untuk mendapatkan informasi. Ketika HTTPSRequest berhasil, Anda menerima data Github di monitor serial.

Langkah 2: Minta Data Dari HTTPS Dari ANWB.nl

Pada langkah kedua ini, Anda mengubah sumber data dari default ke sumber yang diperlukan untuk proyek ini: ANWB.nl.

Di bagian atas kode Anda, ubah char* host menjadi www.anwb.nl (atau sumber lain yang Anda inginkan untuk mendapatkan data):

const char* host = "www.anwb.nl";!! Jika Anda menggunakan sumber lain, langkah 3 akan berbeda dari kode saya. Langkah 3 membutuhkan pengkodean khusus untuk mengambil informasi yang dapat digunakan!

Selanjutnya, ubah url string dalam pengaturan fungsi menjadi "/feeds/gethf", jalur tempat informasi diambil:

String url = "/feeds/gethf";!! Jika Anda menggunakan sumber lain, gunakan jalur ke sumber Anda!

Saat Anda mengunggah kode, Anda akan mendapatkan respons dengan semua data dari www.anwb.nl/feeds/gethf. Kode ini disimpan ke dalam string yang disebut baris.

Langkah 3: Ubah Data Menjadi Informasi yang Dapat Digunakan

Sampai saat ini, kode tersebut hanya berjalan ketika NodeMCU dimulai atau direset, karena semua kode tersebut berada dalam fungsi setup. Untuk mengatur pemicu agar kode terus berjalan, Anda harus mengubah posisi kode yang menjalankan permintaan HTTPS. Di bawah fungsi loop, Anda menambahkan fungsi lain. Saya menyebutnya void extractData:

ekstrakData(){

}

Salin bagian kode dari fungsi setup ke dalam extractData(). Mulailah dengan baris berikut hingga akhir fungsi pengaturan:

if (!client.connect(host, Kode sekarang ada di fungsi baru Anda, jadi hapus kode yang disalin dari fungsi pengaturan.

Selanjutnya, panggil fungsi extractData dalam fungsi loop dan tambahkan beberapa penundaan untuk memberikan waktu kepada nodeMCU untuk beristirahat:

lingkaran kosong(){

ekstrakData(); penundaan (30000); // ini akan dihapus nanti ketika kita memiliki sensor analog }

Karena data yang Anda terima disimpan dalam string dan hanya bagian dari string ini yang diperlukan, Anda harus menulis beberapa perulangan for.

Pertama, periksa semua posisi kata 'jalan'. Setelah kata 'jalan', nama jalan akan mengikuti (A1, A2, dst).

Sebelum mulai menulis for loop, Anda harus mendeklarasikan beberapa variabel yang akan Anda gunakan:

int noOfPos = 0;

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

Sekarang saatnya untuk menulis beberapa loop. Saya telah menulis for loop di bagian bawah fungsi extractData. Saya mencoba membaginya menjadi beberapa fungsi terpisah, tetapi saya tidak dapat membuatnya berfungsi.

Untuk loop No. 1: temukan posisi kata jalan di baris string:

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

Selanjutnya, periksa jalan mana yang macet, dengan menggunakan posisi for loop dari atas. Posisi nama jalan selalu sama dan dimulai 7 karakter dan diakhiri 10 karakter setelah kata jalan.

Sekarang kita mendefinisikan array nameOfRoadArray, yang akan diisi pada loop for berikutnya:

String namaOfRoadArray[20];

Untuk loop No. 2: Temukan semua nama jalan dengan input dari for loop no. 1

for(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 sinyal kemacetan lalu lintas.

Selanjutnya, Anda akan memeriksa apakah jalan Anda berada di deretan jalan yang macet. Cetak nameOfRoadArray untuk mendapatkan data jalan. Lakukan ini dengan menambahkan Serial.println(nameOfRoadArray[k]); ke dalam loop for ke-2 seperti:

for(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]); }

Jika benar Anda akan melihat semua jalan dengan kemacetan lalu lintas di monitor Serial.

Sebelum menulis perulangan For terakhir, Anda harus mendeklarasikan boolean sebagai variabel global. Boolean, yang disebut trafficJam secara default salah dan akan berubah jika fungsi extractData akan mengembalikan true untuk kemacetan lalu lintas. Kode berikut berada di atas file.ino:

boolean trafficJam = false;

Untuk loop No. 3: Periksa apakah jalan, dalam hal ini A1, ada dalam daftar kemacetan lalu lintas.

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

Jika Anda mencetak trafficJam di monitor serial, Anda tahu apakah ada kemacetan lalu lintas di A1 atau tidak.

Letakkan kode ini di bagian bawah fungsi extractData:

Serial.println(trafficJam); //melihat apakah ada kemacetan lalu lintas

Dengan informasi ini kita akan bekerja lebih jauh pada umpan balik dari sistem pada langkah 5.

Langkah 4: Instal Pemicu

Instal Pemicunya
Instal Pemicunya
Instal Pemicunya
Instal Pemicunya
Instal Pemicunya
Instal Pemicunya

Karena kita sekarang dapat mengambil data dengan sukses dari sumbernya, saatnya untuk membangun sebuah sensor yang akan memicu nodeMCU untuk menjalankan fungsi extractData. Saya memilih untuk membuat sensor analog dari keset saya. Anda dapat mengubah pemicunya dengan menggunakan sensor lain.

Membangun sensor analog

Saya menggunakan 2 lembar aluminium foil, dua kabel jumper dan spons.

Bor lubang di spons, ini adalah tempat di mana aluminium foil akan bersentuhan. Rekatkan aluminium foil di kedua sisi spons. Hubungkan kabel jumper ke aluminium foil. Hubungkan kabel jumper ke nodeMCU. Satu sisi ke pin A0 dan sisi lainnya ke pin V3. Letakkan spons di bawah keset Anda dan Anda baru saja mengubah keset Anda menjadi sensor. Luar biasa!

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

int sensorValue = analogRead(A0);

if (nilai sensor == 1024){ extractData(); }

Saat aluminium foil membuat kontak (ketika seseorang berdiri di atas matras), nilai sensor adalah 1024. Ini menghasilkan fungsi extractData() yang menyala. Dan itulah yang kami ingin sistem lakukan.

Langkah 5: Desain Umpan Balik

Saya menggunakan LEDstrip untuk memberikan umpan balik kepada pengguna. Saat terjadi kemacetan, lampu akan berwarna merah. Ketika jalan bagus untuk dilalui, itu akan berubah menjadi hijau. Saya menggunakan perpustakaan neopixel adafruit untuk mengontrol LEDstrip saya.

Tulis kode ini di bagian atas file Anda untuk memastikan strip LED ditentukan:

#termasuk

#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);

Tulis kode berikutnya dalam fungsi setup:

//neopiksel

piksel.mulai(); piksel.tampilkan();

Dan kode berikut dalam fungsi loop:

if (trafficJam == true){

for(int i; i < PIXEL_COUNT; i++){ pixels.setPixelColor(i, 255, 0, 0); // piksel merah.tampilkan(); penundaan (200); } } else{ for(int i; i < PIXEL_COUNT; i++){ pixels.setPixelColor(i, 0, 255, 0); // piksel hijau.show(); penundaan (200); }

Dalam kode di atas ada fungsi if/else. Ketika fungsi extractData mengembalikan adanya kemacetan lalu lintas, LEDstrip akan berubah menjadi merah. Jika tidak, strip LED akan berubah menjadi hijau.

Langkah 6: Jalankan Kode

Jika kita menjalankan kode lengkap sekarang, sensor dan lampu akan bekerja. Saat Anda berdiri di keset, sensor akan terhubung dan fungsi extractData akan berjalan. Ketika di deretan nama jalan, jalan yang kita cari ada, LEDstrip akan berubah menjadi merah, menandakan kemacetan lalu lintas. Jika tidak ada dalam larik, strip LED akan berubah menjadi hijau dan Anda tahu bahwa Anda siap melakukannya!

Semoga perjalanan Anda aman dan terima kasih telah membaca. Saya harap Anda menemukan beberapa inspirasi atau informasi. Jika Anda mendapat umpan balik, jangan ragu untuk merespons!

Direkomendasikan: