自動鉄道ゲート制御システム–回路とソースコード
Arduinoおよび超音波センサーを使用した高速自動鉄道ゲートコントローラー回路
このチュートリアルでは、シンプルで効率的な自動高速鉄道ゲートコントローラーシステムを設計する方法を学習します。これはこのプロジェクトへの比較的単純なアプローチですが、これを基本的な構成要素と見なすことができ、さらに変更を加えると、通過する列車の速度などを追跡することもできます。しかし、チュートリアルに入る前に、自動化とは何か、そして自動化から正確に何が期待できるかについて理解する必要があります。
自動化とは、基本的に、人間の努力や介入を削減または排除する方法を考案することを意味します。このチュートリアルでは、Proteusソフトウェアと一緒にサーボモーターを使用してArduinoで鉄道ゲートを自動化する方法を説明します。
自動化の複雑さは、基本的な「オン/オフ」制御から非常に複雑な多変数アルゴリズムまでさまざまです。自動化を目的とした制御システムは、開ループまたは閉ループのいずれかです。つまり、単一の入力パラメーターで動作するか、閉ループシステムの場合のように入力として供給される出力に応答して動作します。鉄道業界の自動化は、私たちが高度な時代に踏み込んでいるため重要なニーズであり、人為的なエラーによる事故のリスクを減らすために、これらのタスクをこれらのスマートマシンで処理できるようにすることが非常に重要です。
- 関連記事:車速検出回路–動作およびソースコード
すべてのテクノロジーの場合と同様に、自動化にも長所と短所があります:
長所
- 生産性の向上
- 予測可能な品質(品質改善)
- 堅牢性の向上
- 優れた出力の一貫性
- 人件費の削減
- 非常に正確
- 単調な作業での人間の労力を削減します
短所
- セキュリティの脅威に弱い
- 開発コストが予測を超える可能性があります
- 高いセットアップコスト
- 多くのセクターでの失業の原因
言及された長所は短所をはるかに上回り、それが全世界が自動化の時代に足を踏み入れている理由です。
このチュートリアルでは、回路が線路に沿って列車を検出すると、鉄道のゲートが開閉するように自動化しようとしています。また、速度を示すブザーまたはアラームを開始します。列車の速度は特定のしきい値よりも高く、それを達成するために、非常に広く使用されている2つの電子部品、つまりArduinoとサーボモーターを使用します。
このチュートリアルで使用するセンサーは超音波センサーですが、このセンサーを使用する必要はありません。IRセンサーを使用してこのプロジェクトの別のバージョンを作成することもできます。モジュールであり、それは私たちの選択、使用したいもの、そして私たちがすぐに利用できるものに依存します。
- 関連記事:スマートホームオートメーションシステム–回路とソースコード
鉄道ゲートコントローラーに必要なコンポーネント
- Arduino UNO
- ブザー
- 超音波センサー(HC-SR04)
- サーボモーター
必要なソフトウェア:
- Arduino IDE
- プロテウス
鉄道ゲートコントローラーの回路図
コンポーネントの説明
Arduino UNO
Arduinoは基本的にオープンソースの開発ボードであり、主にMicrochip ATmega328Pマイクロコントローラーを利用し、Arduino.ccによって製造されています。ボードには、さまざまな拡張ボードや外部回路に接続できるデジタルとアナログで構成される入力/出力ピンのセットが付属しています。
ボードには、14個のデジタルピンと6個のアナログピンが付属しており、ArduinoであるIDE(統合開発環境)を使用して使用またはプログラム可能になっています。 IDE。プログラムされたものは、USBケーブルタイプBを介して焼き付けられます。ボードの電源投入方法は、USBケーブルまたは9ボルトのDC電源を接続することによって行うことができます。許容電圧範囲は7〜20ボルトです。デザインと動作の観点から、他のファミリーメンバーであるArduinoNanoやArduinoLeonardoとそれほど違いはありません。
STK500は、Unoが通信するための元のプロトコルです。以前のバージョンとの主な違いは、FTDIUSB-シリアルドライバチップを使用していないことです。それどころか、USB-シリアルコンバータのようにプログラムされたATmega 16U2(バージョンR2までのAtmega8U2)を使用します。
- 関連記事:Arduino UNOを使用した可変電源–回路とコード
超音波センサー(HC-SR04)
超音波センサーは、オブジェクトの距離を決定するために使用する基本的なセンサーです。別の言い方をすれば、オブジェクトが特定の基準点からどれだけ離れているかを測定するために使用されていると言えます。基本的に4つのピンがあります;
- トリガーピン
- エコーピン
- GNDピン
- VCCピン(+ 5V)
超音波はどのように機能しますか?送信機(トリガー)は高周波の音声信号を送信し、それが物体によって反射され、反射された信号が受信機(エコー)で受信されます。したがって、空気中の音速は、距離を計算できることがわかっています。このセンサーは、プロジェクトで日常的にこれを使用するArduinoのいじくり回し者の間で非常に人気があり、このセンサーをトリガーするには、10マイクロ秒以上の高パルスが必要です。
超音波センサーの機能:-
- 電源:+ 5V DC
- 静止電流:<2mA
- 動作電流:15mA
- 有効角度:<15°
- 距離:2cm – 400cm / 1″ – 13ft
- 解像度:0.3cm
- 測定角度:30度
- トリガー入力パルス幅:10uS
- 寸法:45mm x 20mm x 15mm
関連記事:自動植物散水および灌漑システム–回路、コード、およびプロジェクトレポート
サーボモーター
これらは、特定の角度での非常に特定の動きに使用される特殊な種類のモーターです。これは、特定の角度または線形位置での正確な制御を可能にする回転式または線形アクチュエータです。サーボモーターは単一のエンティティではなく、モーターの現在の位置のフィードバックを提供するセンサーと適切なモーターの組み合わせです。
このサーボモーターを使用するには、DCモーターの使いやすさの点で類似していないため、他のいくつかの高度なモジュールを使用する必要があります。これらのモーターは、基本的にロボット工学や大規模製造業で使用されています。
これらのモーターは、開ループ制御を表すステッピングモーターと少し似ています。ステッピングモーターには回転するステップが組み込まれていますが、フィードバックシステムがないため、使用できるのは、設計および製造された特定のアプリケーションに限定されています。
このフィードバックの欠如により、サーボモーターはこれらのステッピングモーターとは一線を画し、動的であり、手元のタスクに応じてカスタマイズできるため、優位に立つことができます。プログラミングの変更はほとんどありません。専用のコントローラモジュールは、通常、メーカーによってサーボモーターに付属しています。
メカニズム –これは基本的に、フィードバックシステムを利用してローターの動きと最終的な位置を更新する閉ループサーボメカニズムです。モーターの制御への入力は、アナログ入力またはデジタル入力のいずれかです。
- 関連記事:Arduinoと超音波センサーを使用した距離測定
あるタイプのエンコーダーがモーターとペアになって、目的の出力に到達しなくなるまでエラー信号を生成するコントロールに位置と速度のフィードバックを提供します。そして、このエラー信号を減らすために、モーターはどちらかの方向に動き、最終的にエラー信号をゼロに減らすことができます。この条件が達成されると、目的の出力が達成されます。強化された洗練されたサーボモーターは、出力シャフトにその速度を測定するための光学式ロータリーエンコーダーを備えています。
ブザー
ブザーは、本質的に機械的、電子的、電気機械的、圧電的である可能性があります。通常、オーブン、ゲーム番組、電化製品などで電子音を使用します。これらのブザーには内部回路があります。発生する音は、ディスクの動きによるものです。ディスクは本質的に強磁性です。これは、入力として電圧源を備えた電流駆動デバイスです。
自動鉄道ゲートコントローラーの動作
この回路では、超音波センサーとサーボモーターを使用して、踏切の動作を再現しました。両方のセンサーは、Arduinoボードに取り付けられたトリガーピンの助けを借りてトリガーされ、距離が計算されます。回路のさらなる動作は、測定された距離に完全に依存します。
線路がクリアな場合、サーボモーターは何もしませんが、列車が線路のいずれかの側に到着した場合、センサーの1つによって測定された距離は以前の距離とは異なります。このようにして、列車の到着について通知され、すぐにArduinoはデジタルピン7と8をHIGHに設定します。
これらのピンは2つのサーボモーターに接続されており、サーボは90 o の角距離をカバーします。 したがって、ゲートが閉じられ、車両の進路が遮断されます。列車が他のセンサーから離れると、Arduinoに列車の出発が通知され、サーボモーターが再び前の位置に戻ってゲートを開きます。
人々の安全を考慮して、この回路にもう1つの機能を追加しました。これは、高速列車の場合に警告する機能です。これは、1サイクルで2つのセンサーの遷移間の時間を計算することによって実現されます。時間が一定値未満であることが判明した場合、ブザーがブザーを鳴らして交差点の近くにいる人に警告します。
- 関連記事:スマート灌漑システム–回路図とコード
プロジェクトのソースコードと説明
このスケッチでは、整数型の5つの変数と、長い型の4つの変数を定義しました。変数tr1、tr2、eh1、およびeh2は、パルスを送信し、マイクロ秒単位で時間の値を受信するために使用され、変数val1、val2、dis1、およびdis2は、マイクロ秒単位で時間の値を格納し、cm単位で距離を格納するために使用されます。ボーレートは9600ビット/秒に設定されており、ボードとシリアルモニター間の通信を担当します。
const int tr1 = 13, eh1 = 12, tr2 = 3, eh2 = 2;;
int bz = 11;
unsigned long val1, dis1, val2, dis2;
#include
Servo myservo1;
Servo myservo2;
int pos=-1;
void setup()に含まれる関数は、実行中に1回だけ実行され、そのタスクは、入力または出力としてピンのボーレートとモードを定義することです。
void setup() {
// put your setup code here, to run once:
pinMode(tr1, OUTPUT);
pinMode(tr2, OUTPUT);
pinMode(bz, OUTPUT);
pinMode(eh1, INPUT);
pinMode(eh2, INPUT);
myservo1.attach(8);
myservo2.attach(7);
Serial.begin(9600);
}
必要な機能に従って、超音波センサーをトリガーして距離を継続的に測定し、計算された距離を条件ステートメントのパラメーターとして設定します。条件が真であることが判明した場合、変数「pos」はその値をインクリメントしてサーボモーターを実行し、条件が正しくないことが判明した場合、「pos」変数はその値を減少させてサーボモーターを前の位置に戻します。
2つのセンサーがオブジェクトをすばやく検知しているかどうかを確認する条件ステートメントがもう1つあります。ピン11をハイに設定して、ブザーに電力を供給し、人々に警告します。これらのプロセスはすべてvoidループ()に含まれ、Arduinoがリセットされるか、供給が停止されるまで繰り返されます。
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(tr1, LOW);
delayMicroseconds(2);
digitalWrite(tr1, HIGH);
delayMicroseconds(10);
digitalWrite(tr1, LOW);
val1 = pulseIn(eh1, HIGH);
dis1 = (val1 * 0.0343) / 2;
digitalWrite(tr2, LOW);
delayMicroseconds(2);
digitalWrite(tr2, HIGH);
delayMicroseconds(10);
digitalWrite(tr2, LOW);
val2 = pulseIn(eh2, HIGH);
dis2 = (val2 * 0.0343) / 2;
Serial.println("distance is ");
Serial.println(dis1);
Serial.println(dis2);
if(dis1 < 100 || dis2 < 100)
{
if(pos==-1){
for (pos = 0; pos <= 90; pos += 1) {
myservo1.write(pos);
myservo2.write(pos);
delay(15);}
}
delay(1000);
digitalWrite(tr1, LOW);
delayMicroseconds(2);
digitalWrite(tr1, HIGH);
delayMicroseconds(10);
digitalWrite(tr1, LOW);
val1 = pulseIn(eh1, HIGH);
dis1 = (val1 * 0.0343) / 2;
digitalWrite(tr2, LOW);
delayMicroseconds(2);
digitalWrite(tr2, HIGH);
delayMicroseconds(10);
digitalWrite(tr2, LOW);
val2 = pulseIn(eh2, HIGH);
dis2 = (val2 * 0.0343) / 2;
if(dis1 < 100 || dis2 < 100) {digitalWrite(bz, HIGH); Serial.println("distance2 is "); Serial.println(dis1); Serial.println(dis2);} } else if(dis1 >= 100 && dis2 >= 100)
{ if(pos==91){
for (pos = 90; pos >= 0; pos -= 1) {
myservo1.write(pos);
myservo2.write(pos);
delay(15);
}
}
digitalWrite(bz, LOW);
delay(200);
}
}
シミュレーション用の16進ファイルとProteusのインターフェース: Arduino IDEで、[ファイル]> [設定]をクリックし、[詳細出力を表示]で、コンパイルとアップロードの両方のオプションを確認します。そして、下のウィンドウでコードをコンパイルしたら、16進ファイルの場所を選択してコピーし、ProteusでArduinoをダブルクリックして、[プログラムファイル]オプションにファイルの場所を貼り付け、[OK]をクリックします。これで、回路をProteusにシミュレーションする準備が整いました。
関連プロジェクト:
- Arduinoによるオブジェクト検出機能付き自動ドアベル
- Arduinoを使用した自動常夜灯
- ArduinoPWMプログラミングとArduinoでのその機能
- Arduinoシリアル:Arduinoによるシリアル通信
- Electronics Final Year Projects Ideas List
- 工学部の学生のための電子工学プロジェクトのアイデア
- 初心者向けのシンプルで基本的な電子機器ミニプロジェクトのアイデア
産業技術