Arduinoベースのセキュリティシステム
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
|
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
はじめに <図>
<図>
このプロジェクトは、Arduino Uno、サーボモーター、超音波センサー、圧電ブザーで構成されるArduinoベースのセキュリティシステムです。
ここで、超音波センサーはその範囲内にある物体を感知し、ブザーを作動させます。このセンサーデータは、グラフィカルマップを作成するProcessingIDEソフトウェアにも送られます。
サーボモーターは、超音波センサーを回転させて広い範囲をカバーするために使用されます。
これは非常に単純なプロジェクトであり、1時間以内に実行できます。
プロジェクトの手順は次のとおりです-
- センサーのトリガーピンをArduinoのピン2に接続します
- センサーのエコーピンをArduinoのピン3に接続します
- センサー電源とアースのVccとGNDをそれぞれ接続します
- ブレッドボードにブザーを置きます
- プラス側をArduinoのピン10に接続し、マイナス側をアースに接続します
- サーボモーターの黒と赤のワイヤーをそれぞれアースと電源に接続します
- サーボモーターの黄色いワイヤーをArduinoのピン9に取り付けます
- Arduinoの5V端子を電源に接続し、ArduinoのGND端子をアースに接続します
これらの接続が完了したら、図に示すように、回路全体をボックス内に配置します。
次に、コーディングします。
コード
- セキュリティSystem_IDE
- 処理
セキュリティSystem_IDE C9Search
#include。 int tPin =2; int ePin =3; int buz =10; int d1、d2; int i =0; int sdistance; Servo myServo; void setup(){Serial.begin(9600); pinMode(tPin、OUTPUT); pinMode(ePin、INPUT); pinMode(buz、OUTPUT); myServo.attach(9); } void loop(){for(i =0; i <=180; i + =10){myServo.write(i); delay(30); d2 =calculateDistance(); Serial.print(i); Serial.print( "、"); Serial.print(d2); Serial.print( "。"); } for(i =180; i> 0; i- =10){myServo.write(i); delay(30); d2 =calculateDistance(); Serial.print(i); Serial.print( "、"); Serial.print(d2); Serial.print( "。"); }} intcalculateDistance(){digitalWrite(tPin、HIGH); delay(1000); digitalWrite(tPin、LOW); d1 =pulseIn(ePin、HIGH); d2 =d1 * 0.0171821306; if(d2 <10){digitalWrite(buz、HIGH); } else {digitalWrite(buz、LOW); } return d2; }
処理 Java
importprocessing.serial。*; //シリアル通信用のライブラリをインポートしますimportjava.awt.event.KeyEvent; //シリアルポートからデータを読み取るためのライブラリをインポートしますimportjava.io.IOException; Serial myPort; //オブジェクトシリアルを定義します// defubes変数Stringangle =""; String distance =""; String data =""; String noObject; float pixsDistance; int iAngle、iDistance; int index1 =0; int index2 =0; PFont orcFont; void setup(){サイズ(1366、768); // ***これを画面の解像度に変更*** smooth(); myPort =new Serial(this、 "COM3"、9600); //シリアル通信を開始しますmyPort.bufferUntil( '。'); //シリアルポートから文字「。」までのデータを読み取ります。したがって、実際には次のようになります。angle、distance。} void draw(){fill(98,245,31); //動線のモーションブラーとスローフェードをシミュレートしますnoStroke(); fill(0,4); rect(0、0、width、height-height * 0.065); fill(98,245,31); //緑色//レーダーを描画するための関数を呼び出しますdrawRadar(); drawLine(); drawObject(); drawText();} void serialEvent(Serial myPort){//シリアルポートからのデータの読み取りを開始します//シリアルポートから文字「。」までのデータを読み取りますそしてそれを文字列変数「data」に入れます。 data =myPort.readStringUntil( '。'); data =data.substring(0、data.length()-1); index1 =data.indexOf( "、"); //文字「、」を見つけて変数「index1」に入れますangle =data.substring(0、index1); //位置「0」から変数index1の位置まで、またはArduinoボードがシリアルポートに送信した角度の値までデータを読み取りますdistance =data.substring(index1 + 1、data.length()); //位置 "index1"から距離の値であるデータの終わりまでデータを読み取ります//文字列変数を整数に変換しますiAngle =int(angle); iDistance =int(distance);} void drawRadar(){pushMatrix(); translate(width / 2、height-height * 0.074); //開始コーディネートを新しい場所に移動しますnoFill(); strokeWeight(2);ストローク(98,245,31); //円弧を描画しますarc(0,0、(width-width * 0.0625)、(width-width * 0.0625)、PI、TWO_PI); arc(0,0、(width-width * 0.27)、(width-width * 0.27)、PI、TWO_PI); arc(0,0、(width-width * 0.479)、(width-width * 0.479)、PI、TWO_PI); arc(0,0、(width-width * 0.687)、(width-width * 0.687)、PI、TWO_PI); //角度の線を描画しますline(-width / 2,0、width / 2,0); line(0,0、(-width / 2)* cos(radians(30))、(-width / 2)* sin(radians(30))); line(0,0、(-width / 2)* cos(radians(60))、(-width / 2)* sin(radians(60))); line(0,0、(-width / 2)* cos(radians(90))、(-width / 2)* sin(radians(90))); line(0,0、(-width / 2)* cos(radians(120))、(-width / 2)* sin(radians(120))); line(0,0、(-width / 2)* cos(radians(150))、(-width / 2)* sin(radians(150))); line((-width / 2)* cos(radians(30))、0、width / 2,0); popMatrix();} void drawObject(){pushMatrix(); translate(width / 2、height-height * 0.074); //開始コーディネートを新しい場所に移動しますstrokeWeight(9);ストローク(255,10,10); //赤色pixsDistance =iDistance *((height-height * 0.1666)* 0.025); //センサーからcmからピクセルまでの距離をカバーします//範囲を40cmに制限しますif(iDistance <10){//角度と距離線に従ってオブジェクトを描画します(pixsDistance * cos(radians(iAngle)) 、-pixsDistance * sin(radians(iAngle))、(width-width * 0.505)* cos(radians(iAngle))、-(width-width * 0.505)* sin(radians(iAngle))); } popMatrix();} void drawLine(){pushMatrix(); strokeWeight(9);ストローク(30,250,60); translate(width / 2、height-height * 0.074); //開始座標を新しい場所に移動しますline(0,0、(height-height * 0.12)* cos(radians(iAngle))、-(height-height * 0.12)* sin(radians(iAngle))); //角度に従って線を描画しますpopMatrix();} void drawText(){//画面にテキストを描画しますpushMatrix(); if(iDistance> 10){noObject ="範囲外"; } else {noObject ="範囲内"; } fill(0,0,0); noStroke(); rect(0、height-height * 0.0648、width、height); fill(98,245,31); textSize(25); text( "2cm"、width-width * 0.3854、height-height * 0.0833); text( "4cm"、width-width * 0.281、height-height * 0.0833); text( "6cm"、width-width * 0.177、height-height * 0.0833); text( "10cm"、width-width * 0.0729、height-height * 0.0833); textSize(40); text( "Akshay6766"、width-width * 0.875、height-height * 0.0277); text( "Angle:" + iAngle + ""、width-width * 0.48、height-height * 0.0277); text( "距離:"、幅-幅* 0.26、高さ-高さ* 0.0277); if(iDistance <40){text( "" + iDistance + "cm"、width-width * 0.225、height-height * 0.0277); } textSize(25); fill(98,245,60); translate((width-width * 0.4994)+ width / 2 * cos(radians(30))、(height-height * 0.0907)-width / 2 * sin(radians(30)));回転(-ラジアン(-60)); text( "30"、0,0); resetMatrix(); translate((width-width * 0.503)+ width / 2 * cos(radians(60))、(height-height * 0.0888)-width / 2 * sin(radians(60)));回転(-ラジアン(-30)); text( "60"、0,0); resetMatrix(); translate((width-width * 0.507)+ width / 2 * cos(radians(90))、(height-height * 0.0833)-width / 2 * sin(radians(90)));回転(ラジアン(0)); text( "90"、0,0); resetMatrix(); translate(width-width * 0.513 + width / 2 * cos(radians(120))、(height-height * 0.07129)-width / 2 * sin(radians(120)));回転(ラジアン(-30)); text( "120"、0,0); resetMatrix(); translate((width-width * 0.5104)+ width / 2 * cos(radians(150))、(height-height * 0.0574)-width / 2 * sin(radians(150)));回転(ラジアン(-60)); text( "150"、0,0); popMatrix(); }
回路図
製造プロセス