Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Sistem Parkir Cerdas

Komponen dan persediaan

Raspberry Pi 3 Model B
× 1
Arduino Mega 2560
× 1
Sensor Ultrasonik - HC-SR04 (Generik)
× 3

Aplikasi dan layanan online

Samsung ARTIK Cloud untuk IoT
Google Maps
Arduino IDE

Tentang proyek ini

Menemukan tempat parkir gratis di kota padat seperti Bangalore sangat sulit. Di sini, jika ada yang ingin keluar rumah dengan mobil pribadi, hal pertama yang terlintas di benaknya adalah tentang parkir, di mana ia akan memarkir mobilnya. Sebagian besar kasus, orang pergi ke stasiun parkir dan menemukan bahwa semua slot parkir penuh dan kemudian dia harus mencari tempat parkir lain. Jadi, ini sangat merepotkan dan banyak orang tetap takut memarkir mobilnya saat dia keluar dengan mobilnya.

Jadi, saya berpikir, bagaimana masalah tersebut dapat diselesaikan dan akhirnya saya berhasil membuat sistem parkir pintar berbasis cloud dan saya berharap penerapan sistem tersebut dapat menghilangkan masalah parkir di kota saya. ARTIK Cloud benar-benar platform yang bagus dan tepat untuk pekerjaan seperti itu.

Dengan menggunakan sistem ini, pengguna akan dapat menemukan tempat parkir yang tersedia dengan mudah menggunakan aplikasi seluler atau web dari mana saja. Sistem memperbarui data parkir setiap 30 detik.

Dalam proyek ini saya akan menunjukkan kepada Anda bagaimana Anda dapat dengan mudah membangun sistem pintar seperti itu. Yang pasti, saya akan menggunakan platform ARTIK Cloud, platform cloud IoT paling keren. Sebelum masuk ke detailnya, nikmati video demo proyek demo saya.

Untuk sistem demo ini Anda hanya perlu membuat satu perangkat baru di platform Samsung Artik Cloud. Saya akan menunjukkannya di sini. Saya menamai perangkat saya sebagai rainbow-parking, dan menyimpan data parkir seperti slot gratis di tempat parkir. Raspi mengirimkan informasi parkir sesuai dengan aturan yang telah ditetapkan.

Langkah-langkah yang terlibat dalam proyek ini:

1. Membuat satu perangkat di Artik Cloud Platform

2. Membuat satu aplikasi di Artik Cloud

3. Membuat satu aturan di Artik Cloud

4. Mempersiapkan Arduino

5. Menghubungkan Sensor

6. Menyiapkan Raspberry Pi

7. Mengembangkan Aplikasi Web

Jadi, mari kita mulai satu per satu. Hal pertama yang pertama. Mari kita mulai dengan membuat perangkat baru di platform cloud Artik.

Langkah 1:Membuat perangkat baru di Artik Cloud Platform

J) Masuk ke akun Samsung Anda dan Klik opsi PENGEMBANG dari sudut kanan atas.

B) Dari DASHBOARD pilih DEVICE TYPES dan Klik NEW

C) Pada DEVICE DISPLAY NAME ketik nama perangkat dan beri NAMA UNIK, lalu klik untuk BUAT JENIS PERANGKAT.

D) Klik + MANIFEST BARU

E) Ketik NAMA FIELD untuk data sensor yang akan Anda unggah dan simpan di sini dan sebutkan JENIS DATA sebagai bilangan bulat. Kemudian klik untuk SIMPAN.

P) Kemudian klik BERIKUTNYA:TINDAKAN PERANGKAT

G) Buat tindakan atau pilih dari TINDAKAN STANDAR. Klik untuk SIMPAN. Untuk tindakan proyek kami tidak akan diperlukan. Kemudian klik ke NEXT:ACTIVE MANIFEST.

H) Lihat Bidang Perangkat dan klik lagi ke BERIKUTNYA:MANIFEST AKTIF.

Saya) Selamat! Anda berhasil membuat perangkat pertama Anda. Sekarang Anda harus menghubungkan perangkat ke Artik cloud. Jadi, ayo lakukan.

J) Buka MY ARTIK CLOUD dari pojok kanan atas.

K) Klik MY ARTIK CLOUD dan pilih PERANGKAT.

L) Klik untuk +Menambahkan perangkat lain.

L) Ketik nama perangkat yang baru saja Anda buat dan klik di atasnya.

T) Klik tombol CONNECT DEVICE....

O) Perangkat Anda terhubung ke CLOUD.

P) Klik di atasnya. Hasilkan Token, Catat ID PERANGKAT dan TOKEN PERANGKAT Anda. Ini akan diperlukan terakhir setiap kali Anda ingin terhubung ke perangkat Anda dari perangkat fisik, aplikasi web, atau aplikasi android.

Langkah 2:Membuat aturan di Artik Cloud

Dalam langkah ini kita akan membuat aturan di mana kita mengatur beberapa kondisi yang menurut Artik cloud akan menghasilkan tindakan ketika kondisi memenuhi dan perangkat serta aplikasi yang berlangganan tindakan menerima pesan secara instan.

J) Pilih ATURAN dari menu MY ARTIK CLOUD dan Klik ATURAN BARU

B) Dari kotak pilihan JIKA pilih bidang data untuk perangkat dan tetapkan nilai dan kondisi. Kemudian pilih tindakan untuk perangkat tertentu dari bidang THEN. Anda dapat mengatur nilai parameter konstan atau dapat memilih nilai dari data perangkat lain. Untuk menentukan bidang data dari perangkat lain, klik ikon unduh yang ditunjukkan dalam kotak merah.

C) Pilih perangkat dari tarik-turun, lalu pilih bidang data.

D) Kemudian klik SIMPAN ATURAN.

Langkah 3. Mempersiapkan Arduino

Pekerjaan utama Arduino dalam proyek saya adalah mengumpulkan data dari sensor yang terhubung ke stasiun parkir dan mengirim data ke Raspberry pi menggunakan port serial. Disini saya menggunakan Arduino Mega yang diimplementasikan untuk satu stasiun parkir. kita dapat menghubungkan lebih banyak papan Arduino untuk Stasiun Parkir yang berbeda. Di sini saya menggunakan sensor ultrasonik dan dapat digunakan di lokasi mana pun.

Untuk sensor ultrasonik digunakan pin digital Arduino. Sketsa Arduino Sensor ultra sonic terpasang. Unggah sketsa yang sesuai ke papan Arduino Anda .

Detail tentang sensor ultrasonik dapat ditemukan di sini.

Langkah 4:Menghubungkan Sensor

Untuk menghubungkan semua sensor ke Arduino, silakan lihat bagian skema.

Langkah 5:Mempersiapkan Raspberry Pi

Saya berasumsi bahwa, Anda memiliki pengalaman sebelumnya dalam bekerja dengan Raspberry pi. Banyak tutorial pemula tersedia di Internet.

Mari kita mulai pekerjaan kita dengan raspberry pi. Raspberry pi bekerja sebagai klien WebSocket dan berkomunikasi dengan Artik cloud menggunakan protokol WebSocket. Saya menggunakan Node.js untuk pemrograman. Tidak seperti Python Node yang tidak diinstal sebelumnya di Raspberry Pi.

A). Instal Node dan npm di Raspberry pi menggunakan perintah berikut di terminal.

sudo apt-get updatesudo apt-get install nodejs npm 

B). Instal klien WebSocket ws ke raspberry pi

npm install --save ws 

C). Instal serialport ke raspberry pi

npm install serialport 

Jika Anda berhasil menyelesaikan ketiga langkah tersebut maka pi Anda siap berkomunikasi dengan Arduino menggunakan port serial dan Artik cloud menggunakan websocket. Seperti yang saya katakan sebelumnya dua raspberry pis diperlukan untuk dua stasiun parkir. Jadi, unduh kode sumber untuk ini dari Github . Anda dapat menggunakan klien ftp seperti FileZilla untuk mengunggah kode pada raspberry pi. Jangan lupa ganti DEVICE ID &DEVICE TOKEN di source code.

D) Setelah mengupload kode pada raspberry pi, jalankan kode dengan mengetikkan perintah berikut ke jendela terminal.

sudo node staff-parking.js 

Langkah 6. Mengembangkan Aplikasi Web

Untuk mengembangkan aplikasi web HTML dan JavaScript digunakan. Untuk berkomunikasi dengan Artik cloud disini saya kembali menggunakan protokol WebSocket. Untuk mengintegrasikan Peta dalam aplikasi saya, saya menggunakan Google Map API.

Unduh folder aplikasi web dari Github saya dan ubah ID PERANGKAT dan TOKEN PERANGKAT dengan id dan token perangkat Anda sendiri. Gunakan ID perangkat yang menghasilkan tindakan pada data baru yang diterima (edison dalam kasus saya). Buka websocket.html menggunakan browser web dan nikmati. Lihat video demonya...

Kode

  • Raspberry Pi (parkir staf)
  • Arduino (sonar)
  • Aplikasi Web (HTML)
  • Aplikasi Web (Sisi Klien)
Raspberry Pi (parkir staf)JavaScript
Source code untuk Raspberry Pi
//staff parking data transfervar webSocketUrl ="wss://api.artik.cloud/v1.1/websocket?ack=true";var device_id ="ID Perangkat Anda"; // staff parking DEVICE IDvar device_token ="Token Perangkat Anda"; //staff parking DEVICE TOKEN// memerlukan modul websocket untuk terhubung // jalankan dua perintah berikut ke terminal pi Anda// Sudo apt-get update// npm install websocketvar WebSocket =require('ws');var isWebSocketReady =false;var data="";var ws =null;// memerlukan modul serialport ke raspberry pi // jalankan perintah berikut ke terminal// npm install serialportvar serialport =require("serialport");var SerialPort =serialport.SerialPort;var sp =new SerialPort("/dev/ttyACM0", { //untuk komunikasi serial dengan arduino baudrate:9600, // kami menggunakan UNO sehingga baudrate adalah 9600, Anda mungkin perlu mengubah sesuai dengan model parser Anda:serialport.parsers.readline(" \n")});var parking_state=0;// variabel untuk memeriksa parkir state_gate/** * Mendapatkan waktu saat ini dalam milis */function getTimeMillis(){ return parseInt(Date.now().toString());}/** * Buat koneksi /websocket dan atur pin GPIO */function start() { //Buat koneksi WebSocket isWebSocketReady =false; ws =WebSocket baru(webSocketUrl); // fungsi ini dipanggil pada koneksi yang berhasil ws.on('open', function() { console.log("Koneksi WebSocket terbuka ...."); // Anda harus mendaftar untuk transmisi data yang berhasil // pendaftaran adalah untuk otentikasi atau register transfer data yang aman(); }); ws.on('message', function(data) { //loop ini dipanggil setiap kali klien mengirim beberapa pesan handleRcvMsg(data); //data dikirim ke fungsi handleRcvMsg() }); ws.on('close', function() { console.log("Koneksi WebSocket ditutup ...."); }); }/** * Mengirim pesan register ke /websocket endpoint *///Client hanya akan bekerja ketika perangkat didaftarkan dari sinifungsi register(){ console.log("Mendaftarkan perangkat pada koneksi WebSocket"); coba{ var registerMessage ='{"type":"register", "sdid":"'+device_id+'", "Authorization":"bearer '+device_token+'", "cid":"'+getTimeMillis()+' "}'; console.log('Mengirim pesan register ' + registerMessage + '\n'); ws.send(registerMessage, {mask:true}); isWebSocketReady =benar; } catch (e) { console.error('Gagal mendaftarkan pesan. Kesalahan dalam mendaftarkan pesan:' + e.toString()); } }//data setelah menerima dikirim ke sini untuk diproses// dalam kasus kami fungsi ini tidak akan digunakan karena kami tidak akan menerima tindakan apapun// di raspberry pi. Ini untuk modifikasi mendatang.fungsi handleRcvMsg(msg){ // Anda harus mengurai string yang diterima var msgObj =JSON.parse(msg); if (msgObj.type !="action") kembali; // kembali lebih awal; var tindakan =msgObj.data.actions; var actionName =tindakan[0].nama; console.log("Tindakan yang diterima adalah " + actionName); //Anda harus mengetahui tindakan terdaftar Anda untuk melakukan sesuai if (actionName.toLowerCase() =="settext") { // lakukan sesuatu di sini setelah menerima 'parking_state' console.log('receving Recognized action' + actionName); } else { //loop ini dijalankan jika beberapa tindakan tidak terdaftar diterima //jadi Anda harus mendaftarkan setiap tindakan di cloud console.log('Jangan lakukan apa pun sejak menerima tindakan yang tidak dikenal ' + actionName); kembali; } }/** * Kirim satu pesan ke ARTIK Cloud *///Fungsi ini bertanggung jawab untuk mengirimkan perintah ke cloud//function sendStateToArtikCloud(parking) mengirimkan nomor slot parkir gratis ke artik cloudfunction sendStateToArtikCloud(parking_slot){ try{ ts =', "ts":'+getTimeMillis(); var data ={ "parking_slot":parking_slot //mengatur nilai parkir dari argumen ke variabel cloud kita "parking_value" }; var payload ='{"sdid":"'+device_id+'"'+ts+', "data":'+JSON.stringify(data)+', "cid":"'+getTimeMillis()+'"}'; console.log('Mengirim muatan ' + muatan + '\n'); ws.send(payload, {mask:true}); } catch (e) { console.error('Kesalahan dalam mengirim pesan:' + e.toString() +'\n'); } }function exitClosePins() { console.log('Keluar dan hancurkan semua pin!'); proses.keluar(); }start();//dijalankan setiap kali data diterima dari arduino (penundaan terprogram 30 detik dari arduino)sp.on("open", function () { sp.on('data', function(data) { console .log("Serial port menerima data:" + data); //sendStateToArtikCloud(data);//slot parkir gratis var parking_slot =parseInt(data); sendStateToArtikCloud(parking_slot); });});process.on(' SIGINT', exitClosePins);
Arduino (sonar)C/C++
Kode sumber untuk antarmuka sensor sonar menggunakan Arduino
#define echoPin1 2 // Echo Pin untuk sonar 1#define trigPin1 3 // Trigger Pin untuk sonar 1#define echoPin2 4 // Echo Pin untuk sonar 2 #define trigPin2 5 // Pin Pemicu untuk sonar 2#define echoPin3 6 // Pin gema untuk sonar 3#define trigPin3 7 // Pin Pemicu untuk sonar 3//#define echoPin4 9 // Pin Gema untuk sonar 4//#define trigPin4 8 // Pin Pemicu untuk sonar 4durasi panjang1, jarak1; // Durasi yang digunakan untuk menghitung jarakpanjang durasi2, jarak2;durasi panjang3, jarak3;//durasi panjang4, jarak4; int count=0;int freeSlot =0;pengaturan batal() { Serial.begin (9600); // memulai komunikasi serial ke raspberry pi pinMode(trigPin1, OUTPUT); // memicu pin sebagai output pinMode(echoPin1, INPUT); // echo pin sebagai input pinMode(trigPin2, OUTPUT); pinMode(echoPin2, INPUT); pinMode(trigPin3, OUTPUT); pinMode(echoPin3, INPUT); //pinMode(trigPin4, OUTPUT); //pinMode(echoPin4, INPUT); }void loop() {/* Siklus trigPin/echoPin berikut digunakan untuk menentukan jarak objek terdekat dengan memantulkan gelombang suara darinya. */ /* Diperlukan setidaknya 10 mikrodetik sinyal tingkat tinggi untuk memicu pin *. * _____ * | | * -------------! !--------- * .....|10us |........ * modul kemudian menghasilkan delapan sinyal pulsa 40KHz dan menunggu untuk menerima echo */ digitalWrite(trigPin1, LOW); delayMicroseconds(2); digitalWrite(trigPin1, TINGGI); delayMicroseconds(10); digitalWrite(trigPin1, RENDAH); // fungsi pulseIn() menentukan lebar pulsa dalam waktu // durasi pulsa sebanding dengan jarak rintangan Duration1 =pulseIn(echoPin1, HIGH); digitalWrite(trigPin2, RENDAH); delayMicroseconds(2); digitalWrite(trigPin2, TINGGI); delayMicroseconds(10); digitalWrite(trigPin2, RENDAH); durasi2 =pulseIn(echoPin2, TINGGI); digitalWrite(trigPin3, RENDAH); delayMicroseconds(2); digitalWrite(trigPin3, TINGGI); delayMicroseconds(10); digitalWrite(trigPin3, RENDAH); durasi3 =pulseIn(echoPin3, TINGGI); //digitalWrite(trigPin4, RENDAH); //delayMikrodetik(2); //digitalWrite(trigPin4, TINGGI); //delayMikrodetik(10); //digitalWrite(trigPin4, RENDAH); //duration4 =pulseIn(echoPin4, TINGGI); // jarak =(kecepatan waktu tingkat tinggi suara (340M/S) / 2, // dalam sentimeter =uS/58 jarak1 =durasi1/58,2; if(jarak1<10) jarak1 =1; selain itu jarak1 =0; jarak2 =durasi2 /58.2; if(distance2<10) distance2 =1; else distance2 =0; distance3 =Duration3/58.2; if(distance3<10) distance3 =1; else distance3 =0; //distance4 =Duration4/58.2; //if (jarak4<10) //jarak4 =1; //jarak lain4 =0; // tambahkan hasil dari semua sensor untuk menghitung jumlah mobil total =jarak1 + jarak2 + jarak3;; // slot kosong =total slot - total slot mobil bebas =3 - count; // jumlah total slot yang dikirim ke raspberry pi menggunakan usb Serial.println(freeSlot); // status diupdate setiap 30 detik.delay(5000); //freeSlot =0; //distance1 =0; //jarak2 =0;// jarak3 =0;//jarak4 =0;}
Aplikasi Web (HTML)HTML
Kode sumber untuk Aplikasi Web Front End
   Sistem Parkir Cerdas Berbasis ARTIK Cloud     

Sistem Parkir Cerdas berbasis ARTIK Cloud

Parkir Staf

Dekat Cmapus Utama

Menerima Data...

1

Parkir Siswa/Tamu

Gerbang Depan, Dekat bank Union

Menerima Data...

Konsol Keluaran

Aplikasi Web (Sisi Klien)JavaScript
// interaksi real-time dimungkinkan menggunakan websocket// Perhatikan ws:. Ini adalah skema URL baru untuk koneksi WebSocket. // Ada juga wss:untuk koneksi WebSocket aman dengan cara yang sama // https:digunakan untuk koneksi HTTP aman.// Anda bisa mendapatkannya dari Artik cloud dokumentasi pagevar wsUri ="wss://api.artik.cloud/v1 .1/websocket?ack=true";var device_id ="ID Perangkat Anda"; // raspi3 DEVICE IDvar device_token ="Token Perangkat Anda"; //raspi3 DEVICE TOKENvar output;var atribut_log;var websocket;function init() { // document.getElementById() menulis sesuatu ke halaman html output =document.getElementById("output"); atribut_log =document.getElementById("attributes_log"); if (browserSupportsWebSockets() ===false) { // periksa protokol websocket dukungan browser atau tidak writeToScreen("Maaf! browser web Anda tidak mendukung WebSocket. Coba gunakan Google Chrome atau Firefox Versi Terbaru"); var elemen =document.getElementById("websocketelements"); elemen.parentNode.removeChild(elemen); kembali; // } //Anda membuka koneksi WebSocket hanya dengan memanggil konstruktor WebSocket websocket =new WebSocket(wsUri); //Saat koneksi terbuka, fungsi dipanggil secara otomatis websocket.onopen =function() { //writeAttributeValues('OnOpen Event Fired'); writeToScreen("Berhasil terhubung ke Sistem Parkir"); // setelah koneksi terbuka, registrasi diperlukan untuk transmisi data yang aman register(); }; // dipanggil saat pesan baru diterima websocket.onmessage =function(evt) { onMessage(evt); }; // ketika menerima kesalahan // Anda dapat menangani kesalahan apa pun yang terjadi dengan mendengarkan kejadian kesalahan. websocket.onerror =function(evt) { onError(evt); };}function onClose(evt) { // Setelah Anda selesai dengan WebSocket Anda, Anda dapat mengakhiri koneksi menggunakan metode close(). websocket.close(); //writeAttributeValues('OnClose Event Diaktifkan'); writeToScreen("DISCONNECTED");}// Ketika sebuah pesan diterima, event pesan akan diaktifkan. function onMessage(evt) { writeToScreen('RESPONS:' + evt.data + ''); //writeAttributeValues('Acara OnMessage Diaktifkan'); handleRcvMsg(evt.data); //data dikirim ke fungsi handleRcvMsg()}fungsi onError(evt) { writeToScreen('ERROR: ' + evt.data); //writeAttributeValues('onError Event Fired');}function doSend(message) { // Untuk mengirim pesan melalui koneksi WebSocket, Anda memanggil metode send() pada instance WebSocket Anda websocket.send(message); //writeAttributeValues('Acara OnSend Diaktifkan'); writeToScreen("SENT:" + pesan);}fungsi writeAttributeValues(awalan) { var pre =document.createElement("p"); pre.style.wordWrap ="break-word"; pre.innerHTML ="INFO " + getCurrentDate() + " " + prefix + " readyState:" + websocket.readyState + " bufferedAmount:" + websocket.bufferedAmount + "";; atribut_log.appendChild(pre);}fungsi writeToScreen(pesan) { var pre =document.createElement("p"); pre.style.wordWrap ="break-word"; pre.innerHTML =pesan; output.appendChild(pre);}fungsi getCurrentDate() { var sekarang =Tanggal baru(); var datetime =now.getFullYear() + '/' + (now.getMonth() + 1) + '/' + now.getDate(); datetime +=' ' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds(); return datetime;}fungsi browserSupportsWebSockets() { if ("WebSocket" di jendela) { return true; } else { kembali salah; }}function getTimeMillis(){ return parseInt(Date.now().toString());}function register(){ writeToScreen("Mendaftarkan perangkat pada koneksi WebSocket"); coba{ var registerMessage ='{"type":"register", "sdid":"'+device_id+'", "Authorization":"bearer '+device_token+'", "cid":"'+getTimeMillis()+' "}'; writeToScreen('Mengirim pesan register ' + registerMessage + '\n'); websocket.send(registerMessage, {mask:true}); isWebSocketReady =benar; //document.getElementById("pelangi").innerHTML =""; //document.getElementById("rainbow").innerHTML ="Kapasitas:"+'50 '+"Slot Gratis:"+''+"50"; //document.getElementById("indigo").innerHTML ="Kapasitas:60, Slot Gratis:5"; } catch (e) { writeToScreen('Gagal mendaftarkan pesan. Kesalahan dalam mendaftarkan pesan:' + e.toString()); } }//data setelah diterima dikirim ke sini untuk diprosesfungsi handleRcvMsg(msg){ // pesan diterima sebagai string berikut // {"actions":[{"name":"setText","parameters":{"text" :"4", "text2":"5"}}]} // Anda harus menguraikannya var msgObj =JSON.parse(msg); if (msgObj.type !="action") kembali; // kembali lebih awal; var tindakan =msgObj.data.actions; var rainbowData =actions[0].parameters.text; var indigoData =tindakan[0].parameters.text2; console.log("Tindakan yang diterima adalah " + tindakan); document.getElementById("rainbow").innerHTML ="Kapasitas:50, Slot Gratis:"+rainbowData; document.getElementById("indigo").innerHTML ="Kapasitas:60, Slot Gratis:"+indigoData; }
Kode Sumber untuk Sistem Parkir Cerdas
Semua kode dan file yang diperlukan disertakan dalam repositori Github ini.https://github.com/husinul/Smart-Car-Parking

Skema


Proses manufaktur

  1. Konstruktor C#
  2. C# menggunakan
  3. Bartender Cerdas
  4. Sistem manajemen gedung:Tiket Anda ke kota pintar
  5. Kontrol Pencahayaan Cerdas untuk Rumah Kaca Mengurangi Biaya
  6. Sistem Pemotong Laser Cerdas Mendeteksi Bahan Berbeda
  7. Memahami sistem konveyor
  8. Memahami sistem dongkrak mobil
  9. Pengertian Sistem Suspensi
  10. Mengapa pemanas mobil saya hanya berfungsi saat saya mengemudi?