Информационная система светофора
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
| ||||
|
Об этом проекте
Введение
Трафик может раздражать лучших из нас, и ситуация становится только хуже. Что, если это можно изменить с помощью интеллектуальных светофоров? Мы создали информационную систему светофора, которая позволяет водителю узнать, с какой скоростью ему нужно двигаться, чтобы добраться до перекрестка и проехать на зеленый свет, не превышая максимально допустимой скорости. А когда водителю приходится ждать, пока не загорится красный свет, он сообщает ему, когда свет вот-вот станет зеленым.
Светофор отправляет данные о том, как долго он будет оставаться зеленым или время до следующего зеленого светофора и т. Д., В онлайн-базу данных. GPS или приложение на вашем смартфоне будет извлекать данные из базы данных и вычислять желаемую скорость, чтобы пройти зеленый свет. Он будет отображать оставшееся время ожидания до конца фазы красного света, когда вам неизбежно придется ждать.
Пример
Вы едете в зоне со скоростью 70 км / ч, придерживаясь предела. Светофор перед вами красный, а через 30 секунд он станет зеленым. Вы находитесь в 500 метрах от светофора, поэтому система порекомендует вам двигаться в сторону светофора со скоростью 60 км / ч.
Демонстрация проекта
Как мы это сделали?
Чтобы продемонстрировать наш проект, мы создали светофор с Arduino Yun. Светофор состоит из 3 светодиодов и часов реального времени. Свет будет меняться с заданным интервалом. Arduino Yun экономит время, когда светофор становится зеленым / красным. Затем он запускает файл PHP, который подключается к онлайн-базе данных MySQL и вставляет данные, полученные от Arduino Yun. Приложение Android (созданное с помощью Android Studio) получит дату из этой базы данных. Это делается через другой файл PHP, который возвращает данные светофора в формате JSON. Приложение рассчитывает желаемую скорость и отображает таймер обратного отсчета, когда вы не можете пройти зеленый свет.
Чтобы рассчитать желаемую скорость, приложению необходимо знать расстояние до светофора. Это делается путем расчета расстояния по координатам GPS. Но, к сожалению, GPS в смартфоне недостаточно точен, чтобы подтвердить нашу концепцию, потому что мы работаем в небольших масштабах. Вот почему мы использовали ультразвуковой дальномер (HC-SR04). Arduino Yun получает информацию о расстоянии между автомобилем и светофором через радиочастотные модули 433 МГц. Каждый раз, когда Yun получает новое измерение от другого Arduino, он обновляет данные в базе данных. Теперь приложение может рассчитать желаемую скорость.
Инструкции
1) Создайте онлайн-базу данных MySQL
(Мы использовали freemysqlhosting.net)
2) Добавьте в базу данных таблицу TrafficL_data:
3) Настройте оборудование (передатчик)
Вы можете найти схему «передатчика Arduino» здесь.
4) Загрузите код передатчика Arduino в Arduino
Вы можете найти код здесь.
5) Подключите Arduino Yun к своей сети Wi-Fi .
6) Доступ к Linux-серверу Arduino YUN с помощью Putty:
opkg update opkg install php5-mod-mysqli opkg install php5-cli nano /mnt/sda1/MySQL_UpdateTrafficLData.php
Вы можете найти "MySQL_UpdateTrafficLData.php" здесь.
Если вы видите эту ошибку:«-ash:nano:not found», вам необходимо установить «nano» (это базовый текстовый редактор):
opkg install nano
chmod 755 /mnt/sda1/MySQL_UpdateTrafficLData.php/mnt/sda1/MySQL_UpdateTrafficLData.phpnano /mnt/sda1/MySQL_UpdateDistance.php
Вы можете найти "MySQL_UpdateDistance.php" здесь.
chmod 755 /mnt/sda1/MySQL_UpdateDistance.php/mnt/sda1/MySQL_UpdateDistance.php
7) Настройте оборудование (приемник Arduino Yun)
Вы можете найти схему «приемника Arduino Yun» здесь.
8) Загрузите Arduino Receiver &MySQLdb в Arduino Yun
Вы можете найти код здесь.
9) Откройте монитор последовательного порта .
Вы должны увидеть нечто подобное:
11) Файлы Android Studio
- activity_main.xml
- MainActivity.java *
- AndroidManifest.xml
- strings.xml
* не забудьте изменить URL
Вы можете найти "EchoJSON.php" здесь.
12) Загрузите проект Android Studio на свой смартфон
Инструкции для ESP8266 [дополнительно]
Можно использовать модуль на базе ESP8266 вместо более дорогого Arduino Yun:
1. Создайте учетную запись на https://www.000webhost.com
2. Создайте веб-сайт
3. Создайте новую базу данных
4. Загрузите «CreateTable.php» и «PostDemo.php» с помощью файлового менеджера. Измените «имя пользователя», «пароль» и «имя базы данных» в обоих файлах.
CreateTable.php:
php // Подключаемся к базе данных и создаем таблицу $ servername ="localhost"; $ username ="yourUsername"; $ password ="yourPassword"; $ dbname ="yourDBName"; // Создаем соединение $ conn =new mysqli ($ servername, $ username, $ password, $ dbname); // Проверяем соединение if ($ conn-> connect_error) {die ("Connection failed:". $ conn-> connect_error);} // trafficl_data_v2 есть имя таблицы $ sql ="CREATE TABLE trafficl_data_v2 (UnixTime_green_1 INT (12) NOT NULL, UnixTime_red_1 INT (12) NOT NULL, UnixTime_green_2 INT (12) NOT NULL, UnixTime_red_2 INT (12) NOT NULL, Distance INT (12)» NOT NULL, id INT (6) UNSIGNED AUTO_INCREMENT PRIMARY KEY) "; if ($ conn-> query ($ sql) ===TRUE) {echo" Таблица успешно создана! ";} Else {echo" Ошибка при создании таблицы:" . $ conn-> error;} $ conn-> close ();?>
PostDemo.php:
php // Подключаемся к базе данных и создаем новую запись согласно запросу $ servername ="localhost"; $ username ="yourUsername"; $ password ="yourPassword"; $ dbname ="yourDBName"; / / Создать соединение $ conn =new mysqli ($ servername, $ username, $ password, $ dbname); // Проверить соединение if ($ conn-> connect_error) {die ("Ошибка подключения к базе данных:". $ Conn-> connect_error); } if (! empty ($ _ POST ['UnixTime_green_1']) &&! empty ($ _ POST ['UnixTime_red_1']) &&! empty ($ _ POST ['UnixTime_green_2']) &&! empty ($ _ POST ['UnixTime_red_2']) ) {$ UnixTime_green_1 =$ _POST ['UnixTime_green_1']; $ UnixTime_red_1 =$ _POST ['UnixTime_red_1']; $ UnixTime_green_2 =$ _POST ['UnixTime_green_2']; $ UnixTime_red_2 =$ _POST ['UnixTime_red_2']; $ sql ="ОБНОВЛЕНИЕ` trafficl_data_v2` SET `UnixTime_green_1` ='5',` UnixTime_red_1` ='6', `UnixTime_green_2` ='7',` UnixTime_red_2` ='8', `Distance` ='99 'ГДЕ 1 "; if ($ conn-> query ($ sql) ===TRUE) {echo "Данные успешно вставлены!"; } else {echo "Ошибка:". $ sql. «
». $ conn-> ошибка; }} else {echo "FAILED:неверные параметры";} $ conn-> close ();?>
5. Создайте новую таблицу:выберите «CreateTable.php» и нажмите «просмотреть»
.6. Установите пакеты для ESP8266 в arduino
Добавьте этот URL-файл -> Настройки:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
7.
[ОБНОВЛЕНИЕ от 9 февраля 2019 г.]
Выберите свою плату, COM-порт ... и загрузите ESP8266PostDemo.ino на свою плату на базе ESP8266. Я использую NodeMcu V3 ESP8266 12E. Приведенный ниже код должен работать почти для всех плат на базе ESP8266.
Поскольку у меня больше нет часов, я изменил код, чтобы база данных обновлялась каждые 10 секунд случайными значениями.
ESP8266PostDemo.ino:
#include #include #include #include #define ARRAYSIZE 4 // 4 аргументаconst char * ssid ="yourSSID"; const char * password ="yourPassword"; const char * dest ="http://xxxxx.000webhostapp.com/xxxxx/ ... /xxxxx.php"; // адрес назначения вашего запросаconst char * имя_аргумента [ARRAYSIZE] ={"UnixTime_green_1", "UnixTime_red_1", "UnixTime_green_2", "UnixTime_red_2"}; const String equals_sign ="="; const String ampersand_sign ="&"; void setup () {задержка (1000); Serial.begin (115200); WiFi.mode (WIFI_OFF); // Предотвращает проблему повторного подключения (подключение занимает слишком много времени) delay (1000); WiFi.mode (WIFI_STA); // Эта строка скрывает просмотр ESP как точки доступа Wi-Fi WiFi.begin (ssid, password); Serial.println (""); Serial.print («Подключение»); в то время как (WiFi.status ()! =WL_CONNECTED) {задержка (500); Serial.print ("."); } Serial.println (""); Serial.print («Подключено к»); Serial.println (ssid); Serial.print ("IP-адрес:"); Serial.println (WiFi.localIP ()); } void loop () {HTTPClient http; Строковый параметр =""; параметр + =имя_аргумента [0] + знак_величия + (целое число) случайный (100); for (int i =1; i
php-файл:
php // Подключение к базе данных $ servername ="localhost"; $ username ="yourUsername"; $ password ="вашПароль"; $ dbname ="yourDBName"; // Создание соединения $ conn =new mysqli ($ servername, $ username, $ password, $ dbname); // Проверяем соединение if ($ conn-> connect_error) {die ("Ошибка подключения к базе данных:". $ Conn-> connect_error); } if (! empty ($ _ POST ["UnixTime_green_1"]) &&! empty ($ _ POST ["UnixTime_red_1"]) &&! empty ($ _ POST ["UnixTime_green_2"]) &&! empty ($ _ POST ["UnixTime_red_2"]) ) {$ UnixTime_green_1 =$ _POST ["UnixTime_green_1"]; $ UnixTime_red_1 =$ _POST ["UnixTime_red_1"]; $ UnixTime_green_2 =$ _POST ["UnixTime_green_2"]; $ UnixTime_red_2 =$ _POST ["UnixTime_red_2"]; $ sql ="ОБНОВИТЬ TrafficL_data SET UnixTime_green_1 ='$ UnixTime_green_1', UnixTime_red_1 ='$ UnixTime_red_1', UnixTime_green_2 ='$ UnixTime_green_2', UnixTime_red_2 ='$ UnixTime_red_2' WHERE1"; if ($ conn-> query ($ sql) ===TRUE) {echo "ОК"; } else {echo "Ошибка:". $ sql. «
». $ conn-> ошибка; }}?>
Если вам удалось обновить базу данных, вы можете изменить следующие процедуры в коде arduino «Arduino Receiver &MySQLdb»:
- void MySQL_UpdateTrafficLData ()
- void MySQL_UpdateDistance ()
Обратите внимание:если вы хотите воспроизвести проект, не рекомендуется реализовывать все сразу. Сначала попробуйте протестировать каждый компонент отдельно. Если все они работают хорошо, вы можете начать с комбинирования различных компонентов. Не стесняйтесь обращаться за помощью в разделе комментариев и постарайтесь описать вашу проблему как можно подробнее.
Код
- Код передатчика Arduino
- Приемник Arduino и MySQLdb
- MySQL_UpdateTrafficLData.php
- MySQL_UpdateDistance.php
- EchoJSON
- MainActivity.java
- AndroidManifest.xml
- strings.xml
- activity_main.xml
Код передатчика Arduino Arduino
/ * IOTOPIA - 2016-2017 - Информационная система светофора (передатчик) * от Питера Люйтена и Йоппе Смитса * * Передача расстояния до другого Arduino через модули RF 433 МГц * * Модуль RF 433 МГц:* tx_pin -> контакт 3 * * Модуль HC-SR04:* trig_pin -> pin 5 * echo_pin -> pin 6 * * / # define tx_pin 3 # define trig_pin 5 # define echo_pin 6 # include// Библиотека для модулей RF 433 МГц #include "HCSR04.h" // Библиотека для модуля HC-SR04HCSR04 ultrasonic (trig_pin, echo_pin); int расстояние; char CharMsg [21]; void setup () {Serial.begin (9600); vw_setup (2000); // Бит в секунду vw_set_tx_pin (tx_pin);} void loop () {distance =ultrasonic.Ranging (CM); // Измерьте расстояние в см while (distance <0) {// Избегайте ложных показаний, снова измерьте расстояние distance =ultrasonic.Ranging (CM); } sprintf (CharMsg, "% d,", расстояние); vw_send ((uint8_t *) CharMsg, strlen (CharMsg)); // Отправляем расстояние vw_wait_tx (); // Ждем, пока не исчезнет все сообщение Serial.print ("Distance (cm):"); Serial.println (расстояние); задержка (250);}
Приемник Arduino и MySQLdb Arduino
/ * IOTOPIA - 2016-2017 - Информационная система светофора (приемник + загрузка в MySQLdb) * от Pieter Luyten &Joppe Smeets * * Получение расстояния от другого Arduino через RF * Загрузка данных светофора и расстояния в базу данных MySQL * * Модуль RF 433MHz:* rx_pin -> контакт 3 * * TrafficLight (3 светодиода):* RedLED -> контакт 5 * OrangeLED -> контакт 6 * GreenLED -> контакт 7 * * DS3231 (часы реального времени) :* SCL -> SCL (вывод 3 на Arduino Yun) * SDA -> SDA (вывод 2 на Arduino Yun) * * SD-карта - Arduino Yun * SD-карта (с файлом PHP) -> встроенный слот для SD * / # определить RedLED 5 # определить OrangeLED 6 # определить GreenLED 7 # определить rx_pin 9 # включить// модули RF 433 МГц # include // Аварийные сигналы # include // I2C общение # include "RTClib.h" // Часы реального времени # include // Запуск процессов Linux на AR9331 // UnixTime:время, определяемое как количество секунд, прошедших с 1 января 1970 г. long UnixTime_green_1; // Следующий зеленый свет (в UnixTime) long UnixTime_red_1; // Следующий красный свет (в UnixTime) long UnixTime_green_2; // Дальше один зеленый свет (в UnixTime) long UnixTime_red_2; // Дальше один красный свет (в UnixTime) long s_till_orange; // Секунды до оранжевого RTC_DS3231 rtc; char StringReceived [22]; boolean i; int interval =5; // расстояние в секундах; // в cmvoid setup () {rtc.begin (); //rtc.adjust(DateTime(F(__DATE__), F (__ TIME__))); Serial.begin (9600); Bridge.begin (); // Инициализируем мост vw_setup (2000); // Бит в секунду vw_set_rx_pin (rx_pin); vw_rx_start (); Alarm.timerRepeat (интервал, UpdateTrafficLData); // Обновление данных светофора (следующий зеленый / красный свет ...) Alarm.timerRepeat (1, PrintCurrentTime); // Выводить текущее время каждые x секунд pinMode (GreenLED, OUTPUT); pinMode (OrangeLED, ВЫХОД); pinMode (RedLED, ВЫХОД); digitalWrite (GreenLED, LOW); digitalWrite (OrangeLED, LOW); digitalWrite (RedLED, LOW); Serial.println ("Настройка завершена");} void loop () {Alarm.delay (0); // Эту задержку следует использовать вместо обычной задержки Arduino (), // для своевременной обработки сигналов тревоги и таймеров. Вы можете передать 0 для минимальной задержки. RF_Listen (); } void RF_Listen () {uint8_t buf [VW_MAX_MESSAGE_LEN]; uint8_t buflen =VW_MAX_MESSAGE_LEN; если (vw_get_message (buf, &buflen)) {int a; for (a =0; a 0) {char c =p.read (); Serial.print (c); } // Убедитесь, что последний бит данных отправлен. Serial.flush ();} void MySQL_UpdateDistance () {Процесс p; p.begin ("/ mnt / sda1 / MySQL_UpdateDistance.php"); p.addParameter (String (расстояние)); p.run (); // Считываем отзыв (для отладки) while (p.available ()> 0) {char c =p.read (); Serial.print (c); } // Убедитесь, что последний бит данных отправлен. Serial.flush ();} недействительным PrintCurrentTime () {DateTime now =rtc.now (); SetLEDsTrafficL (); Serial.print (now.hour (), DEC); Серийный принт (':'); Serial.print (now.minute (), DEC); Серийный принт (':'); Serial.print (now.second (), DEC); Serial.print (""); Serial.println (now.unixtime ());} void SetLEDsTrafficL () {DateTime now =rtc.now (); s_till_orange =UnixTime_red_1 - now.unixtime (); если (я ==0) {digitalWrite (GreenLED, LOW); digitalWrite (OrangeLED, LOW); digitalWrite (RedLED, HIGH); } if (i ==1 &&s_till_orange <=3) {digitalWrite (GreenLED, LOW); digitalWrite (OrangeLED, HIGH); digitalWrite (RedLED, LOW); } если (i ==1 &&s_till_orange> 3) {digitalWrite (GreenLED, HIGH); digitalWrite (OrangeLED, LOW); digitalWrite (RedLED, LOW); }}
MySQL_UpdateTrafficLData.php PHP
#! / usr / bin / php-cli php $ UnixTime_green_1 =$ argv [1]; $ UnixTime_red_1 =$ argv [2]; $ UnixTime_green_2 =$ argv [3]; $ UnixTime_red_2 =$ argv [4]; $ DBServer ='yourServerName'; $ DBUser ='yourUserName'; $ DBPass ='yourPassword'; $ DBName ='yourDBName'; $ conn =new mysqli ($ DBServer, $ DBUser, $ DBPass, $ DBName); // проверка соединения if ($ conn-> connect_error) {trigger_error ('Ошибка подключения к базе данных:'. $ conn-> connect_error, E_USER_ERROR);} $ sql ="ОБНОВЛЕНИЕ TrafficL_data SET UnixTime_green_1 ='$ UnixTime_green_1', UnixTime_red_1 ='$ UnixTime_red_1', UnixTime_green_2 ='$ UnixTime_green_2', UnixTime_red_2 ='$ UnixTime_red_2' $ if ) ===false) {trigger_error ('Неверный SQL:'. $ sql. 'Error:'. $ conn-> error, E_USER_ERROR);} else {echo "Данные вставлены! \ n";}?>
MySQL_UpdateDistance.php PHP
#! / usr / bin / php-cli php $ Distance =$ argv [1]; $ DBServer ='yourServerName'; $ DBUser ='yourUserName'; $ DBPass ='yourPassword'; $ DBName =' yourDBName '; $ conn =new mysqli ($ DBServer, $ DBUser, $ DBPass, $ DBName); // проверяем соединение if ($ conn-> connect_error) {trigger_error (' Ошибка подключения к базе данных:'. $ conn-> connect_error, E_USER_ERROR );} $ sql ="ОБНОВИТЬ TrafficL_data SET Distance ='$ Distance'WHERE id =1"; if ($ conn-> query ($ sql) ===false) {trigger_error (' Неверный SQL:'. $ sql. 'Ошибка:'. $ Conn-> error, E_USER_ERROR);} else {echo "Расстояние вставлено! \ N";}?>
EchoJSON PHP
phpdefine ('HOST', 'yourServerName'); define ('USER', 'yourUserName'); define ('PASS', 'yourPassword'); define ('DB', 'yourDBName'); определить ('DB', 'yourDBName'); $ con =mysqli_connect (ХОСТ, ПОЛЬЗОВАТЕЛЬ, ПРОПУСК, БД); $ sql ="выбрать * из TrafficL_data"; $ res =mysqli_query ($ con, $ sql); while ($ row =mysqli_fetch_array ($ res, MYSQLI_BOTH)) {printf ('[{«TrafficLArray»:[{«UnixTime_green_1»:«% s», «UnixTime_red_1»:«% s», «UnixTime_green_2»:«% s) "," UnixTime_red_2 ":"% s "," Distance ":"% s "}]}] ', $ row [' UnixTime_green_1 '], $ row [' UnixTime_red_1 '], $ row [' UnixTime_green_2 '], $ row ['UnixTime_red_2'], $ row ['Distance']);} mysqli_close ($ con); ?>
MainActivity.java Java
package com.example.xxx.xxx; // изменить xxx xxximport android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import com .android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonArrayRequest; import com.android.volley.toolbox.Volley; import org. json.JSONArray; import org.json.JSONException; import org.json.JSONObject; // import java.text.DateFormat; import java.util.Date; import java.util.Timer; // import java.util.TimerTask; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; открытый класс MainActivity расширяет AppCompatActivity {// Будет отображать строковые данные "который содержит результаты TextView results; // Текстовое представление с рекомендованной скоростью TextView recSpeed; // URL анализируемого объекта String JsonURL ="YourURLhere"; // Эта строка будет содержать результаты String data =""; // Определение очереди запросов Volley, которая одновременно обрабатывает URL-запрос RequestQueue requestQueue; // объект таймера для обновления данных каждую секунду // Timer timer; // Ограничение скорости (см / с) private final static double maxSpeed =18; // Рекомендуемая скорость private double speed; // количество раз в таблице public final static int NUMBER_OF_ENTRIES =2; // массив с временами, когда он зеленый long [] unixTimesGreen =new long [NUMBER_OF_ENTRIES]; // массив с временами, когда он красный long [] unixTimesRed =new long [NUMBER_OF_ENTRIES]; // переменная, содержащая расстояние private double distance; // переменные для повторения updateTable private final ScheduledExecutorService scheduler =Executors.newSingleThreadScheduledExecutor (); // для тестирования:private Future > TimingTask; public void tick (длинные миллисекунды) {TimingTask =scheduler.scheduleAtFixedRate (new Runnable () {public void run () {updateTable ();}}, 0, миллисекунды, TimeUnit.MILLISECONDS); } @Override protected void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); // textViews для преобразования результатов в результаты =(TextView) findViewById (R.id.jsonData); recSpeed =(TextView) findViewById (R.id.recommendedSpeed); // инициализируем таблицу updateTable (); // обновляем приложение каждые 100 миллисекунд Tick (500); // для работы с объектом таймера многократно обновлять / ** timer =new Timer ("Timer"); timer.schedule (new UpdateTable (), (long) 100, (long) 100); * /} // для работы с объектом таймера для многократного обновления / ** частный класс UpdateTable extends TimerTask {public void run () {updateTable (); }} * / private void updateTable () {// сбросить String data =""; // Создает очередь запросов Volley requestQueue =Volley.newRequestQueue (this); // для тестирования / ** // Преобразует результаты в TextView, найденные в основном XML макета с идентификатором jsonData results =(TextView) findViewById (R.id.jsonData); * / // Создание класса JsonArrayRequest с именем arrayreq с передачей необходимых параметров // JsonURL - это URL-адрес, который нужно получить из JsonArrayRequest arrayreq =new JsonArrayRequest (JsonURL, // Второй параметр Listener переопределяет метод onResponse () и передает // JSONArray в качестве параметра new Response.Listener() {// Принимает ответ от запроса JSON @Override public void onResponse (JSONArray response) {try {// Извлекает первый объект JSON во внешнем массиве JSONObject TrafficLObj =response.getJSONObject ( 0); // Извлекает "trafficArry" из объекта JSON JSONArray trafficArry =TrafficLObj.getJSONArray ("TrafficLArray"); // Итерирует по массиву JSON, получая объекты и добавляя их // в представление списка, пока в нем больше не останется объектов. trafficArry for (int i =0; i maxSpeed) speed =maxSpeed; иначе скорость =расстояние / ((unixTimesGreen [интервал] -время)); скорость =скорость * 5; }}
AndroidManifest.xml XML
xml version ="1.0" encoding ="utf-8"?>// изменить xxx xxx
strings.xmlXML
"NooitRood", meaning:"NeverRed"NooitRood
activity_main.xmlXML
Схема
RF 433MHz module:tx_pin --> pin 3
HC-SR04 module:
trig_pin --> pin 5
echo_pin --> pin 6 RF 433MHz module:
rx_pin --> pin 3
TrafficLight (3 LEDs):
RedLED --> pin 5
OrangeLED --> pin 6
GreenLED --> pin 7
DS3231 (Real-Time-Clock):
SCL --> SCL (pin 3 on Arduino Yun)
SDA --> SDA (pin 2 on Arduino Yun)
Производственный процесс
- Газовый фонарь
- Лазерная указка
- Калейдоскоп
- Сигнал трафика
- Светоизлучающий диод (светодиод)
- Разрыв в светодиодном фонаре на основе Zigbee
- Проектирование системы времени полета:обзор системы
- Умный светофор
- Новый ИИ автоматически управляет системой дальнего света автомобиля
- Аксессуары для светодиодов – Аксессуары для светодиодных лент