Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Sistema de aparcamiento inteligente: Solución eficiente para aparcamiento urbano

Componentes y suministros

Raspberry Pi 3 Model B ×1
Arduino Mega 2560 ×1
Sensor ultrasónico HC-SR04 ×3

Aplicaciones y servicios online

Sobre el proyecto

Encontrar plaza libre en una ciudad congestionada como Bangalore es muy difícil. La gente sale con el coche y lo primero que piensa es dónde aparcar. A menudo llegan a un parking y está completo, teniendo que buscar otro. Es un gran problema.

Desarrollé un sistema de aparcamiento inteligente basado en la nube usando Samsung ARTIK Cloud, una plataforma IoT ideal. Un usuario puede ver plazas libres desde móvil o app web desde cualquier lugar. El sistema actualiza los datos cada 30 segundos.

Pasos del proyecto

  1. Crear dispositivo en ARTIK Cloud
  2. Crear aplicación en ARTIK Cloud
  3. Crear regla en ARTIK Cloud
  4. Preparar Arduino
  5. Conectar sensores
  6. Preparar Raspberry Pi
  7. Desarrollar aplicación web

Paso 1: Crear dispositivo en ARTIK Cloud

Accede a tu cuenta Samsung → Developer → Device Types → New. Pon nombre y nombre único. Añade manifest con campo parking_slot (integer). Guarda, omite acciones, activa manifest. Luego ve a My ARTIK Cloud → Devices → Add another device → selecciona tu dispositivo → Connect Device → genera Token. Anota Device ID y Device Token.

Paso 2: Crear regla en ARTIK Cloud

En Rules → New Rule. Define condición (IF) sobre campo de datos del dispositivo y acción (THEN) para otro dispositivo/app. Guarda regla.

Paso 3: Preparar Arduino

El Arduino Mega lee 3 sensores ultrasónicos HC-SR04 (cada uno monitoriza una plaza) y envía el número de plazas libres por puerto serie a la Raspberry Pi cada 5 segundos (configurable a 30s). Sube el sketch sonar.ino.

Paso 4: Conectar sensores

Sistema de aparcamiento inteligente: Solución eficiente para aparcamiento urbano

Paso 5: Preparar Raspberry Pi

La Raspberry Pi actúa como cliente WebSocket hacia ARTIK Cloud. Usa Node.js.

# Instalar Node.js y npm
sudo apt-get update && sudo apt-get install nodejs npm
# Instalar cliente WebSocket y serialport
npm install --save ws
npm install serialport

Descarga staff-parking.js desde GitHub, sube a la Pi (ej. FileZilla), edita device_id y device_token. Ejecuta: sudo node staff-parking.js.

Paso 6: Desarrollar aplicación web

HTML + JavaScript + WebSocket + Google Maps API. Descarga carpeta web-app de GitHub, modifica Device ID/Token del dispositivo que genera la acción (en mi caso Edison). Abre websocket.html en navegador.

Código

Raspberry Pi (staff-parking.js) - Node.js

// staff-parking.js - Envía datos de plazas libres a ARTIK Cloud vía WebSocket
var webSocketUrl = "wss://api.artik.cloud/v1.1/websocket?ack=true";
var device_id = "TU_DEVICE_ID";
var device_token = "TU_DEVICE_TOKEN";

var WebSocket = require('ws');
var ws = null;
var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
var sp = new SerialPort("/dev/ttyACM0", { baudrate: 9600, parser: serialport.parsers.readline("\n") });

function getTimeMillis() { return parseInt(Date.now().toString()); }

function start() {
  ws = new WebSocket(webSocketUrl);
  ws.on('open', function() {
    console.log("WebSocket abierto");
    register();
  });
  ws.on('message', handleRcvMsg);
  ws.on('close', function() { console.log("WebSocket cerrado"); });
}

function register() {
  var msg = '{"type":"register","sdid":"'+device_id+'","Authorization":"bearer '+device_token+'","cid":"'+getTimeMillis()+'"}';
  ws.send(msg, {mask: true});
}

function handleRcvMsg(msg) {
  var obj = JSON.parse(msg);
  if (obj.type != "action") return;
  // Procesar acciones si se reciben
}

function sendStateToArtikCloud(parking_slot) {
  var payload = '{"sdid":"'+device_id+'","ts":'+getTimeMillis()+',"data":'+JSON.stringify({parking_slot:parking_slot})+',"cid":"'+getTimeMillis()+'"}';
  ws.send(payload, {mask: true});
}

sp.on("open", function() {
  sp.on('data', function(data) {
    var slot = parseInt(data);
    sendStateToArtikCloud(slot);
  });
});

process.on('SIGINT', function() { process.exit(); });
start();

Arduino (sonar.ino) - C/C++

// sonar.ino - Lee 3 sensores HC-SR04 y envía plazas libres por Serial
#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() {
  // Sensor 1
  digitalWrite(trigPin1, LOW); delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH); delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  duration1 = pulseIn(echoPin1, HIGH);
  distance1 = duration1/58.2;
  distance1 = (distance1 < 10) ? 1 : 0; // 1 = ocupado

  // Sensor 2
  digitalWrite(trigPin2, LOW); delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH); delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  duration2 = pulseIn(echoPin2, HIGH);
  distance2 = duration2/58.2;
  distance2 = (distance2 < 10) ? 1 : 0;

  // Sensor 3
  digitalWrite(trigPin3, LOW); delayMicroseconds(2);
  digitalWrite(trigPin3, HIGH); delayMicroseconds(10);
  digitalWrite(trigPin3, LOW);
  duration3 = pulseIn(echoPin3, HIGH);
  distance3 = duration3/58.2;
  distance3 = (distance3 < 10) ? 1 : 0;

  count = distance1 + distance2 + distance3; // total coches
  freeSlot = 3 - count; // plazas totales - ocupadas
  Serial.println(freeSlot);
  delay(5000); // actualizar cada 5s (cambiar a 30000 para 30s)
}

Aplicación Web (HTML + JavaScript)

Incluye websocket.html (frontend con Google Maps) y websocket_client.js (cliente WebSocket que recibe acciones de ARTIK Cloud y actualiza contadores de plazas libres en dos parkings: "Staff Parking" y "Student/Guest Parking").

Todo el código necesario está en el repositorio GitHub: https://github.com/husinul/Smart-Car-Parking

Esquemáticos

Sistema de aparcamiento inteligente: Solución eficiente para aparcamiento urbano
Sistema de aparcamiento inteligente: Solución eficiente para aparcamiento urbano
Sistema de aparcamiento inteligente: Solución eficiente para aparcamiento urbano

Proceso de manufactura

  1. Barman Inteligente: Construye tu Propia Estación de Cócteles con Raspberry Pi
  2. Sistemas de transporte explicados: Funcionamiento, tipos y beneficios clave
  3. Dominando tu gato hidráulico: Tipos, usos y consejos de seguridad
  4. Domina el Sistema de Suspensión de tu Vehículo: Protege tu Coche y Mejora la Comodidad
  5. ¿Por Qué el Calefactor del Coche Solo Funciona Conduciendo? Causas y Soluciones
  6. Cómo los sistemas de compresor inteligentes mejoran la eficiencia de la instalación
  7. Controles de Iluminación Inteligentes Reducen Facturas Energéticas de Invernaderos hasta 33%
  8. SensiCut: Plataforma Avanzada de Cortadora Láser Identifica Materiales con Precisión
  9. Sistemas de gestión de edificios: Impulsando ciudades inteligentes con IoT
  10. Constructores en C#: Tipos, ejemplos y patrones avanzados
  11. Dominando las Sentencias Using en C#: Importaciones, Alias y Directivas Estáticas