Système de stationnement intelligent : Solutions de stationnement urbain efficaces
Composants et fournitures
| Raspberry Pi 3 Modèle B | × | 1 |
| Arduino Mega 2560 | × | 1 |
| Capteur ultrason HC-SR04 (générique) | × | 3 |
Applications et services en ligne
- Samsung ARTIK Cloud pour IoT
- Google Maps
- Arduino IDE
À propos de ce projet
Trouver une place de stationnement libre dans une ville congestionnée comme Bangalore est très difficile. Avant de sortir en voiture, la première préoccupation est : où garer son véhicule ? Souvent, on arrive à un parking complet et doit en chercher un autre. C'est un vrai casse-tête.
J'ai donc conçu un système de stationnement intelligent basé sur le cloud, espérant résoudre ce problème dans ma ville. ARTIK Cloud est une plateforme idéale pour cela.
Avec ce système, un utilisateur peut trouver une place disponible facilement via une application mobile ou web, depuis n'importe où. Les données de stationnement sont mises à jour toutes les 30 secondes.
Voici les étapes du projet :
- Créer un dispositif dans ARTIK Cloud
- Créer une application dans ARTIK Cloud
- Créer une règle dans ARTIK Cloud
- Préparer l'Arduino
- Connecter les capteurs
- Préparer le Raspberry Pi
- Développer l'application web
Étape 1 : Créer un dispositif dans ARTIK Cloud
(Procédure détaillée avec captures d'écran : connexion compte Samsung, création type de dispositif, manifeste, champs de données, actions, connexion dispositif, génération token.)
Étape 2 : Créer une règle dans ARTIK Cloud
Définir des conditions pour déclencher des actions (ex: alerte quand places libres < seuil).
Étape 3 : Préparer l'Arduino
L'Arduino Mega collecte les données des capteurs ultrason (jusqu'à 3 par station) et les envoie au Raspberry Pi via port série. Voir le code dans la section Code.
Étape 4 : Connecter les capteurs
Voir la section Schémas pour le câblage des capteurs HC-SR04 sur l'Arduino.
Étape 5 : Préparer le Raspberry Pi
Le Raspberry Pi agit comme client WebSocket vers ARTIK Cloud. Utilise Node.js (à installer). Étapes :
sudo apt-get update
sudo apt-get install nodejs npm
npm install --save ws
npm install serialport
Téléchargez le code source depuis GitHub, modifiez DEVICE ID et DEVICE TOKEN, puis lancez :
sudo node staff-parking.js
Étape 6 : Développer l'application web
Application HTML/JavaScript communiquant avec ARTIK Cloud via WebSocket, intégrant Google Maps API. Téléchargez le dossier web-app depuis GitHub, modifiez les identifiants, ouvrez websocket.html dans un navigateur.
Code
Raspberry Pi (staff-parking) JavaScript
// Transfert données stationnement personnel
var webSocketUrl = "wss://api.artik.cloud/v1.1/websocket?ack=true";
var device_id = "Votre_Device_ID"; var device_token = "Votre_Device_Token";
var WebSocket = require('ws'); var isWebSocketReady = false; var ws = null;
var serialport = require("serialport"); var SerialPort = serialport.SerialPort;
var sp = new SerialPort("/dev/ttyACM0", { baudrate: 9600, parser: serialport.parsers.readline("\n") });
var parking_state = 0;
function getTimeMillis() { return parseInt(Date.now().toString()); }
function start() {
ws = new WebSocket(webSocketUrl);
ws.on('open', function() { console.log("Connexion WebSocket ouverte"); register(); });
ws.on('message', function(data) { handleRcvMsg(data); });
ws.on('close', function() { console.log("Connexion WebSocket fermée"); });
}
function register() {
var registerMessage = '{"type":"register","sdid":"'+device_id+'","Authorization":"bearer '+device_token+'","cid":"'+getTimeMillis()+'"}';
ws.send(registerMessage, {mask: true}); isWebSocketReady = true;
}
function handleRcvMsg(msg) { /* Traitement messages reçus */ }
function sendStateToArtikCloud(parking_slot) {
var ts = ', "ts": '+getTimeMillis();
var data = { "parking_slot": parking_slot };
var payload = '{"sdid":"'+device_id+'"'+ts+',"data":'+JSON.stringify(data)+',"cid":"'+getTimeMillis()+'"}';
ws.send(payload, {mask: true});
}
function exitClosePins() { process.exit(); }
start();
sp.on("open", function() {
sp.on('data', function(data) {
console.log("Données série reçues: " + data);
var parking_slot = parseInt(data);
sendStateToArtikCloud(parking_slot);
});
});
process.on('SIGINT', exitClosePins);
Arduino (sonar) C/C++
#define echoPin1 2 #define trigPin1 3
#define echoPin2 4 #define trigPin2 5
#define echoPin3 6 #define trigPin3 7
long duration1, distance1, duration2, distance2, duration3, distance3;
int count=0, freeSlot=0;
void setup() {
Serial.begin(9600);
pinMode(trigPin1, OUTPUT); pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT); pinMode(echoPin2, INPUT);
pinMode(trigPin3, OUTPUT); pinMode(echoPin3, INPUT);
}
void loop() {
// Mesure distance capteur 1
digitalWrite(trigPin1, LOW); delayMicroseconds(2);
digitalWrite(trigPin1, HIGH); delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
// Capteur 2
digitalWrite(trigPin2, LOW); delayMicroseconds(2);
digitalWrite(trigPin2, HIGH); delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
// Capteur 3
digitalWrite(trigPin3, LOW); delayMicroseconds(2);
digitalWrite(trigPin3, HIGH); delayMicroseconds(10);
digitalWrite(trigPin3, LOW);
duration3 = pulseIn(echoPin3, HIGH);
distance1 = duration1/58.2; if(distance1<10) distance1=1; else distance1=0;
distance2 = duration2/58.2; if(distance2<10) distance2=1; else distance2=0;
distance3 = duration3/58.2; if(distance3<10) distance3=1; else distance3=0;
count = distance1 + distance2 + distance3;
freeSlot = 3 - count; // 3 places totales
Serial.println(freeSlot);
delay(5000); // Mise à jour toutes les 5 secondes (exemple)
}
Application Web (HTML) HTML
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Système de stationnement intelligent ARTIK Cloud</title> <script src="websocket_client.js"></script> <style> ... </style> </head> <body onload="javascript:init()"> ... </body> </html>
Application Web (Côté client) JavaScript
// Interactions temps réel via WebSocket var wsUri = "wss://api.artik.cloud/v1.1/websocket?ack=true"; var device_id = "Votre_Device_ID"; var device_token = "Votre_Device_Token"; // ... code complet de gestion WebSocket, affichage places libres sur carte Google Maps ...
Code source complet
Tous les codes et fichiers nécessaires sont dans ce dépôt GitHub : https://github.com/husinul/Smart-Car-Parking
Schémas
Processus de fabrication
- Constructeurs C# : Types, exemples et patterns avancés
- Maîtriser les directives using C# : Imports, alias et directives static
- Systèmes de gestion de bâtiment : alimenter les smart cities avec l'IoT
- Contrôles d'éclairage intelligents réduisent les factures énergétiques des serres de 33 %
- SensiCut : plateforme de découpe laser avancée identifiant précisément les matériaux
- Systèmes de convoyage : fonctionnement, types et avantages clés
- Maîtriser le cric automobile : types, usages et conseils de sécurité
- Maîtriser la suspension automobile : composants, types, fonctionnement et diagnostic
- Pourquoi le chauffage de ma voiture ne marche qu'en roulant ? Causes et solutions