Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Умная парковка: IoT-система на Raspberry Pi и Arduino для городской среды

Компоненты и материалы

Raspberry Pi 3 Model B 1
Arduino Mega 2560 1
Ультразвуковой датчик HC-SR04 3

Приложения и сервисы

О проекте

Поиск свободного парковочного места в загруженном городе (Бенгалуру) — настоящая проблема. Водители тратят время на поиск, часто приезжая на заполненные паркинги.

Решение — облачная система умной парковки на платформе Samsung ARTIK Cloud. Пользователь через веб/мобильное приложение видит свободные места в реальном времени. Данные обновляются каждые 30 секунд.

Этапы проекта

  1. Создание устройства в ARTIK Cloud
  2. Создание приложения в ARTIK Cloud
  3. Настройка правил (Rules) в ARTIK Cloud
  4. Подготовка Arduino (сбор данных с датчиков)
  5. Подключение ультразвуковых датчиков
  6. Настройка Raspberry Pi (WebSocket-клиент к ARTIK)
  7. Разработка веб-приложения (HTML/JS + Google Maps)

Шаг 1: Устройство в ARTIK Cloud

Войдите в Samsung Account → Developer Dashboard → Device Types → New.

Шаг 2: Правила (Rules) в ARTIK Cloud

Rules → New Rule. Условие (IF): поле данных устройства + условие. Действие (THEN): действие для устройства/приложения. Можно использовать данные другого устройства. Сохраните правило.

Шаг 3: Подготовка Arduino

Arduino Mega опрашивает 3 датчика HC-SR04 на парковочных местах, считает свободные слоты и отправляет число в Raspberry Pi по Serial (USB) каждые 5 секунд (в коде 5000 мс).

Шаг 4: Подключение датчиков

Умная парковка: IoT-система на Raspberry Pi и Arduino для городской среды

Шаг 5: Настройка Raspberry Pi

Raspberry Pi работает как WebSocket-клиент ARTIK Cloud. Нужен Node.js.

sudo apt-get update
sudo apt-get install nodejs npm
npm install --save ws
npm install serialport

Скачайте исходник staff-parking.js с GitHub, замените DEVICE_ID и DEVICE_TOKEN, загрузите на Pi (FileZilla), запустите:

sudo node staff-parking.js

Шаг 6: Веб-приложение

HTML/JS + WebSocket + Google Maps API. Скачайте папку web-app с GitHub, вставьте свои Device ID/Token, откройте websocket.html в браузере.

Код

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

var webSocketUrl = "wss://api.artik.cloud/v1.1/websocket?ack=true";
var device_id = "Your Device ID";
var device_token = "Your Device Token";

var WebSocket = require('ws');
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 open");
    register();
  });
  ws.on('message', handleRcvMsg);
  ws.on('close', function() { console.log("WebSocket closed"); });
}

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;
  // обработка действий, если нужны
}

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});
}

start();

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

Arduino (sonar.ino) — опрос HC-SR04


#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 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() {
  // Опрос 3 датчиков
  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; // занято/свободно

  // ... аналогично для датчиков 2 и 3 ...

  int count = distance1 + distance2 + distance3; // занятые
  freeSlot = 3 - count; // всего 3 места
  Serial.println(freeSlot);
  delay(5000); // обновление каждые 5 сек (в проекте 30 сек)
}

Веб-приложение (HTML + JS)

Файл websocket.html с подключением websocket_client.js, Google Maps, отображение свободных слотов для двух паркингов (Staff/Student).

Исходный код на GitHub

https://github.com/husinul/Smart-Car-Parking

Схемы

Умная парковка: IoT-система на Raspberry Pi и Arduino для городской среды
Умная парковка: IoT-система на Raspberry Pi и Arduino для городской среды
Умная парковка: IoT-система на Raspberry Pi и Arduino для городской среды

Производственный процесс

  1. Конструкторы в C#: виды, примеры и продвинутые паттерны
  2. Освоение операторов using в C#: импорт, псевдонимы и статические директивы
  3. Умный бармен: создайте свою Raspberry Pi-станцию для коктейлей
  4. Системы управления зданиями: питание умных городов с IoT
  5. Умное освещение теплиц снижает счета за электричество до 33%
  6. SensiCut: Продвинутая платформа лазерного резака точно идентифицирует материалы
  7. Конвейерные системы: принцип работы, виды и ключевые преимущества
  8. Автодомкраты: виды, применение и правила безопасности
  9. Подвеска автомобиля: функции, компоненты, типы, принцип работы и требования
  10. Почему печь автомобиля работает только на ходу: причины и устранение