注意:すべてのOSOYOO ARDUINO用製品はサードパーティー製品であり、ARDUINOと完全に互換性があります

認可されたオンライン小売業者:

AMAZON
amzuk

内容

      1. 紹介
      2. 準備
      3. このプロジェクトについて
      4. 接続
      5. スケッチのアップロード
      6. プログラムの実行結果

紹介

リアルタイム信号制御機器は、電源キャビネット、メインコントローラーまたはプロセッサー、リレー、スイッチやキーを備えたコントロールパネル、通信ポートなどから構成される複雑な機器です。

このレッスンでは、アルディーノマイクロコントローラーを使用して交通信号灯回路を構築する方法について説明します。

準備

ハードウェア

      • Osoyoo基本ボード(Arduino UNO rev.3と完全互換性)×1
      • 1桁7セグメントLEDディスプレイ×1
      • 74HC595×1
      • 200Ω抵抗器×7
      • LED(赤色LED×2、黄色LED×2、緑色LED×2)
      • ブレッドボード×1
      • ジャンパー
      • USBケーブル×1
      • PC×1

ソフトウェア

      • Arduino IDE (version 1.6.4+)

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

現代では、個人用車両の使用が非常に一般的になっており、その結果、道路上の車両数は指数関数的に増加しています。監視やガイダンスのない道路は、交通渋滞や事故を引き起こす可能性があります。

交通信号灯は、交通の流れを制御するために使用される信号装置です。一般的に、交差点、十字路、歩行者横断などに配置され、誰が待つ必要があり、誰が進む必要があるかの優先順位を交互に変更します。

交通信号灯は、標準色の光を表示して、ユーザー(ドライバーおよび歩行者)に指示を提供します。交通信号灯で使用される3つの色は、赤、黄色、緑の色です。

このプロジェクトでは、交通信号灯制御システムを設計します。これは交通信号灯システムの単純な実装ですが、プログラマブルタイミング、歩行者用照明などのリアルタイムシステムに拡張できます。緑のLEDは緑色の信号を表し、黄色のLEDは黄色の信号を表し、赤のLEDは赤色の信号を表します。

この回路を動かすために必要なハードウェアの接続とソフトウェアを全て説明します。

接続

以下のように回路を組み立てます

この実験では、7セグメントディスプレイを使用してカウントダウンを行い、2つの方向、例えば南北(TF1)と東西(TF2)を表す2つの交通信号を設定します。上の画像のようになります。

コードプログラム

上記の操作が完了したら、USBケーブルを使用してボードをコンピュータに接続します。緑色の電源LED(PWRとラベルが付いています)が点灯します。Arduino IDEを開き、プロジェクトに対応するボードタイプとポートタイプを選択します。その後、以下のスケッチをボードにロードします

/*  ___   ___  ___  _   _  ___   ___   ____ ___  ____  
 * / _ \ /___)/ _ \| | | |/ _ \ / _ \ / ___) _ \|    \ 
 *| |_| |___ | |_| | |_| | |_| | |_| ( (__| |_| | | | |
 * \___/(___/ \___/ \__  |\___/ \___(_)____)___/|_|_|_|
 *                  (____/ 
 *In this lesson, we will go over how to build a traffic 
 *light circuit with an arduin microcontroller.
 * Tutorial URL https://osoyoo.com/ja/2017/08/16/traffic-light-controller/
 * CopyRight www.osoyoo.com
 */
const int red1Pin= 5; //red1 led attach to 
const int yellow1Pin =6 ; //yellow1 led attach to 
const int green1Pin= 7; //green1 led attach to 

const int red2Pin= 2; //red2 led attach to 
const int yellow2Pin =3 ; //yellow2 led attach to 
const int green2Pin= 4; //green2 led attach to 

const int STcp = 12;//Pin connected to ST_CP of 74HC595
const int SHcp = 8;//Pin connected to SH_CP of 74HC595 
const int DS = 11; //Pin connected to DS of 74HC595 
//display 1,2,3,4,5,6,7,8,9
int datArray[16] = {
  96, 218, 242, 102, 182, 190, 224, 254, 246};

void setup()
{
  pinMode(red1Pin, OUTPUT);  //set the redPin as an output
  pinMode(yellow1Pin, OUTPUT);  //set the yellowPin as an output
  pinMode(green1Pin, OUTPUT);  //set the greenPin as an output

  pinMode(red2Pin, OUTPUT);  //set the redPin as an output
  pinMode(yellow2Pin, OUTPUT);  //set the yellowPin as an output
  pinMode(green2Pin, OUTPUT);  //set the greenPin as an output
  //set pins to output
  pinMode(STcp,OUTPUT);
  pinMode(SHcp,OUTPUT);
  pinMode(DS,OUTPUT);
  Serial.begin(9600);  // start serial port at 9600 bps:
}

void loop()
{
  State1();
  State2(); 
}
void State1()
{
  digitalWrite(red1Pin,HIGH);   //turn on a red led
  for(int num = 8; num >=0; num--)   //display 9-1 and turn on a green led
  {
    digitalWrite(green2Pin,HIGH);
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000); //wait for a second
  }
  digitalWrite(green2Pin,LOW);   //turn off the green led
  for(int num = 2 ;num >=0; num--)   //diaplay 3 to 1 and turn on the yellow led 
  {
    digitalWrite(yellow2Pin,HIGH);
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000); //wait for a second
  }
  digitalWrite(yellow2Pin,LOW);  //turn off the yellow led
  digitalWrite(red1Pin,LOW);  //the red led finally turn off
}
void State2()
{
  digitalWrite(red2Pin,HIGH);
  for(int num = 8; num >=0; num--)
  {
    digitalWrite(green1Pin,HIGH);
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000); //wait for a second
  }
  digitalWrite(green1Pin,LOW);
  for(int num = 2 ;num >=0; num--)
  {
    digitalWrite(yellow1Pin,HIGH);
    digitalWrite(STcp,LOW); //ground ST_CP and hold low for as long as you are transmitting
    shiftOut(DS,SHcp,MSBFIRST,datArray[num]);
    digitalWrite(STcp,HIGH); //pull the ST_CPST_CP to save the data
    delay(1000); //wait for a second
  }
  digitalWrite(yellow1Pin,LOW);
  digitalWrite(red2Pin,LOW);
}

実行結果

アップロードが完了した数秒後に、今では交通信号機に似たものが見えます。最初に、7セグメントディスプレイが9秒からカウントダウンし、TF1の赤い信号とTF2の緑の信号が点灯します。その後、3からカウントダウンし、TF2の緑色のLEDが消え、黄色が点灯すると同時に、TF1の赤信号が点灯します。3秒後、7セグメントが再び9秒からカウントダウンします。その間、TF2の赤信号とTF1の緑信号が点灯します。9秒後、3秒からカウントダウンし、TF1の黄色い信号が点灯し、TF2の赤い信号が点灯し続けます。これが繰り返され、交通信号機のように機能します。

現実のシナリオにおける理想的な実装ではないものの、交通信号制御システムのプロセスについてのアイデアを提供します。

注:ここで実装されたプロジェクトには、横断歩道や歩行者信号については考慮されていません。

ソフトウェアがどのように動作するかを知っていると、LEDを任意の期間点灯または消灯するための値を変更できます。たとえば、9秒間点灯する代わりに、15秒または30秒に簡単に変更できます。黄色いLEDを1秒または2秒だけ点灯させることもできます。