Contador Inteligente de Plazas de Aparcamiento: Seguimiento en Tiempo Real con Arduino, Processing y PHP
Componentes y materiales
- 1 × Arduino UNO
- 2 × Sensor PIR (entrada y salida)
- 1 × LED (indicador)
- 1 × Protoboard y cables jumper
Aplicaciones y servicios en línea
- Arduino IDE
- Processing (IDE)
- PHP (servidor local WAMP/XAMPP o hosting)
- Samsung ARTIK Cloud (IoT)
Sobre el proyecto
Introducción
Sistema que cuenta vehículos en un parking usando dos sensores PIR (entrada/salida), envía el conteo a la nube vía Processing + PHP (sin shield Ethernet/WiFi) y permite consultar plazas libres.
Funcionamiento
- Sensor PIR entrada: incrementa contador.
- Sensor PIR salida: decrementa contador.
- LED parpadea al detectar vehículo.
- Arduino envía contador por puerto serie (9600 baudios).
- Processing lee el puerto serie y llama a
post-message.phpcon el valor. - PHP envía el dato a ARTIK Cloud (dispositivo "Car Counter", campo "count").
Configuración ARTIK Cloud
- Crear aplicación en ARTIK Cloud → obtener Client ID/Secret.
- Crear dispositivo "Car Counter" con campo "count".
- Dar permisos Read/Write a la app.
- Configurar PHP con Access Token y Device ID.
Código
Arduino (contador + serie)
int pirIn = 7, pirOut = 10, led = 13;
static long counter = 0;
void setup() {
pinMode(pirIn, INPUT);
pinMode(pirOut, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (digitalRead(pirIn) == HIGH) {
counter++;
Serial.println(counter);
digitalWrite(led, HIGH); delay(500); digitalWrite(led, LOW);
}
if (digitalRead(pirOut) == HIGH) {
counter--;
Serial.println(counter);
digitalWrite(led, HIGH); delay(500); digitalWrite(led, LOW);
}
}
Processing (lectura serie + llamada PHP)
import processing.serial.*;
Serial myPort;
String val;
void setup() {
String portName = Serial.list()[0]; // Ajusta índice según tu SO
myPort = new Serial(this, portName, 9600);
}
void draw() {
if (myPort.available() > 0) {
val = myPort.readStringUntil('\n');
int count = parseInt(val);
if (count >= 0) {
loadStrings("https://localhost:8000/acdemo/post-message.php?count=" + val);
}
}
println(val);
}
post-message.php (recibe GET → POST a ARTIK)
setAccessToken("TU_ACCESS_TOKEN");
$data = '{"count":' . $count . '}';
$payload = array("data"=>$data, "sdid"=>"TU_DEVICE_ID", "type"=>"message");
$payload = json_encode($payload, JSON_HEX_QUOT | JSON_HEX_TAG);
$response = $proxy->sendMessage($payload);
header('Content-Type: application/json');
echo json_encode($response);
?>
ArtikCloudProxy.php (clase auxiliar)
token = $t; $this->user = $this->getUsersSelf(); }
public function postCall($url, $payload) { /* cURL POST con Authorization: bearer */ }
public function sendMessage($payload) { return $this->postCall(self::API_URL . self::API_MESSAGES_POST, $payload); }
// ... getCall, getUsersSelf, getMessagesLast
}
?>
Esquemático
Diagrama de conexiones: 2 sensores PIR (pines 7 y 10) + LED en pin 13, alimentación común.
Proceso de manufactura
- Control de Brillo LED con PWM mediante Pulsador en Arduino Mega
- Construye un Dispositivo de Levitación Ultrasónica con Arduino – Guía Paso a Paso
- Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
- Construye un Iron Man animado con Arduino: componentes, sensores y guía paso a paso
- Find Me: Localizador Inteligente de Objetos con Arduino y Bluetooth
- Mide la masa de la Tierra con Arduino: Guía paso a paso DIY
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Medición de Distancia en Tiempo Real con Sonar Arduino y Visualización en Processing
- Integración del Sensor de Pulso MAX30100 con Arduino: Guía Paso a Paso
- Regalo de San Valentín: Contador DIY de Días Juntos
- Construye una Brújula Digital en Tiempo Real con Arduino y Processing