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

スマート人数カウンターを作ろう:Androidアプリで制御

コンポーネントと用品

スマート人数カウンターを作ろう:Androidアプリで制御 Arduino UNO ×1
スマート人数カウンターを作ろう:Androidアプリで制御 HC-06 Bluetoothモジュール ×1
スマート人数カウンターを作ろう:Androidアプリで制御 ブレッドボード(汎用) ×2
スマート人数カウンターを作ろう:Androidアプリで制御 フォトレジスタ(光センサー) ×3
スマート人数カウンターを作ろう:Androidアプリで制御 レーザーモジュール ×3
スマート人数カウンターを作ろう:Androidアプリで制御 ブザー ×1
スマート人数カウンターを作ろう:Androidアプリで制御 RGB LEDモジュール ×1
スマート人数カウンターを作ろう:Androidアプリで制御 LED(汎用) ×3
スマート人数カウンターを作ろう:Androidアプリで制御 抵抗 1kΩ ×3
スマート人数カウンターを作ろう:Androidアプリで制御 抵抗 221Ω ×3
スマート人数カウンターを作ろう:Androidアプリで制御 電池 ×1
スマート人数カウンターを作ろう:Androidアプリで制御 ジャンパーワイヤー(汎用) ×1

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

スマート人数カウンターを作ろう:Androidアプリで制御 Arduino IDE
スマート人数カウンターを作ろう:Androidアプリで制御 MIT App Inventor

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

説明

人数カウンターは、出入口を通過する人の数を検出するデバイスです。2週間の休暇で部屋を空ける際に部屋を守るため、また無許可で入室しようとする人への警告アラームとして、人数カウンターを作ろうと考えました。レーザーはその直進性の速さからLDR(光依存抵抗)と組み合わせて正確にカウントするのに最適なので、レーザーとLDRをカウント用に採用しました。私の部屋には3つの出入口(ドア2つと窓1つ)があるため、3つのレーザーと3つのLDRを使用しました。しかし、デバイスを遠隔操作してどの出入口のレーザーを有効にするか、アラームをオン/オフするかを選択できる必要があると気づきました。そこでHC-06 Bluetoothモジュールを追加し、自作のAndroidアプリでデバイスと通信できるようにしました。さらに、Androidアプリには観察したい出入口の通過人数を表示する機能も付けました。

私のプロジェクトと記事を支援してくださる場合は、こちらのウェブサイトをご覧ください :)

スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御

アプリの作成

Androidアプリを作成する方法はいくつかあります。HTMLからJavaへの変換やPythonでのプログラミングなどですが、MIT App Inventorはドラッグ&ドロップの構造で最も簡単です。ただし、現時点ではiOSには対応していません。

アプリ名は「People Counter!」で、Screen1とScreen2の2画面で構成されています。

スマート人数カウンターを作ろう:Androidアプリで制御

Screen1(ホーム画面)

スマート人数カウンターを作ろう:Androidアプリで制御

メイン画面へ進むためのホーム画面ですが、まずMIT App Inventorで設定したパスワードを正しく入力する必要があります(デフォルトパスワードは「counter」)。

スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御

Screen2(メイン画面)

スマート人数カウンターを作ろう:Androidアプリで制御

Arduinoボードを制御するメニューと、Arduinoから送信される人数カウント結果が表示されるメイン画面です。

ここでどのレーザーをオンにするか、アラームをオン/オフするかを選択でき、さらに人数カウントの結果を見たり、カウントをゼロにリセットしたりできます。

スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御

レーザーとLDRを使った人数カウンターの作り方

レーザー(Light Amplification by Stimulated Emission of Radiation)は、基本的に光のパッケージを非常に直線的にターゲットへ送る装置です。LDR(光依存抵抗)は、レーザーが直接当たっているときに光強度の増加を容易に検出できます。レーザーとLDRの間に障害物があると、LDRは光強度の減少を検出します。この最適レベルの範囲での減少をカウントできれば、人数カウンターになります。私のLDR実験によると、最適レベルの範囲は150〜350の間に設定する必要があります。

スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御

接続

スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御
スマート人数カウンターを作ろう:Androidアプリで制御

全ての部品を接続する前に、レーザーがLDRに直接向いていることを確認してください。

デバイスをテストし、テスト動画を撮影した後、3つの出入口用にデバイスを3つに分割しました。これを使い始めてから、部屋のセキュリティについて心配することはなくなりました。

コード

PeopleCounter_with_Lasers.ino Arduino
/////////////////////////////////////////////
// Create a People Counter with Lasers
// on an Android Device
// by Kutluhan Aktar
/////////////////////////////////////////////
// レーザーとLDRを使って部屋に入る人数を検出し、Androidアプリで制御する人数カウンターを作成するプロジェクトです。
// LDRの片足を1kΩ抵抗でGNDに接続してください。
// レーザーがLDRに直接向くようにしてください。
// 正確な結果を得るには、LDRの最適レベルを正しく設定してください。

// 接続:
// Arduino Uno
// Laser_Module_1: Pin 2
// Laser_Module_2: Pin 3
// Laser_Module_3: Pin 4
// Buzzer: Pin 5
// HC-06 Bluetooth Module: Pin 6 (TX), Pin 7 (RX)
// Control_Led_1: Pin 8
// Control_Led_2: Pin 12
// Control_Led_3: Pin 13
// RGB_Module: Pin 9 (R), Pin 10 (G), Pin 11 (B)
// LDR_1: A0, LDR_2: A1, LDR_3: A2

#include <SoftwareSerial.h>
int LaserPin_1 = 2;
int LaserPin_2 = 3;
int LaserPin_3 = 4;
int BuzzerPin = 5;
int Control_RX = 6;
int Control_TX = 7;
int RedPin = 9;
int GreenPin = 10;
int BluePin = 11;
int Control_Led_1 = 8;
int Control_Led_2 = 12;
int Control_Led_3 = 13;
int LDR_1 = A0;
int LDR_2 = A1;
int LDR_3 = A2;
int LDR_1_Read, LDR_2_Read, LDR_3_Read;
int Counter = 0;
volatile boolean Alarm_is_Activated = false;
volatile boolean Alarm_Initial = false;
volatile boolean Counter_Detect = false;
SoftwareSerial Control(Control_RX, Control_TX);
String Name = "Control";
int Password = 1111;
String Uart = "9600,0,0";

void setup() {
  Serial.begin(9600);
  Control.begin(9600);
  // Change_BluetoothModule_Defaults(); // Bluetoothモジュールのデフォルト変更時のみ有効化
  pinMode(LaserPin_1, OUTPUT);
  pinMode(LaserPin_2, OUTPUT);
  pinMode(LaserPin_3, OUTPUT);
  pinMode(RedPin, OUTPUT);
  pinMode(GreenPin, OUTPUT);
  pinMode(BluePin, OUTPUT);
  pinMode(Control_Led_1, OUTPUT);
  pinMode(Control_Led_2, OUTPUT);
  pinMode(Control_Led_3, OUTPUT);
}

void loop() {
  get_Data_From_LDR();
  if (Control.available()) {
    char c = Control.read();
    Serial.println(c);
    Commands(c);
  }
  Set_Alarm();
  Set_Counter();
}

void Commands(char i) {
  switch (i) {
    case '1': Control.print(Counter); break;
    case '2': Alarm_is_Activated = true; break;
    case '3': Alarm_is_Activated = false; break;
    case '4': digitalWrite(LaserPin_1, HIGH); digitalWrite(Control_Led_1, HIGH); break;
    case '5': digitalWrite(LaserPin_1, LOW); digitalWrite(Control_Led_1, LOW); break;
    case '6': digitalWrite(LaserPin_2, HIGH); digitalWrite(Control_Led_2, HIGH); break;
    case '7': digitalWrite(LaserPin_2, LOW); digitalWrite(Control_Led_2, LOW); break;
    case '8': digitalWrite(LaserPin_3, HIGH); digitalWrite(Control_Led_3, HIGH); break;
    case '9': digitalWrite(LaserPin_3, LOW); digitalWrite(Control_Led_3, LOW); break;
    case 'r': Counter = 0; break;
  }
}

void get_Data_From_LDR() {
  LDR_1_Read = analogRead(LDR_1);
  LDR_2_Read = analogRead(LDR_2);
  LDR_3_Read = analogRead(LDR_3);
}

void Set_Counter() {
  if (LDR_1_Read < 150 || LDR_2_Read < 150 || LDR_3_Read < 150) {
    Counter_Detect = true;
  } else {
    Counter_Detect = false;
  }
  if (Counter_Detect == true) {
    Counter = Counter + 1;
    delay(500);
  }
  if (Counter_Detect == false) {
    Counter = Counter;
  }
}

void Set_Alarm() {
  if (Alarm_is_Activated == true) {
    if (LDR_1_Read < 150 || LDR_2_Read < 150 || LDR_3_Read < 150) {
      Alarm_Initial = true;
    } else {
      Alarm_Initial = false;
    }
    if (Alarm_Initial == true) {
      tone(BuzzerPin, 500);
      Color_Change(255, 0, 0); delay(50);
      Color_Change(0, 255, 0); delay(50);
      Color_Change(0, 0, 255); delay(50);
      Color_Change(255, 255, 0); delay(50);
      Color_Change(80, 0, 80); delay(50);
      Color_Change(0, 255, 255); delay(50);
      Color_Change(255, 255, 255); delay(50);
    }
  }
  if (Alarm_is_Activated == false || Alarm_Initial == false) {
    noTone(BuzzerPin);
    Color_Change(0, 0, 0);
  }
}

void Color_Change(int red, int green, int blue) {
  red = 255 - red;
  green = 255 - green;
  blue = 255 - blue;
  analogWrite(RedPin, red);
  analogWrite(GreenPin, green);
  analogWrite(BluePin, blue);
}

void Change_BluetoothModule_Defaults() {
  Control.print("AT+NAME");
  Control.println(Name);
  Serial.print("Name is changed: ");
  Serial.println(Name);
  delay(2000);
  Control.print("AT+PSWD");
  Control.println(Password);
  Serial.print("Password is changed: ");
  Serial.println(Password);
  delay(2000);
  Control.print("AT+UART");
  Control.println(Uart);
  Serial.print("Baud rate is set: ");
  Serial.println(Uart);
  delay(2000);
  Serial.println("Task is completed.");
}

製造プロセス

  1. 温度制御ファンサーキット:メディア家具冷却用DIYリレーシステム
  2. Raspberry Pi でジェスチャー制御ロボットを構築 – 加速度センサーと RF 通信でハンドフリー操作
  3. Raspberry Pi & Android スマホで Wi-Fi 制御ロボットを構築
  4. 3D RGB アルドゥクロック:Bluetooth対応LED時計(RTC内蔵)
  5. Wi-FiでNeoPixel LEDストリップを制御:ESP8266とAndroidアプリで炎エフェクト
  6. Android加速度センサーで操作するラジコン車両:Raspberry Pi・Arduino・モーターシールド連携
  7. ラズベリーパイとNode-REDでAlexaからLEDを制御する - 簡単ステップバイステップガイド
  8. 川の健康を見守る:Arduinoベース水質監視システム「MyRiver」
  9. Arduinoとジョイスティックでインタラクティブゲーム – LEDフィードバック付き
  10. Windows 10 UWP向けPM2.5/PM10大気質検知アプリの設計
  11. バレンタインデーの贈り物:DIY 交際日数カウンター