工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

信号機情報システム

コンポーネントと消耗品

>
Arduino Yun
× 1
Arduino UNO
またはその他のArduinoボード
× 1
超音波センサー-HC-SR04(汎用)
× 1
DS3231 RTC
リアルタイムクロック
× 1
LED(汎用)
1 x赤色LED、1 x黄色LED、1x緑色LED
× 3
抵抗330オーム
× 3
433MHzモジュール
1 x送信機、1x受信機
× 1
Androidデバイス
× 1
SDカード
× 1
AllThingsTalkIOTOPIA高速開発キット
× 1
ジャンパー線(汎用)
× 1

アプリとオンラインサービス

>
Arduino IDE
Android Studio
MySQLデータベースホスティングサービス

このプロジェクトについて

イントロ

トラフィックは私たちの最善を苛立たせる能力を持っており、それは悪化しています。それがインテリジェントな信号機で変更できるとしたらどうでしょうか?最高速度制限を超えずに交差点に到達して青信号を通過するために、ドライバーがどの速度で運転する必要があるかをドライバーに知らせる信号機情報システムを作成しました。そして、ドライバーが避けられない赤いライトを待たなければならないとき、それはライトがいつ緑に変わるかを彼に知らせます。

<図>

信号機は、緑色のままでいる時間や次の緑色の信号までの時間などに関するデータをオンラインデータベースに送信します。 GPSまたはスマートフォンのアプリケーションは、データベースからデータを取得し、青信号を通過するために必要な速度を計算します。待たされることがやむを得ない場合、赤信号フェーズが終了するまでの残りの待機時間を表示します。

制限を維持しながら、時速70kmのゾーンで運転しています。前方の信号は赤で、30秒後に緑に変わります。信号機から500メートル離れているため、時速60kmで信号機に向かって進むことをお勧めします。

<図>

プロジェクトのデモンストレーション

どうやって作ったの?

私たちのプロジェクトを実証するために、ArduinoYunで信号機を作成しました。信号機は3つのLEDとリアルタイムクロックで構成されています。ライトは一定の間隔で変化します。 Arduino Yunは、信号が緑/赤に変わる時間を節約します。次に、オンラインのMySQLデータベースに接続するPHPファイルを実行し、ArduinoYunから受信したデータを挿入します。 Androidアプリ(Android Studioで作成)は、そのデータベースから日付を取得します。これは、信号機のデータをJSON形式で返す別のPHPファイルを介して行われます。アプリは希望の速度を計算し、青信号を通過できない場合はカウントダウンタイマーを表示します。

<図>

希望の速度を計算するには、アプリは信号までの距離を知る必要があります。これは、GPS座標に従って距離を計算することによって行われます。しかし残念ながら、私たちは小規模で作業しているため、スマートフォンのGPSは私たちのコンセプトを証明するのに十分な精度ではありません。そのため、超音波測距モジュール(HC-SR04)を使用しました。 Arduino Yunは、433 MHzRFモジュールを介して車と信号機の間の距離を受信します。 Yunは、他のArduinoから新しい測定値を受け取るたびに、データベース内のデータを更新します。これで、アプリは目的の速度を計算できるようになりました。

<図>

手順

1)オンラインMySQLデータベースを作成します

(freemysqlhosting.netを使用しました)

2)テーブル 'TrafficL_data'をデータベースに追加します:

<図>

3)ハードウェア(送信機)をセットアップします

回路図「Arduino送信機」はここにあります。

4)「Arduino送信機コード」をArduinoにアップロード

ここにコードがあります。

<図>

5)ArduinoYunをWiFiネットワークに接続します

6)パテを使用してArduino YUNのLinuxサーバーにアクセスする:

  oppkg update opkg install php5-mod-mysqli opkg install php5-cli nano /mnt/sda1/MySQL_UpdateTrafficLData.php  

'MySQL_UpdateTrafficLData.php'はここにあります。

次のエラーが表示された場合: '-ash:nano:not found'、 'nano'をインストールする必要があります(これは基本的なテキストエディタです):

  oppkg 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レシーバー)

回路図「ArduinoYunレシーバー」はここにあります。

8)「ArduinoReceiver&MySQLdb」をArduinoYunにアップロード

ここにコードがあります。

9)シリアルモニターを開きます

似たようなものが表示されるはずです:

<図>

<図>

11)AndroidStudioファイル

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

* URLを変更することを忘れないでください

ここに「EchoJSON.php」があります。

12)AndroidStudioプロジェクトをスマートフォンにアップロードします

ESP8266の手順[追加]

より高価なArduinoYunの代わりにESP8266ベースのモジュールを使用することは可能です:

1.https://www.000webhost.comでアカウントを作成します

<図>

2.ウェブサイトを作成する

3.新しいデータベースを作成します

<図>

4.ファイルマネージャーで「CreateTable.php」と「PostDemo.php」をアップロードします。両方のファイルの「username」、「password」、「dbname」を変更します。

<図>

CreateTable.php:

  <?php //データベースに接続してテーブルを作成$ servername ="localhost"; $ username ="yourUsername"; $ password ="yourPassword"; $ dbname ="yourDBName"; //接続を作成$ conn =new mysqli($ servername、$ username、$ password、$ dbname); // connectionif($ conn-> connect_error){die( "Connection failed:"。$ conn-> connect_error);} // trafficl_data_v2はテーブルの名前$ sql ="CREATE TABLEtrafficl_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 //データベースに接続し、request $ servername ="localhost"; $ username ="yourUsername"; $ password ="yourPassword"; $ dbname ="yourDBName"; /に従って新しいレコードを作成します/接続を作成$ conn =new mysqli($ servername、$ username、$ password、$ dbname); // connectionif($ 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 ="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 "データが正常に挿入されました!"; } else {echo "エラー:"。 $ sql。 "
"。 $ conn-> error; }} else {echo "FAILED:不正なパラメータ";} $ conn-> close();?>

5.新しいテーブルを作成します。「CreateTable.php」を選択し、「表示」をクリックします

<図>

6.ESP8266のパッケージをarduinoにインストールします

このURLファイルを追加->設定:

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

<図>

<図>

7.

[2019年2月9日更新]

ボード、COMポートを選択し、ESP8266PostDemo.inoをESP8266ベースのボードにアップロードします。 NodeMcu V3 ESP826612Eを使用しています。以下のコードは、ほぼすべてのESP8266ベースのボードで機能するはずです。

手元に時計がないため、データベースがランダムな値で10秒ごとに更新されるようにコードを変更しました。

ESP8266PostDemo.ino:

  #include  #include  #include  #include  #define ARRAYSIZE 4 // 4つの引数constchar * ssid ="yourSSID"; const char * password ="yourPassword"; const char * dest ="http://xxxxx.000webhostapp.com/xxxxx/ ... /xxxxx.php"; //リクエストdestinationconstchar * arguments_names [ARRAYSIZE] ={"UnixTime_green_1"、 "UnixTime_red_1"、 "UnixTime_green_2"、 "UnixTime_red_2"}; const String equals_sign ="="; const String ampersand_sign ="&"; void setup() {delay(1000); Serial.begin(115200); WiFi.mode(WIFI_OFF); //再接続の問題を防ぎます(接続に時間がかかりすぎる)delay(1000); WiFi.mode(WIFI_STA); //この行は、wifiホットスポットとしてのESPの表示を非表示にしますWiFi.begin(ssid、password); Serial.println( ""); Serial.print( "接続中"); while(WiFi.status()!=WL_CONNECTED){delay(500); Serial.print( "。"); } Serial.println( ""); Serial.print( "接続済み"); Serial.println(ssid); Serial.print( "IPアドレス:"); Serial.println(WiFi.localIP()); } void loop(){HTTPClient http;文字列パラメータ="";パラメータ+ =arguments_names [0] + equals_sign +(int)random(100); for(int i =1; i  

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 ="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 "エラー:"。 $ sql。 "
"。 $ conn-> error; }}?>

データベースの更新に成功した場合は、「Arduino Receiver&MySQLdb」のarduinoコードで次の手順を変更できます。

  • 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-Traffic Light Information System(Transmitter)* by Pieter Luyten&Joppe Smeets * * RF433MHzモジュールを介して別のarduinoに距離を送信** RF 433MHzモジュール:* tx_pin->ピン3 * * HC-SR04モジュール:* trig_pin->ピン5 * echo_pin->ピン6 * * /#define tx_pin 3#define trig_pin 5#define echo_pin 6#include  // RF 433MHzモジュールのライブラリ#include "HCSR04.h" // HC-SR04モジュールのライブラリHCSR04超音波(trig_pin、echo_pin); int distance; char CharMsg [21]; void setup(){Serial.begin(9600); vw_setup(2000); //ビット/秒vw_set_tx_pin(tx_pin);} void loop(){距離=超音波.Ranging(CM); //距離をcm単位で測定しますwhile(distance <0){//誤った読み取りを避け、距離を再度測定しますdistance =超音波.Ranging(CM); } sprintf(CharMsg、 "%d、"、distance); vw_send((uint8_t *)CharMsg、strlen(CharMsg)); //距離を送信しますvw_wait_tx(); //メッセージ全体が消えるまで待ちますSerial.print( "Distance(cm):"); Serial.println(距離); delay(250);} 
ArduinoレシーバーとMySQLdb Arduino
 / * IOTOPIA-2016-2017-Traffic Light Information System(Receiver + Upload to MySQLdb)* by Pieter Luyten&Joppe Smeets * * RF経由で別のarduinoからの距離を受信*トラフィックライトデータとMySQLデータベースへの距離をアップロード** RF 433MHzモジュール:* rx_pin->ピン3 * * TrafficLight(3 LED):* RedLED->ピン5 * OrangeLED->ピン6 * GreenLED->ピン7 * * DS3231(リアルタイムクロック) :* SCL-> SCL(Arduino Yunのピン3)* SDA-> SDA(Arduino Yunのピン2)* * SDカード-ArduinoYun * SDカード(PHPファイル付き)->統合SDスロット* /#define RedLED 5#define OrangeLED 6#define GreenLED 7#define rx_pin 9#include  // RF 433 MHzモジュール#include  //アラーム#include  // I2C communication#include "RTClib.h" //リアルタイムクロック#include  // AR9331 //でLinuxプロセスを実行UnixTime:1970年1月1日から経過した秒数として定義される時間UnixTime_green_1; //次の青信号(UnixTime内)long UnixTime_red_1; //次の赤信号(UnixTime内)long UnixTime_green_2; //次に、1つの緑色のライト(UnixTime内)long UnixTime_red_2; //次に、1つの赤信号(UnixTimeの場合)long s_till_orange; // orangeRTC_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(interval、UpdateTrafficLData); //信号機のデータを更新します(次の緑/赤信号...)Alarm.timerRepeat(1、PrintCurrentTime); //現在の時刻をx秒ごとに出力しますpinMode(GreenLED、OUTPUT); pinMode(OrangeLED、OUTPUT); pinMode(RedLED、OUTPUT); digitalWrite(GreenLED、LOW); digitalWrite(OrangeLED、LOW); digitalWrite(RedLED、LOW); Serial.println( "セットアップが終了しました");} void loop(){Alarm.delay(0); //この遅延は、通常のArduino delay()の代わりに//アラームとタイマーをタイムリーに処理するために使用する必要があります。最小の遅延のために0を渡すことができます。 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); } //データの最後のビットが送信されていることを確認します。 Serial.flush();} void MySQL_UpdateDistance(){プロセスp; p.begin( "/ mnt / sda1 / MySQL_UpdateDistance.php"); p.addParameter(String(distance)); p.run(); //フィードバックを(デバッグ用に)読み取りますwhile(p.available()> 0){char c =p.read(); Serial.print(c); } //データの最後のビットが送信されていることを確認します。 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 --now.unixtime(); if(i ==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); } if(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); // connectionif($ conn-> connect_error){trigger_error( 'データベース接続に失敗しました:'。$ 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"; if($ conn-> query($ sql )===false){trigger_error( '間違ったSQL:'。$ sql。 'エラー:'。$ 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); // connectionif($ conn-> connect_error){trigger_error('データベース接続に失敗しました: '。$ conn-> connect_error、E_USER_ERROR );} $ sql ="UPDATE TrafficL_data SET Distance ='$ Distance' WHERE id =1"; if($ conn-> query($ sql)===false){trigger_error( 'Wrong SQL:'。$ sql。 'エラー:'。$ conn-> error、E_USER_ERROR);} else {echo "Distance Inserted!\ n";}?> 
EchoJSON PHP
 <?phpdefine( 'HOST'、 'yourServerName'); define( 'USER'、 'yourUserName'); define( 'PASS'、 'yourPassword'); define( 'DB'、 'yourDBName'); $ con =mysqli_connect(HOST、USER、PASS、DB); $ sql ="select * fromTrafficL_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; // 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; importorg。 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; public class MainActivity extends AppCompatActivity {//文字列 "dataを表示します"結果TextViewの結果を保持します。 //推奨速度を保持するtextviewTextView recSpeed; //解析されるオブジェクトのURLString JsonURL ="YourURLhere"; //この文字列は結果を保持しますStringdata =""; // URLリクエストを同時に処理するVolleyリクエストキューを定義しますRequestQueuerequestQueue; //データを毎秒更新するタイマーオブジェクト//タイマータイマー; // speedLimit(cm / s)private final static double maxSpeed =18; //推奨速度プライベート倍速; //テーブル内の回数publicfinal static int NUMBER_OF_ENTRIES =2; //緑色の時刻の配列long [] unixTimesGreen =new long [NUMBER_OF_ENTRIES]; //赤の時間の配列long [] unixTimesRed =new long [NUMBER_OF_ENTRIES]; //距離を保持する変数privatedouble distance; // updateTableを繰り返すための変数privatefinal ScheduledExecutorService Scheduler =Executors.newSingleThreadScheduledExecutor(); //テスト用:private Future <?> TimingTask; public void tick(longミリ秒){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); * /} //タイマーオブジェクトを操作して繰り返し更新する場合/ **プライベートクラスUpdateTableextends TimerTask {public void run(){updateTable(); }} * / private void updateTable(){//文字列データをリセット=""; //ボレーリクエストキューを作成しますrequestQueue =Volley.newRequestQueue(this); //テスト用/ ** //結果をメインレイアウトXML内で見つかったTextViewにキャストします。idjsonDataresults=(TextView)findViewById(R.id.jsonData); * / // arrayreqというJsonArrayRequestクラスを作成し、必要なパラメーターを渡します// JsonURLはJsonArrayRequestからフェッチされるURLですarrayreq =new JsonArrayRequest(JsonURL、// 2番目のパラメーターListenerはメソッドonResponse()をオーバーライドし、// JSONArrayを渡しますパラメータとしてnewResponse.Listener (){// JSONリクエストから応答を取得します@Overridepublic void onResponse(JSONArray response){try {//外部配列の最初のJSONオブジェクトを取得しますJSONObjectTrafficLObj =response.getJSONObject( 0); // JSONオブジェクトから "trafficArry"を取得しますJSONArraytrafficArry =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"?>  //変更xxxxxx           
strings.xml XML
「NooitRood」、意味:「NeverRed」
   NooitRood   
activity_main.xml XML
 <?xml version ="1.0" encoding ="utf-8"?>     

回路図

RF 433MHzモジュール:
tx_pin->ピン3

HC-SR04モジュール:
trig_pin->ピン5
echo_pin->ピン6 RF 433MHzモジュール:
rx_pin->ピン3

TrafficLight(3つのLED):
RedLED->ピン5
OrangeLED->ピン6
GreenLED->ピン7

DS3231(リアルタイムクロック):
SCL-> SCL(Arduino Yunのピン3)
SDA-> SDA(Arduino Yunのピン2)

製造プロセス

  1. ガスランタン
  2. レーザーポインター
  3. 万華鏡
  4. 信号機
  5. 発光ダイオード(LED)
  6. ZigbeeベースのLEDライトに引き裂く
  7. 飛行時間システムの設計:システムの概要
  8. スマート信号機
  9. 新しいAIが車両のハイビームライトシステムを自動的に制御
  10. ロボット溶接システムの電子ブックが投資の考慮事項に光を当てる
  11. LED アクセサリ – LED ライト ストリップ アクセサリ