Счетчик автомобилей с использованием Arduino + Обработка + PHP
Компоненты и расходные материалы
![]() |
| × | 1 | |||
![]() |
| × | 2 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
Приложения и онлайн-сервисы
![]() |
| |||
![]() |
| |||
| ||||
|
Об этом проекте
Введение
Этот проект демонстрирует, как можно использовать Arduino . чтобы подсчитать количество автомобилей, которые входят в торговый центр и выезжать из него с помощью двух датчиков, отправить данные в облако с помощью обработки и PHP, а затем просмотреть количество доступных мест на парковке. Для этого проекта вам не нужен экран Ethernet или Wi-Fi!
Как это работает
Датчики необходимо разместить на въезде и выезде с парковки, чтобы это работало должным образом. Обычно вы увеличиваете счет каждый раз, когда заезжает машина, и уменьшаются, когда гаснет. Светодиод в системе просто указывает на то, что автомобиль считается правильно, поскольку он загорается каждый раз, когда автомобиль проезжает через датчик.
Обработка
Обработка является языком с открытым исходным кодом / инструментом разработки для написания программ на других компьютерах. Полезно, когда вы хотите, чтобы эти другие компьютеры «разговаривали» с Arduino, например, чтобы отображать или сохранять некоторые данные, собранные Arduino.
В этом проекте мы использовали Обработку для получения данных (количество автомобилей) отправляется Arduino через последовательный порт. Загрузите и установите Processing IDE на свой компьютер. В прилагаемом скетче Processing вы можете увидеть очень простые и понятные строки кода. Здесь мы вызываем файл PHP с помощью метода loadStrings () .

PHP
PHP-файл post-message.php - это тот же файл, что и в руководстве, которое можно найти здесь. Мы загрузили весь zip-файл со страницы Github и отредактировали несколько строк кода в исходном файле, чтобы мы могли использовать его, не входя в нашу учетную запись Samsung. Чтобы это сработало, вам нужно будет следовать приведенным здесь инструкциям по изменению порта вашего сервера WAMP или XAMP и установке сертификата CA для ARTIK Cloud. В качестве альтернативы вы можете использовать удаленный или размещенный сервер с установленным сертификатом SSL.
Скопируйте файлы в папку, скажем, acdemo чтобы к нему можно было получить доступ, используя URL-адрес http:// localhost:8000 / acdemo / post-message.php или https://www.yourwebsite.com/acdemo/post-message.php
В PHP SDK есть только два файла, которые вам нужно отредактировать: ArtikCloudProxy.php и post-message.php . Вы можете просмотреть свой идентификатор клиента и устройства здесь.

В post-message.php файла, вам необходимо получить токен доступа и идентификатор устройства. Самый простой способ получить токен - выполнить следующие действия. Обратите внимание, что единственные данные, которые мы отправляем в облако, - это количество автомобилей . который входит и выходит из торгового центра. Мы создали устройство в Artik Cloud и назвали его Car Counter . с полем счет который содержит это значение.
Теперь, когда все настроено, пора приступить к работе! Выполните следующие простые шаги:
Артик Клауд
- 1. Войдите в свою учетную запись Artik Cloud и перейдите в Приложения .> Новое приложение

- 2. Введите необходимые данные для своего приложения на следующем экране.
- 3. Как только вы закончите создание своего приложения, на вашей панели управления отобразится значок if. Щелкните имя приложения и найдите Показать идентификатор и секрет клиента . . Эти коды нужны вам для файлов PHP.

- 4. В боковом меню выберите свое приложение и нажмите Разрешения . . Добавить Счетчик автомобилей из списка типов устройств и установите флажок Читать & Написать разрешения.

Кодирование
- 1. Загрузите скетч на ваш Arduino UNO. Если вы впервые используете Arduino, выполните следующие действия, чтобы понять, как выполнять эту процедуру.
- 2. Запустите Обработку скетч в Processing IDE. Убедитесь, что ваш сервер WAMP включен . на этом этапе, если вы используете локальный компьютер вместо размещенного сервера.
- 3. Если вы успешно соединили части для этой системы на основе схемы подключения выше, пройдите через датчик PIR, чтобы проверить, работает ли он.
- 4. Войдите в свою учетную запись Artik Cloud, чтобы проверить, правильно ли отправляются данные.

Устранение неполадок
- 1. Откройте ссылку ниже, чтобы узнать, правильно ли отправляются данные в Artik Cloud. Если ничего не пойдет не так, отобразится файл Json. Если вы не видите файл Json, возможно, вы не установили сертификат SSL, как описано выше. Попробуйте вернуться и убедитесь, что правильно следуете указаниям.
http:// localhost:8000 / acdemo / post-message.php? count =10
Что делать дальше
Основываясь на приведенных выше данных о количестве автомобилей, вы можете создать приложение для торгового центра, чтобы покупатели могли просматривать количество доступных мест на парковке перед тем, как отправиться в торговый центр. Вы также можете добавить еще один световой индикатор, который включается, когда парковка заполнена или нет.
Код
- Код Arduino
- Обработка эскиза
- post-message.php
- ArtikCloudProxy.php
Код Arduino Arduino
Это код, который отображает количество автомобилей в последовательном порту и включает светодиод, чтобы указать, что автомобиль проходит через датчик PIR.int pirPinIN =7; int pirPinOUT =10; int led =13; static long counter =0; void setup () {pinMode (pirPinIN, INPUT); pinMode (pirPinOUT, INPUT); pinMode (светодиод, ВЫХОД); digitalWrite (светодиод, НИЗКИЙ); Serial.begin (9600);} void loop () {long now =millis (); если (digitalRead (pirPinIN) ==HIGH) {counter ++; Serial.println (счетчик); digitalWrite (светодиод, ВЫСОКИЙ); задержка (500); digitalWrite (светодиод, НИЗКИЙ); } если (digitalRead (pirPinOUT) ==HIGH) {counter--; Serial.println (счетчик); digitalWrite (светодиод, ВЫСОКИЙ); задержка (500); digitalWrite (светодиод, НИЗКИЙ); }}
Обработка эскиза Java
Этот скетч обработки считывает входящие значения на аналоговых портах, а затем использует функции последовательной связи для вывода значений.import processing.serial. *; Serial myPort; // Создание объекта из Serial classString val; // Данные, полученные от последовательного портаvoid setup () {// Я знаю, что первым портом в списке последовательных портов на моем Mac // является Serial.list () [0]. // На компьютерах с Windows это обычно открывает COM1. // Открываем тот порт, который вы используете. Строка portName =Serial.list () [0]; // измените 0 на 1 или 2 и т. д. в соответствии с вашим портом myPort =new Serial (this, portName, 9600);} void draw () {if (myPort.available ()> 0) {// Если данные доступно, val =myPort.readStringUntil ('\ n'); // прочитать и сохранить в val int count =parseInt (val); if (count> =0) {loadStrings ("http:// localhost:8000 / acdemo / post-message.php? count =" + val); }} println (val); // распечатываем в консоли}
post-message.php PHP
Этот код ПОЛУЧАЕТ значение, переданное скетчем обработки, и POST счетчик в облако.Php $ count =filter_input (INPUT_GET, 'count', FILTER_SANITIZE_NUMBER_INT); require ('ArtikCloudProxy.php'); $ proxy =new ArtikCloudProxy (); $ proxy-> setAccessToken ("YOUR_ACCESS_TOKEN"); $ data ='{"count":'. $ count. '}'; $ payload =array ("data" => $ data, "sdid" => "YOUR_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 PHP
Это класс ArtikCloudProxy, необходимый для подключения к облаку Artik. Сохраните его в той же папке, что и post-message.php, где-нибудь в Интернете. Внесите необходимые изменения в конфигурацию.Php / ** * Вспомогательный класс ARTIK Cloud, который взаимодействует с ARTIK Cloud * * / class ArtikCloudProxy {# Общая конфигурация const CLIENT_ID ="YOUR_CLIENT_ID"; const DEVICE_ID ="ВАШЕ_УСТРОЙСТВО_ID"; const API_URL ="https://api.artik.cloud/v1.1"; # Пути API const API_USERS_SELF ="/ users / self"; const API_MESSAGES_LAST ="/ messages / last? sdids =<УСТРОЙСТВА> &count ="; const API_MESSAGES_POST ="/ сообщения"; # Участники public $ token =null; общедоступный $ user =null; общедоступная функция __construct () {} / ** * Устанавливает токен доступа и ищет информацию профиля пользователя * / общедоступная функция setAccessToken ($ someToken) {$ this-> token =$ someToken; $ this-> user =$ this-> getUsersSelf (); } / ** * вызов API GET * / общедоступная функция getCall ($ url) {$ ch =curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_HTTPGET, истина); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, истина); curl_setopt ($ ch, CURLOPT_HEADER, ложь); curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ('Content-Type:application / json', 'Authorization:bearer'. $ this-> token)); $ json =curl_exec ($ ch); $ status =curl_getinfo ($ ch, CURLINFO_HTTP_CODE); curl_close ($ ch); если ($ status ==200) {$ response =json_decode ($ json); } еще {var_dump ($ json); $ response =$ json; } return $ response; } / ** * API-вызов POST * / общедоступная функция postCall ($ url, $ payload) {$ ch =curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url); curl_setopt ($ ch, CURLOPT_POST, истина); curl_setopt ($ ch, CURLOPT_POSTFIELDS, (String) $ payload); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, истина); curl_setopt ($ ch, CURLOPT_HEADER, ложь); curl_setopt ($ ch, CURLOPT_HTTPHEADER, array ('Content-Type:application / json', 'Authorization:bearer'. $ this-> token)); $ json =curl_exec ($ ch); $ status =curl_getinfo ($ ch, CURLINFO_HTTP_CODE); curl_close ($ ch); если ($ status ==200) {$ response =json_decode ($ json); } еще {var_dump ($ json); $ response =$ json; } return $ response; } / ** * GET / users / self API * / общедоступная функция getUsersSelf () {return $ this-> getCall (ArtikCloudProxy ::API_URL. ArtikCloudProxy ::API_USERS_SELF); } / ** * POST / API сообщений * / общедоступная функция sendMessage ($ payload) {return $ this-> postCall (ArtikCloudProxy ::API_URL. ArtikCloudProxy ::API_MESSAGES_POST, $ payload); } / ** * ПОЛУЧИТЬ / исторический / нормализованный / сообщения / последний API * / общедоступная функция getMessagesLast ($ deviceCommaSeparatedList, $ countByDevice) {$ apiPath =ArtikCloudProxy ::API_MESSAGES_LAST; $ apiPath =str_replace ("<УСТРОЙСТВА>", $ deviceCommaSeparatedList, $ apiPath); $ apiPath =str_replace (" ", $ countByDevice, $ apiPath); return $ this-> getCall (ArtikCloudProxy ::API_URL. $ apiPath); }}
Схема
Схема подключения 2-х датчиков PIR и светодиода

Производственный процесс
- Затемнение света с ШИМ с помощью кнопки
- Ультразвуковой левитационный аппарат с использованием ARDUINO
- IOT - Smart Jar с использованием ESP8266, Arduino и ультразвукового датчика
- Железный человек
- Найди меня
- Как измерить массу Земли с помощью Arduino
- Управление увлажнителем Arduino
- Сонар с использованием Arduino и отображение при обработке IDE
- Идея ко Дню Святого Валентина - счетчик дней, проведенных вместе (фото)
- Как сделать компас с помощью Arduino и Processing IDE