Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Intelligentes Parksystem

Komponenten und Verbrauchsmaterialien

Raspberry Pi 3 Model B
× 1
Arduino Mega 2560
× 1
Ultraschallsensor - HC-SR04 (Generic)
× 3

Apps und Onlinedienste

Samsung ARTIK Cloud für IoT
Google Maps
Arduino-IDE

Über dieses Projekt

In einer überfüllten Stadt wie Bangalore einen kostenlosen Parkplatz zu finden, ist sehr schwierig. Wenn hier jemand mit dem eigenen Auto von zu Hause nach draußen gehen möchte, denkt er zuerst an das Parken, wo er sein Auto abstellen wird. In den meisten Fällen gehen die Leute zu einer Parkstation und stellen fest, dass alle Parkplätze voll sind, und dann muss er sich einen anderen Parkplatz suchen. Es ist also ein großer Ärger und viele Leute haben Angst, sein Auto zu parken, wenn er mit seinem Auto aussteigt.

Also habe ich mir überlegt, wie das Problem gelöst werden kann und schließlich ist es mir gelungen, ein Cloud-basiertes intelligentes Parksystem zu entwickeln und ich hoffe, dass die Implementierung des Systems das Parkproblem meiner Stadt beseitigen kann. ARTIK Cloud ist wirklich eine schöne und geeignete Plattform für solche Jobs.

Mit diesem System wird ein Benutzer in der Lage sein, einen verfügbaren Parkplatz einfach über eine mobile oder Web-App von überall zu finden. Das System aktualisiert die Parkdaten alle 30 Sekunden.

In diesem Projekt zeige ich Ihnen, wie Sie ganz einfach ein solches intelligentes System bauen können. Ich werde auf jeden Fall die ARTIK Cloud-Plattform verwenden, die coolste IoT-Cloud-Plattform. Bevor Sie zu den Details gehen, genießen Sie das Demo-Video meines Demo-Projekts.

Für dieses Demosystem müssen Sie nur ein neues Gerät in der Samsung Artik Cloud-Plattform erstellen. Ich werde es hier zeigen. Ich habe meine Geräte als Rainbow-Parking bezeichnet und Parkdaten wie freie Parkplätze auf einem Parkplatz gespeichert. Raspi sendet Parkinformationen nach den voreingestellten Regeln.

An diesem Projekt beteiligte Schritte:

1. Ein Gerät in der Artik Cloud Platform erstellen

2. Eine Anwendung in Artik Cloud erstellen

3. Eine Regel in Artik Cloud erstellen

4. Arduino vorbereiten

5. Anschließen der Sensoren

6. Raspberry Pi vorbereiten

7. Webanwendung entwickeln

Fangen wir also nacheinander an. Alles der Reihe nach. Beginnen wir damit, ein neues Gerät in der Artik-Cloud-Plattform zu erstellen.

Schritt 1:Erstellen eines neuen Geräts in der Artik Cloud Platform

A) Melden Sie sich bei Ihrem Samsung-Konto an und klicken Sie oben rechts auf die Option ENTWICKLER.

B) Wählen Sie im DASHBOARD GERÄTETYPEN aus und klicken Sie auf NEU

C) Geben Sie unter GERÄTEANZEIGENAME einen Namen für das Gerät und einen EINZIGARTIGEN NAMEN ein und klicken Sie dann auf GERÄTETYP ERSTELLEN.

D) Klicken Sie auf + NEUES MANIFEST

E) Geben Sie einen FELDNAMEN für Ihre Sensordaten ein, die Sie hier hochladen und speichern, und geben Sie den DATENTYP als Ganzzahl an. Klicken Sie dann auf SPEICHERN.

F) Klicken Sie dann auf WEITER:GERÄTEAKTIONEN

G) Führen Sie eine Aktion aus oder wählen Sie eine der STANDARDAKTIONEN aus. Klicken Sie auf SPEICHERN. Für unser Projekt sind keine Maßnahmen erforderlich. Klicken Sie dann auf NEXT:ACTIVE MANIFEST.

H) Sehen Sie sich die Gerätefelder an und klicken Sie erneut auf NEXT:ACTIVE MANIFEST.

ich) Herzlichen Glückwunsch! Sie haben Ihr erstes Gerät erfolgreich erstellt. Jetzt müssen Sie das Gerät mit der Artik Cloud verbinden. Also, lass es uns tun.

J) Gehe zu MEINE ARTIK CLOUD von der rechten oberen Ecke.

K) Klicken Sie auf MEINE ARTIK CLOUD und wählen Sie GERÄTE.

L) Klicken Sie auf +, um ein weiteres Gerät hinzuzufügen.

M) Geben Sie den Namen des gerade erstellten Geräts ein und klicken Sie darauf.

N) Klicken Sie auf die Schaltfläche GERÄT VERBINDEN....

O) Dein Gerät ist mit der CLOUD verbunden.

P) Klick es an. Token generieren, DEVICE ID und DEVICE TOKEN notieren. Diese werden jedes Mal benötigt, wenn Sie sich von physischen Geräten, Web-Apps oder Android-Apps mit Ihrem Gerät verbinden möchten.

Schritt 2:Regel in Artik Cloud erstellen

In diesem Schritt werden wir eine Regel erstellen, in der wir einige Bedingungen festlegen, nach denen Artik Cloud eine Aktion generiert, wenn die Bedingung erfüllt ist und die Geräte und Anwendungen, die die Aktion abonniert haben, sofort eine Nachricht erhalten.

A) Wählen Sie REGELN aus dem Menü MEINE ARTIK CLOUD und klicken Sie auf NEUE REGEL

B) Wählen Sie im IF-Auswahlfeld ein Datenfeld für ein Gerät aus und legen Sie einen Wert und eine Bedingung fest. Wählen Sie dann eine Aktion für ein bestimmtes Gerät aus dem DANN-Feld aus. Sie können einen konstanten Parameterwert einstellen oder einen Wert aus anderen Gerätedaten auswählen. Um ein Datenfeld von einem anderen Gerät zu definieren, klicken Sie auf das Download-Symbol in der roten Box.

C) Wählen Sie ein Gerät aus der Dropdown-Liste und dann das Datenfeld aus.

D) Klicken Sie dann auf REGEL SPEICHERN.

Schritt 3. Arduino vorbereiten

Die Hauptarbeit des Arduino in meinem Projekt besteht darin, Daten von Sensoren zu sammeln, die an Parkstationen angeschlossen sind, und die Daten über die serielle Schnittstelle an den Raspberry Pi zu senden. Hier habe ich Arduino Mega für eine Parkstation implementiert. Wir können weitere Arduino-Boards für verschiedene Parkstationen anschließen. Hier habe ich Ultraschallsensoren verwendet und kann an jedem Ort verwendet werden.

Für Ultraschallsensoren wurden digitale Arduino-Pins verwendet. Arduino-Skizze Ultraschallsensoren sind angebracht. Laden Sie die entsprechende Skizze auf Ihr Arduino-Board hoch.

Details zum Ultraschallsensor finden Sie hier.

Schritt 4:Anschließen der Sensoren

Um alle Sensoren an Arduino anzuschließen, lesen Sie bitte den schematischen Abschnitt.

Schritt 5:Raspberry Pi vorbereiten

Ich gehe davon aus, dass Sie bereits Erfahrung im Umgang mit Raspberry Pi haben. Im Internet sind viele Anfänger-Tutorials verfügbar.

Beginnen wir unsere Arbeit mit Himbeer-Pi. Raspberry Pi arbeitet als WebSocket-Client und kommuniziert mit der Artik-Cloud über das WebSocket-Protokoll. Ich habe Node.js zum Programmieren verwendet. Im Gegensatz zu Python ist Node auf Raspberry Pi nicht vorinstalliert.

A). Installieren Sie Node und npm auf Raspberry Pi mit den folgenden Befehlen im Terminal.

sudo apt-get updatesudo apt-get install nodejs npm 

B). Installieren Sie den WebSocket-Client ws auf Raspberry Pi

npm install --save ws 

C). Serialport auf Raspberry Pi installieren

npm Serialport installieren 

Wenn Sie alle drei Schritte erfolgreich abgeschlossen haben, ist Ihr Pi bereit, mit Arduino über die serielle Schnittstelle und die Artik-Cloud über Websocket zu kommunizieren. Wie ich schon sagte, werden für zwei Parkstationen zwei Himbeerpis benötigt. Laden Sie also den Quellcode dafür von Github herunter. Sie können einen FTP-Client wie FileZilla verwenden, um den Code auf Raspberry Pi hochzuladen. Vergessen Sie nicht, DEVICE ID &DEVICE TOKEN im Quellcode zu ändern.

D) Nachdem Sie den Code auf Raspberry Pi hochgeladen haben, führen Sie den Code aus, indem Sie den folgenden Befehl in das Terminalfenster eingeben.

sudo-Knoten staff-parking.js 

Schritt 6. Webanwendung entwickeln

Für die Entwicklung von Webanwendungen wurde HTML und JavaScript verwendet. Für die Kommunikation mit der Artik Cloud habe ich hier wieder das WebSocket-Protokoll verwendet. Für die Integration von Map in meine Anwendung habe ich die Google Map API verwendet.

Laden Sie den Web-App-Ordner von meinem Github herunter und ändern Sie die DEVICE-ID und den DEVICE-TOKEN mit Ihrer eigenen Geräte-ID und Ihrem eigenen Token. Verwenden Sie die ID des Geräts, das die Aktion für neue empfangene Daten generiert (in meinem Fall Edison). Öffnen Sie websocket.html mit einem Webbrowser und genießen Sie es. Sehen Sie sich das Demo-Video an...

Code

  • Raspberry Pi (Personalparkplatz)
  • Arduino (Sonar)
  • Web-App (HTML)
  • Web-App (Client-Seite)
Raspberry Pi (Personalparkplatz)JavaScript
Quellcode für Raspberry Pi
//Personalparkdatentransfervar webSocketUrl ="wss://api.artik.cloud/v1.1/websocket?ack=true";var device_id ="Ihre Geräte-ID"; // Mitarbeiter parken DEVICE IDvar device_token ="Ihr Geräte-Token"; //Personalparkplatz DEVICE TOKEN // Websocket-Modul zum Verbinden erforderlich // Führen Sie die folgenden zwei Befehle zum Terminal Ihres pi aus // sudo apt-get update // npm install websocketvar WebSocket =require('ws');var isWebSocketReady =false;var data="";var ws =null;// Serialport-Modul für Raspberry Pi erfordern // folgenden Befehl zum Terminal ausführen // npm install serialportvar serialport =require("serialport");var SerialPort =serialport.SerialPort;var sp =new SerialPort("/dev/ttyACM0", { //für die serielle Kommunikation mit Arduino-Baudrate:9600, // Wir verwenden UNO, also ist die Baudrate 9600, Sie müssen möglicherweise entsprechend Ihrem Modellparser ändern:serialport.parsers.readline(" \n")});var parking_state=0;// Variable zum Prüfen auf Parken state_gate/** * Ermittelt die aktuelle Zeit in Millis */function getTimeMillis(){ return parseInt(Date.now().toString());}/** * Erstellen Sie eine /websocket-Verbindung und richten Sie den GPIO-Pin ein */function start() { //Erstellen Sie die WebSocket-Verbindung isWebSocketReady =false; ws =neues WebSocket(webSocketUrl); // diese Funktion wird bei erfolgreicher Verbindung aufgerufen ws.on('open', function() { console.log("WebSocket connection is open ...."); // Sie müssen sich für eine erfolgreiche Datenübertragung registrieren // Registrierung ist für Authentifizierung oder sichere Datenübertragung register();}); ws.on('message', function(data) { //diese Schleife wird jedes Mal aufgerufen, wenn der Client eine Nachricht sendet handleRcvMsg(data); //Daten werden an die Funktion handleRcvMsg() gesendet }); ws.on('close', function() { console.log("WebSocket-Verbindung wird geschlossen ...."); }); }/** * Sendet eine Registrierungsnachricht an den /websocket-Endpunkt *///Client funktioniert nur, wenn das Gerät von herefunction register(){ console.log("Registrierung des Geräts auf der WebSocket-Verbindung"); try{ var registerMessage ='{"type":"register", "sdid":"'+device_id+'", "Authorization":"Bearer '+device_token+'", "cid":"'+getTimeMillis()+' "}'; console.log('Registrierungsnachricht senden ' + registerMessage + '\n'); ws.send(registerMessage, {mask:true}); isWebSocketReady =true; } catch (e) { console.error('Fehler beim Registrieren von Nachrichten. Fehler beim Registrieren der Nachricht:' + e.toString()); } } // Daten nach dem Empfang werden hier zur Verarbeitung gesendet // in unserem Fall wird diese Funktion nicht verwendet, da wir keine Aktion // in Raspberry Pi erhalten. Dies ist für zukünftige Modifikationen.function handleRcvMsg(msg){ // Sie müssen den empfangenen String parsen var msgObj =JSON.parse(msg); if (msgObj.type !="Aktion") return; //Frühzeitige Rückkehr; var-Aktionen =msgObj.data.actions; var Aktionsname =Aktionen[0].name; console.log("Die empfangene Aktion ist " + actionName); //Sie müssen Ihre registrierten Aktionen kennen, um sie entsprechend ausführen zu können if (actionName.toLowerCase() =="settext") { // hier etwas tun, nachdem Sie 'parking_state' erhalten haben console.log('receving selected action' + actionName); } else { //diese Schleife wird ausgeführt, wenn eine nicht registrierte Aktion empfangen wird // Sie müssen also jede Aktion in der Cloud Console.log registrieren ('Nichts tun, seit die nicht erkannte Aktion empfangen wurde ' + actionName); Rückkehr; } }/** * Eine Nachricht an ARTIK Cloud senden *///Diese Funktion ist für das Senden von Befehlen an die Cloud verantwortlich //function sendStateToArtikCloud(parking) sendet die Nummer des freien Parkplatzes an artik cloudfunction sendStateToArtikCloud(parking_slot){ try{ ts =', "ts":'+getTimeMillis(); var data ={ "parking_slot":Parking_slot //Setzen des Parkwerts vom Argument zu unserer Cloud-Variablen "parking_value"}; var payload ='{"sdid":"'+device_id+'"'+ts+', "data":'+JSON.stringify(data)+', "cid":"'+getTimeMillis()+'"}'; console.log('Nutzlast senden ' + Nutzlast + '\n'); ws.send(Nutzlast, {Maske:wahr}); } catch (e) { console.error('Fehler beim Senden einer Nachricht:' + e.toString() +'\n'); } }Funktion exitClosePins() { console.log('Beenden und alle Pins zerstören!'); process.exit(); } start(); // wird jedes Mal ausgeführt, wenn Daten von arduino empfangen werden (30 Sek. programmierte Verzögerung von arduino)sp.on("open", function() { sp.on('data', function(data) { console .log("Serial Port Received Data:" + data); //sendStateToArtikCloud(data);//freier Parkplatz var parking_slot =parseInt(data); sendStateToArtikCloud(parking_slot); });});process.on(' SIGINT', exitClosePins);
Arduino (Sonar)C/C++
Quellcode für Sonarsensor-Anbindung mit Arduino
#define echoPin1 2 // Echo Pin für Sonar 1#define trigPin1 3 // Trigger Pin für Sonar 1#define echoPin2 4 // Echo Pin für Sonar 2 #define trigPin2 5 // Trigger Pin für Sonar 2#define echoPin3 6 // Echo Pin für Sonar 3#define trigPin3 7 // Trigger Pin für Sonar 3//#define echoPin4 9 // Echo Pin für Sonar 4//#define trigPin4 8 // Trigger Pin für Sonar 4lange Dauer1, Distanz1; // Dauer, die verwendet wird, um Distancelong Duration2, Distance2;Long Duration3, Distance3; //Long Duration4, Distance4; int count =0;int freeSlot =0;void setup () { Serial.begin (9600); // serielle Kommunikation zu Himbeer-Pi initiieren PinMode (trigPin1, OUTPUT); // Trigger-Pin als Ausgang PinMode (echoPin1, INPUT); // Echo-Pin als Eingang pinMode (trigPin2, OUTPUT); pinMode (echoPin2, EINGANG); pinMode (trigPin3, AUSGANG); pinMode (echoPin3, EINGANG); // PinMode (trigPin4, AUSGANG); // PinMode (echoPin4, EINGANG); }void loop() {/* Der folgende trigPin/echoPin-Zyklus wird verwendet, um die Entfernung des nächsten Objekts zu bestimmen, indem Schallwellen davon abprallen. */ /* Mindestens 10 Mikrosekunden High-Level-Signal sind erforderlich, um den *-Pin auszulösen. * _____ * | | * --------------! !--------- * .....|10us |........ * Das Modul erzeugt dann acht 40-KHz-Impulssignale und wartet auf den Empfang des Echos */ digitalWrite(trigPin1, LOW); VerzögerungMikrosekunden(2); digitalWrite (trigPin1, HIGH); VerzögerungMikrosekunden(10); digitalWrite (trigPin1, LOW); // pulseIn( ) Funktion bestimmt eine Pulsbreite in der Zeit // Pulsdauer ist proportional zur Distanz des Hindernisses length1 =pulseIn(echoPin1, HIGH); digitalWrite (trigPin2, LOW); VerzögerungMikrosekunden(2); digitalWrite (trigPin2, HIGH); VerzögerungMikrosekunden(10); digitalWrite (trigPin2, LOW); Dauer2 =pulseIn(echoPin2, HIGH); digitalWrite (trigPin3, LOW); VerzögerungMikrosekunden(2); digitalWrite (trigPin3, HIGH); VerzögerungMikrosekunden(10); digitalWrite (trigPin3, LOW); Dauer3 =pulseIn(echoPin3, HIGH); // digitalWrite (trigPin4, LOW); // verzögernMikrosekunden (2); // digitalWrite (trigPin4, HIGH); // verzögernMikrosekunden (10); // digitalWrite (trigPin4, LOW); // Dauer4 =pulseIn (echoPin4, HIGH); // distance =(hohe Zeitgeschwindigkeit des Schalls (340M/S) / 2, // in Zentimeter =uS/58 Distance1 =Dauer1/58.2; if(distance1<10) Distance1 =1; else distance1 =0; distance2 =Dauer2 /58.2; if(distanz2<10) distance2 =1; else distance2 =0; Distance3 =Dauer3/58.2; if(distanz3<10) distance3 =1; else distance3 =0; //distanz4 =Dauer4/58.2; //if (distanz4<10) //distanz4 =1; //else distance4 =0; // addiere das Ergebnis von allen Sensoren, um die Gesamtzahl der Autos zu zählen =Distanz1 + Distanz2 + Distanz3;; // Freier Slot =Gesamtslot - Gesamtes Auto freeSlot =3 - count; // Anzahl des gesamten Slots wird mit USB Serial.println (freeSlot) an Raspberry Pi gesendet; // der Status wird alle 30 Sekunden aktualisiert. delay (5000); // freeSlot =0; // Distance1 =0; //Abstand2 =0; //Abstand3 =0; //Abstand4 =0;}
Web-App (HTML)HTML
Quellcode für die Front-End-Webanwendung
   Cloudbasiertes Smart Parking System von ARTIK     

Cloudbasiertes Smart Parking System von ARTIK

Personalparkplätze

In der Nähe des Haupt-Cmapus

Daten werden empfangen...

1

Studenten-/Gästeparkplätze

Front Gate, Near Union bank

Daten werden empfangen...

Ausgabekonsole

Web-App (Client-Seite)JavaScript
// Echtzeit-Interaktionen sind über Websocket möglich// Beachten Sie die ws:. Dies ist das neue URL-Schema für WebSocket-Verbindungen. // Es gibt auch wss:für sichere WebSocket-Verbindungen auf die gleiche Weise // https:wird für sichere HTTP-Verbindungen verwendet.// Sie können es aus der Artik-Cloud-Dokumentation pagevar abrufen. wsUri ="wss://api.artik.cloud/v1 .1/websocket?ack=true";var device_id ="Ihre Geräte-ID"; // raspi3 DEVICE IDvar device_token ="Ihr Geräte-Token"; //raspi3 DEVICE TOKENvar output;var attribute_log;var websocket;function init() { // document.getElementById() schreibe etwas in die HTML-Seite output =document.getElementById("output"); attribute_log =document.getElementById("attributes_log"); if (browserSupportsWebSockets() ===false) { // Überprüfen Sie, ob das Websocket-Protokoll des Browsers unterstützt wird oder nicht writeToScreen("Leider unterstützt Ihr Webbrowser keine WebSockets. Versuchen Sie es mit den neuesten Versionen von Google Chrome oder Firefox"); var element =document.getElementById("websocketelements"); element.parentNode.removeChild(element); Rückkehr; // } //Sie öffnen eine WebSocket-Verbindung einfach durch Aufrufen des WebSocket-Konstruktors websocket =new WebSocket(wsUri); //Wenn die Verbindung geöffnet ist, wird die Funktion automatisch aufgerufen websocket.onopen =function() { //writeAttributeValues('onOpen Event Fired'); writeToScreen("Erfolgreich mit dem Parksystem verbunden"); // Nachdem die Verbindung geöffnet ist, ist eine Registrierung für die sichere Datenübertragung erforderlich register(); }; // aufgerufen, wenn eine neue Nachricht empfangen wurde websocket.onmessage =function(evt) { onMessage(evt); }; // wenn ein Fehler empfangen wurde // Sie können alle auftretenden Fehler behandeln, indem Sie auf das Fehlerereignis warten. websocket.onerror =function(evt) { onError(evt); };}function onClose(evt) { // Sobald Sie mit Ihrem WebSocket fertig sind, können Sie die Verbindung mit der Methode close() beenden. websocket.close(); //writeAttributeValues('onClose Event Fired'); writeToScreen("DISCONNECTED");}// Wenn eine Nachricht empfangen wird, wird das Nachrichtenereignis ausgelöst. Funktion onMessage(evt) { writeToScreen('ANTWORT:' + evt.data + ''); //writeAttributeValues('onMessage Event Fired'); handleRcvMsg(evt.data); //Daten werden an die Funktion handleRcvMsg() gesendet}function onError(evt) { writeToScreen('ERROR: ' + evt.data); //writeAttributeValues('onError Event Fired');}function doSend(message) { // Um ​​eine Nachricht über die WebSocket-Verbindung zu senden, rufen Sie die Methode send() Ihrer WebSocket-Instanz auf websocket.send(message); //writeAttributeValues('onSend Event Fired'); writeToScreen("SENT:" + message);}function writeAttributeValues(prefix) { var pre =document.createElement("p"); pre.style.wordWrap ="Wortbruch"; pre.innerHTML ="INFO" + getCurrentDate() + " " + Präfix + " readyState:" + websocket.readyState + " bufferedAmount:" + websocket.bufferedAmount + "";; attribute_log.appendChild(pre);}function writeToScreen(message) { var pre =document.createElement("p"); pre.style.wordWrap ="Wortbruch"; pre.innerHTML =Nachricht; output.appendChild(pre);}function getCurrentDate() { var now =new Date(); var datetime =now.getFullYear() + '/' + (now.getMonth() + 1) + '/' + now.getDate(); datetime +=' ' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds(); datetime zurückgeben;}Funktion browserSupportsWebSockets() { if ("WebSocket" im Fenster) { return true; aufrechtzuerhalten. Sonst { false zurückgeben; }}Funktion getTimeMillis(){ return parseInt(Date.now().toString());}Funktion register(){ writeToScreen("Gerät auf der WebSocket-Verbindung registrieren"); try{ var registerMessage ='{"type":"register", "sdid":"'+device_id+'", "Authorization":"Bearer '+device_token+'", "cid":"'+getTimeMillis()+' "}'; writeToScreen('Registernachricht senden ' + registerMessage + '\n'); websocket.send(registerMessage, {mask:true}); isWebSocketReady =true; //document.getElementById("Regenbogen").innerHTML =""; //document.getElementById("rainbow").innerHTML ="Kapazität:"+'50 '+"Freier Slot:"+''+"50"; //document.getElementById("indigo").innerHTML ="Kapazität:60, Freier Slot:5"; } catch (e) { writeToScreen('Fehler beim Registrieren von Nachrichten. Fehler beim Registrieren der Nachricht:' + e.toString()); } } // Daten nach dem Empfang werden hier zur Verarbeitung gesendet function handleRcvMsg(msg){ // Nachricht wird als folgender String empfangen // {"actions":[{"name":"setText","parameters":{"text" :"4", "text2":"5"}}]} // Sie müssen es parsen var msgObj =JSON.parse(msg); if (msgObj.type !="Aktion") return; //Frühzeitige Rückkehr; var-Aktionen =msgObj.data.actions; var RainbowData =Aktionen[0].parameters.text; var indigoData =Aktionen[0].parameters.text2; console.log("Die empfangene Aktion ist " + Aktionen); document.getElementById("rainbow").innerHTML ="Kapazität:50, Freier Slot:"+rainbowData; document.getElementById("indigo").innerHTML ="Kapazität:60, Freier Slot:"+indigoData; }
Quellcode für Smart Parking System
Alle notwendigen Codes und Dateien sind in diesem Github-Repository enthalten.https://github.com/husinul/Smart-Car-Parking

Schaltpläne


Herstellungsprozess

  1. C#-Konstruktor
  2. C# verwenden
  3. Smart Barkeeper
  4. Gebäudemanagementsystem:Ihr Ticket in eine Smart City
  5. Intelligente Beleuchtungssteuerung für Gewächshäuser senkt Kosten
  6. Intelligentes Laserschneidsystem erkennt verschiedene Materialien
  7. Fördersystem verstehen
  8. Wagenhebersystem verstehen
  9. Aufhängungssystem verstehen
  10. Warum funktioniert meine Autoheizung nur während der Fahrt?