Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Ampelinformationssystem

Komponenten und Verbrauchsmaterialien

Arduino Yun
× 1
Arduino UNO
oder jedes andere Arduino-Board
× 1
Ultraschallsensor - HC-SR04 (Generic)
× 1
DS3231 RTC
Echtzeituhr
× 1
LED (generisch)
1 x rote LED, 1 x gelbe LED, 1 x grüne LED
× 3
Widerstand 330 Ohm
× 3
433 MHz Module
1 x Sender, 1 x Empfänger
× 1
Android-Gerät
× 1
SD-Karte
× 1
AllThingsTalk IOTOPIA Rapid Development Kit
× 1
Jumper (generisch)
× 1

Apps und Onlinedienste

Arduino-IDE
Android Studio
MySQL-Datenbank-Hosting-Dienst

Über dieses Projekt

Einführung

Der Verkehr kann die Besten von uns irritieren, und er wird immer schlimmer. Was ist, wenn sich das mit intelligenten Ampeln ändern lässt? Wir haben ein Ampel-Informationssystem entwickelt, das dem Fahrer mitteilt, mit welcher Geschwindigkeit er fahren muss, um an der Kreuzung zu kommen und die grüne Ampel zu passieren, ohne die Höchstgeschwindigkeit zu überschreiten. Und wenn der Fahrer auf die unvermeidliche rote Ampel warten muss, wird er informiert, wenn die Ampel gleich grün wird.

Eine Ampel sendet Daten darüber, wie lange sie grün bleibt oder die Zeit bis zur nächsten grünen Ampel usw. an eine Online-Datenbank. Ein GPS oder eine Anwendung auf Ihrem Smartphone ruft Daten aus der Datenbank ab und berechnet die gewünschte Geschwindigkeit, um die grüne Ampel zu passieren. Es wird die verbleibende Wartezeit bis zum Ende der Rotlichtphase angezeigt, wenn eine Wartezeit unvermeidbar ist.

Beispiel

Sie fahren in einer 70-km/h-Zone und halten sich am Limit. Die Ampel vor Ihnen ist rot und die Ampel wird in 30 Sekunden gleich grün. Sie befinden sich 500 Meter von der Ampel entfernt, daher empfiehlt Ihnen das System, mit 60 km/h in Richtung der Ampel zu fahren.

Projektdemonstration

Wie haben wir es geschafft?

Um unser Projekt zu demonstrieren, haben wir mit dem Arduino Yun eine Ampel erstellt. Die Ampel besteht aus 3 LEDs und einer Real-Time-Clock. Die Lichter ändern sich in einem bestimmten Intervall. Der Arduino Yun spart die Zeit, in der die Ampel grün/rot wird. Dann führt es eine PHP-Datei aus, die eine Verbindung zur Online-MySQL-Datenbank herstellt und die vom Arduino Yun empfangenen Daten einfügt. Eine Android-App (erstellt mit Android Studio) ruft das Datum aus dieser Datenbank ab. Dies geschieht über eine weitere PHP-Datei, die die Ampeldaten im JSON-Format zurückliefert. Die App berechnet die gewünschte Geschwindigkeit und zeigt einen Countdown-Timer an, wenn Sie das grüne Licht nicht passieren können.

Um die gewünschte Geschwindigkeit zu berechnen, muss die App die Entfernung zur Ampel kennen. Dies geschieht durch Berechnung der Entfernung anhand der GPS-Koordinaten. Aber leider ist ein GPS in einem Smartphone nicht präzise genug, um unser Konzept zu beweisen, da wir im kleinen Maßstab arbeiten. Aus diesem Grund haben wir das Ultraschall-Entfernungsmodul (HC-SR04) verwendet. Den Abstand zwischen Auto und Ampel erhält der Arduino Yun über 433 MHz HF-Module. Jedes Mal, wenn der Yun eine neue Messung vom anderen Arduino erhält, aktualisiert er die Daten in der Datenbank. Jetzt kann die App die gewünschte Geschwindigkeit berechnen.

Anleitung

1) Erstellen Sie eine Online-MySQL-Datenbank

(Wir haben freemysqlhosting.net verwendet)

2) Fügen Sie der Datenbank eine Tabelle 'TrafficL_data' hinzu:

3) Hardware (Sender) einrichten

Den Schaltplan 'Arduino-Sender' finden Sie hier.

4) Laden Sie den Arduino-Sendercode auf den Arduino hoch

Den Code finden Sie hier.

5) Verbinden Sie den Arduino Yun mit Ihrem WLAN-Netzwerk

6) Greifen Sie mit Putty auf den Linux-Server von Arduino YUN zu:

opkg aktualisieren opkg installieren php5-mod-mysqli opkg installieren php5-cli nano /mnt/sda1/MySQL_UpdateTrafficLData.php 

Sie finden 'MySQL_UpdateTrafficLData.php' hier.

Wenn Sie diesen Fehler sehen:'-ash:nano:not found', müssen Sie 'nano' installieren (dies ist ein einfacher Texteditor):

opkg install nano 

chmod 755 /mnt/sda1/MySQL_UpdateTrafficLData.php/mnt/sda1/MySQL_UpdateTrafficLData.phpnano /mnt/sda1/MySQL_UpdateDistance.php 

Sie finden 'MySQL_UpdateDistance.php' hier.

chmod 755 /mnt/sda1/MySQL_UpdateDistance.php/mnt/sda1/MySQL_UpdateDistance.php 

7) Richten Sie die Hardware ein (Arduino Yun-Empfänger)

Den Schaltplan des 'Arduino Yun-Empfängers' finden Sie hier.

8) Laden Sie 'Arduino Receiver &MySQLdb' auf den Arduino Yun hoch

Den Code finden Sie hier.

9) Öffnen Sie den seriellen Monitor

Sie sollten etwas Ähnliches sehen:

11) Android Studio-Dateien

  • activity_main.xml
  • MainActivity.java*
  • AndroidManifest.xml
  • strings.xml

*vergessen Sie nicht, die URL zu ändern

Sie finden 'EchoJSON.php' hier.

12) Laden Sie das Android Studio-Projekt auf Ihr Smartphone hoch

Anleitung für ESP8266 [zusätzlich]

Es ist möglich, ein ESP8266-basiertes Modul anstelle des teureren Arduino Yun zu verwenden:

1. Erstellen Sie ein Konto auf https://www.000webhost.com

2. Erstellen Sie eine Website

3. Erstellen Sie eine neue Datenbank

4. Laden Sie ‚CreateTable.php‘ und ‚PostDemo.php‘ mit dem Dateimanager hoch. Ändern Sie in beiden Dateien „Benutzername“, „Passwort“ und „Datenbankname“.

CreateTable.php:

connect_error) { die("Verbindung fehlgeschlagen:" . $conn->connect_error);}// trafficl_data_v2 is the name of the table$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 "Tabelle erfolgreich erstellt!";} else { echo "Fehler beim Erstellen der Tabelle:" . $conn->error;}$conn->close();?> 

PostDemo.php:

connect_error) { die("Datenbankverbindung fehlgeschlagen:" . $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 ="UPDATE `trafficl_data_v2` SET `UnixTime_green_1`='5',`UnixTime_red_1`='6',`UnixTime_green_2`='7',`UnixTime_red_2`='8',`Distance`='99' WHERE 1 "; if ($conn->query($sql) ===TRUE) { echo "Daten erfolgreich eingefügt!"; } else { echo "Fehler:" . $sql. "
" . $conn->Fehler; }}else { echo "FAILED:falsche Parameter";}$conn->close();?>

5. Erstellen Sie eine neue Tabelle:Wählen Sie 'CreateTable.php' und klicken Sie auf 'Ansicht'

6. Installieren Sie die Pakete für den ESP8266 in arduino

Diese URL-Datei hinzufügen --> Einstellungen:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

7.

[AKTUALISIERUNG 9. Februar 2019]

Wählen Sie Ihr Board, COM-Port ... und laden Sie ESP8266PostDemo.ino auf Ihr ESP8266-basiertes Board hoch. Ich verwende einen NodeMcu V3 ESP8266 12E. Der folgende Code sollte für fast alle ESP8266-basierten Boards funktionieren.

Da ich keine Uhr mehr zur Hand habe, habe ich den Code so geändert, dass die Datenbank alle 10 Sekunden mit Zufallswerten aktualisiert wird.

ESP8266PostDemo.ino:

#include #include  #include #include #define ARRAYSIZE 4 // 4 argumentsconst char* ssid ="yourSSID"; const char* password ="IhrPasswort";const char* dest ="http://xxxxx.000webhostapp.com/xxxxx/ ... /xxxxx.php"; // your request destinationconst char* argument_names[ARRAYSIZE] ={"UnixTime_green_1","UnixTime_red_1","UnixTime_green_2","UnixTime_red_2"};const String equals_sign ="=";const String ampersand_sign ="&";void setup() { Verzögerung (1000); Serial.begin(115200); WiFi.mode (WIFI_OFF); // Verhindert ein Problem mit der Wiederverbindung (die Verbindung dauert zu lange) delay (1000); WiFi.mode(WIFI_STA); //Diese Zeile verbirgt die Anzeige von ESP als WLAN-Hotspot WiFi.begin(ssid, password); Serial.println(""); Serial.print ("Verbinden"); Während (WiFi.status () !=WL_CONNECTED) { Verzögerung (500); Serial.print("."); } Serial.println(""); Serial.print ("Verbunden mit"); Serial.println (ssid); Serial.print ("IP-Adresse:"); Serial.println (WiFi.localIP()); }void loop() { HTTPClient http; Zeichenfolgenparameter =""; parameter +=argument_names[0] +equals_sign+ (int)zufällig(100); for(int i=1; i 

php-Datei:

connect_error) { die("Datenbankverbindung fehlgeschlagen:" . $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 ="UPDATE 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' WHERE id=1"; if ($conn->query($sql) ===TRUE) { echo "OK"; } else { echo "Fehler:" . $sql. "
" . $conn->Fehler; } }?>

Wenn es Ihnen gelungen ist, die Datenbank zu aktualisieren, können Sie die folgenden Verfahren im Arduino-Code von 'Arduino Receiver &MySQLdb' ändern:

  • MySQL_UpdateTrafficLData() ungültig machen
  • MySQL_UpdateDistance() ungültig machen

Beachten Sie, dass es keine gute Idee ist, alles auf einmal zu implementieren, wenn Sie das Projekt replizieren möchten. Versuchen Sie zunächst, jede Komponente einzeln zu testen. Wenn alle gut funktionieren, können Sie zunächst die verschiedenen Komponenten kombinieren. Zögern Sie nicht, im Kommentarbereich um Hilfe zu bitten und versuchen Sie, Ihr Problem so detailliert wie möglich zu beschreiben.

Code

  • Arduino-Sendercode
  • Arduino-Empfänger und MySQLdb
  • MySQL_UpdateTrafficLData.php
  • MySQL_UpdateDistance.php
  • EchoJSON
  • MainActivity.java
  • AndroidManifest.xml
  • strings.xml
  • activity_main.xml
Arduino-SendercodeArduino
/* IOTOPIA - 2016-2017 - Ampelinformationssystem (Sender) * von Pieter Luyten &Joppe Smeets * * Distanz zu einem anderen Arduino über RF 433 MHz-Module senden * * RF 433 MHz-Modul:* tx_pin --> Pin 3 * * HC-SR04 Modul:* trig_pin --> Pin 5 * echo_pin --> Pin 6 * */#define tx_pin 3#define trig_pin 5#define echo_pin 6#include  // Bibliothek für RF 433 MHz Module #include "HCSR04.h" // Bibliothek für HC-SR04-ModulHCSR04 Ultraschall(trig_pin,echo_pin); int distance;char CharMsg[21];void setup () { Serial.begin (9600); vw_setup(2000); // Bits pro Sekunde vw_set_tx_pin (tx_pin);}void loop () { Abstand =Ultraschall.Ranging (CM); // Messen Sie den Abstand in cm während (Abstand <0) {// Vermeiden Sie falsche Messwerte, messen Sie den Abstand erneut. Abstand =Ultraschall.Ranging (CM); } sprintf(CharMsg, "%d,", Distanz); vw_send((uint8_t *)CharMsg, strlen(CharMsg)); // Sende die Distanz vw_wait_tx(); // Warten Sie, bis die gesamte Nachricht verschwunden ist Serial.print ( "Distanz (cm):"); Serial.println (Entfernung); Verzögerung(250);}
Arduino-Empfänger &MySQLdbArduino
/* IOTOPIA - 2016-2017 - Ampelinformationssystem (Empfänger + Upload in MySQLdb) * von Pieter Luyten &Joppe Smeets * * Entfernung von einem anderen Arduino über RF empfangen * Ampeldaten und Entfernung in die MySQL-Datenbank hochladen * * RF 433MHz Modul:* rx_pin --> Pin 3 * * TrafficLight (3 LEDs):* RedLED --> Pin 5 * OrangeLED --> Pin 6 * GreenLED --> Pin 7 * * DS3231 (Real-Time-Clock) :* SCL --> SCL (Pin 3 auf Arduino Yun) * SDA --> SDA (Pin 2 auf Arduino Yun) * * SD-Karte - Arduino Yun * SD-Karte (mit PHP-Datei) --> integrierter SD-Slot* /#define RedLED 5#define OrangeLED 6#define GreenLED 7#define rx_pin 9#include  // RF 433 MHz Module#include  // Alarme#include  // I2C communication#include "RTClib.h" // Echtzeituhr#include  // Linux-Prozesse auf dem AR9331 ausführen // UnixTime:Zeit, definiert als die Anzahl der Sekunden, die seit dem 1. Januar 1970 vergangen sindlong UnixTime_green_1; // Nächstes grünes Licht (in UnixTime)long UnixTime_red_1; // Nächstes rotes Licht (in UnixTime)long UnixTime_green_2; // Übernächstes grünes Licht (in UnixTime)long UnixTime_red_2; // Übernächstes rotes Licht (in UnixTime)long s_till_orange; // Sekunden bis orangeRTC_DS3231 rtc;char StringReceived[22];boolean i;int interval =5; // im Sekundenintabstand; // im cmvoid-Setup () { rtc.begin (); //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); Serial.begin (9600); Bridge.begin(); // Brücke initialisieren vw_setup(2000); // Bits pro Sekunde vw_set_rx_pin (rx_pin); vw_rx_start(); Alarm.timerRepeat(Intervall, UpdateTrafficLData); // Ampeldaten aktualisieren (nächstes grünes/rotes Licht ... ) Alarm.timerRepeat(1,PrintCurrentTime); // Aktuelle Uhrzeit alle x Sekunden ausgeben pinMode (GreenLED, OUTPUT); pinMode (OrangeLED, AUSGANG); pinMode (Rote LED, AUSGANG); digitalWrite (Grüne LED, NIEDRIG); digitalWrite (OrangeLED, NIEDRIG); digitalWrite (Rote LED, NIEDRIG); Serial.println ("Setup abgeschlossen");}void loop () { Alarm.delay (0); // Diese Verzögerung sollte anstelle des normalen Arduino delay() verwendet werden, // für die rechtzeitige Verarbeitung von Alarmen und Timern. Sie können 0 für minimale Verzögerung übergeben. RF_Listen(); }void RF_Listen (){ uint8_t buf[VW_MAX_MESSAGE_LEN]; uint8_t buflen =VW_MAX_MESSAGE_LEN; if (vw_get_message(buf, &buflen)) { int a; for (a =0; a  0) { char c =p.read (); Serial.print (c); } // Stellen Sie sicher, dass das letzte Datenbit gesendet wird. Serial.flush();}void MySQL_UpdateDistance(){ Process p; p.begin("/mnt/sda1/MySQL_UpdateDistance.php"); p.addParameter(String(Abstand)); p.run(); // Feedback lesen (zum Debuggen) while (p.available ()> 0) { char c =p.read (); Serial.print (c); } // Stellen Sie sicher, dass das letzte Datenbit gesendet wird. Serial.flush();}void PrintCurrentTime() { DateTime now =rtc.now(); SetLEDsTrafficL(); Serial.print (now.hour (), DEC); Serial.print (':'); Serial.print (now.minute(), DEC); Serial.print (':'); Serial.print (now.second (), DEC); Serial.print ( " "); Serial.println (now.unixtime ());}void SetLEDsTrafficL () { DateTime now =rtc.now (); s_till_orange =UnixTime_red_1 - jetzt.unixtime(); if (i ==0) { DigitalWrite (GreenLED, LOW); digitalWrite (OrangeLED, NIEDRIG); digitalWrite (Rote LED, HOCH); } if (i ==1 &&s_till_orange <=3) { DigitalWrite (GreenLED, LOW); digitalWrite (OrangeLED, HOCH); digitalWrite (Rote LED, NIEDRIG); } if (i ==1 &&s_till_orange> 3) { digitalWrite (GreenLED, HIGH); digitalWrite (OrangeLED, NIEDRIG); digitalWrite (Rote LED, NIEDRIG); }}
MySQL_UpdateTrafficLData.phpPHP
#!/usr/bin/php-cliconnect_error) { trigger_error('Datenbankverbindung fehlgeschlagen:' . $conn->connect_error, E_USER_ERROR);} $sql="UPDATE 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' WHERE id=1";ly($(s) ) ===false) { trigger_error('Falsche SQL:' . $sql . ' Fehler:' . $conn->error, E_USER_ERROR);}else{echo "Daten eingefügt!\n";} ?>
MySQL_UpdateDistance.phpPHP
#!/usr/bin/php-cliconnect_error) { trigger_error('Datenbankverbindung fehlgeschlagen:' . $conn->connect_error, E_USER_ERROR );}$sql="UPDATE TrafficL_data SET Distance='$Distance'WHERE id=1";if($conn->query($sql) ===false) { trigger_error('Falsche SQL:' . $sql . ' Fehler:' . $conn->error, E_USER_ERROR);}else{echo "Entfernung eingefügt!\n";}?>
EchoJSONPHP
MainActivity.javaJava
Paket com.example.xxx.xxx;// change 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;öffentliche Klasse MainActivity erweitert AppCompatActivity { // Zeigt die Zeichenfolge "data ." ", das die Ergebnisse enthält TextView-Ergebnisse; //Die Textansicht, die die empfohlene Geschwindigkeit enthält TextView recSpeed; // URL des zu analysierenden Objekts String JsonURL ="YourURLhere"; // Dieser String enthält die Ergebnisse String data =""; // Definieren der Volley-Anforderungswarteschlange, die gleichzeitig die URL-Anforderung verarbeitet RequestQueue requestQueue; //Timer-Objekt, um die Daten jede Sekunde zu aktualisieren //Timer-Timer; //Das speedLimit (cm/s) private final static double maxSpeed ​​=18; //Die empfohlene Geschwindigkeit private double speed; // Häufigkeit in der Tabelle public final static int NUMBER_OF_ENTRIES =2; //Array mit den Zeiten, in denen es grün ist long[] unixTimesGreen =new long[NUMBER_OF_ENTRIES]; //Array mit den Zeiten, in denen es rot ist long[] unixTimesRed =new long[NUMBER_OF_ENTRIES]; //Variable, die den Abstand hält private double distance; //Variablen zum Wiederholen von updateTable private final ScheduledExecutorService scheduler =Executors.newSingleThreadScheduledExecutor(); //zum Testen:private Future TimingTask; public void tick (lange Millisekunden) {timingTask =scheduler.scheduleAtFixedRate(new Runnable() { public void run() {updateTable();}}, 0, Millisekunden, TimeUnit.MILLISECONDS); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //textViews um Ergebnisse in Ergebnisse umzuwandeln =(TextView) findViewById(R.id.jsonData); recSpeed ​​=(TextView) findViewById(R.id.recommendedSpeed); //Tabelle initialisieren updateTable(); // App alle 100 Millisekunden aktualisieren Tick (500); // zum Arbeiten mit einem Timer-Objekt zum wiederholten Aktualisieren /** Timer =new Timer("Timer"); timer.schedule(neue UpdateTable(),(long)100,(long)100); */ } // für die Arbeit mit Timer-Objekten, um wiederholt zu aktualisieren /** private Klasse UpdateTable erweitert TimerTask{ public void run(){ updateTable(); } } */ private void updateTable(){//reset String data =""; // Erstellt die Volley-Anforderungswarteschlange requestQueue =Volley.newRequestQueue(this); //zum Testen /** // Wandelt die Ergebnisse in die TextView im XML-Hauptlayout mit der ID um jsonData results =(TextView) findViewById(R.id.jsonData); */ // Erstellen der JsonArrayRequest-Klasse namens arrayreq, Übergeben der erforderlichen Parameter //JsonURL ist die URL, die von JsonArrayRequest abgerufen werden soll arrayreq =new JsonArrayRequest(JsonURL, // Der zweite Parameter Listener überschreibt die Methode onResponse() und übergibt //JSONArray als Parameter new Response.Listener() { // Nimmt die Antwort von der JSON-Anfrage @Override public void onResponse(JSONArray response) { try { // Ruft das erste JSON-Objekt im äußeren Array ab JSONObject TrafficLObj =response.getJSONObject( 0); // Ruft "trafficArry" aus dem JSON-Objekt ab JSONArray trafficArry =TrafficLObj.getJSONArray("TrafficLArray"); // Iteriert durch das JSON-Array, holt Objekte und fügt sie //zu der Listenansicht hinzu, bis keine weiteren Objekte mehr vorhanden sind trafficArry for (int i =0; i  maxSpeed) speed =maxSpeed; else Geschwindigkeit =Distanz/((unixTimesGreen[Intervall]-Zeit)); Geschwindigkeit =Geschwindigkeit*5; }}
AndroidManifest.xmlXML
// xxx xxx ändern         
strings.xmlXML
"NooitRood", was bedeutet:"NeverRed"
 NooitRood
activity_main.xmlXML
  

Schaltpläne

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)

Herstellungsprozess

  1. Gaslaterne
  2. Laserpointer
  3. Kaleidoskop
  4. Verkehrssignal
  5. Leuchtdiode (LED)
  6. In ein Zigbee-basiertes LED-Licht reißen
  7. Laufzeitsystemdesign:Systemübersicht
  8. Intelligente Ampel
  9. Neue KI steuert automatisch das Fernlichtsystem des Fahrzeugs
  10. LED-Zubehör – Zubehör für LED-Lichtleisten