Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth

Komponenten und Materialien

Arduino UNO × 1
HC-06 Bluetooth Modul × 1
Breadboard (generic) × 2
Fotowiderstand (LDR) × 3
Lasermodul × 3
Summer (Buzzer) × 1
RGB LED Modul × 1
LED (generic) × 3
Widerstand 1k Ohm × 3
Widerstand 221 Ohm × 3
Batterie × 1
Jumper Kabel (generic) × 1

Apps und Online-Dienste

Über dieses Projekt

Beschreibung

Ein Personenzähler erkennt die Anzahl der Personen, die einen Eingang passieren. Ich wollte mein Zimmer während eines zweiwöchigen Urlaubs sichern und gleichzeitig einen Alarm für unbefugtes Betreten haben. Laserstrahlen mit LDRs eignen sich ideal zum präzisen Zählen aufgrund ihrer Geradlinigkeit. Da mein Zimmer drei Zugänge hat (zwei Türen, ein Fenster), setzte ich drei Laser-LDR-Paare ein.

Für die Fernsteuerung – welche Lasern aktiv sind, ob Alarm an/aus – ergänzte ich ein HC-06 Bluetooth-Modul und eine selbst erstellte Android-App. Die App zeigt zudem die Personenanzahl pro Eingang an.

Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth
Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth

App-Erstellung mit MIT App Inventor

Es gibt viele Wege, Android-Apps zu erstellen (HTML→Java, Python, etc.). Der MIT App Inventor ist per Drag-and-Drop am einfachsten, unterstützt aber (noch) kein iOS.

Die App "People Counter!" hat zwei Screens:

Screen 1 – Startbildschirm

Zuerst muss das im App Inventor gesetzte Passwort eingegeben werden (Standard: "counter").

Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth
Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth

Screen 2 – Hauptsteuerung

Hier wird der Arduino gesteuert und die Zählerstände angezeigt. Man wählt, welcher Laser aktiv ist, ob Alarm an/aus, sieht die Zählergebnisse und kann diese auf Null setzen.

Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth
Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth

Funktionsweise: Laser & LDR als Personenzähler

Ein Laser sendet Licht gebündelt in gerader Linie. Ein LDR (lichtabhängiger Widerstand) detektiert die Lichtintensität. Wird der Strahl unterbrochen, sinkt die Intensität. Zählt man jeden Abfall im optimalen Bereich, hat man einen Personenzähler. Meine Versuche ergaben einen optimalen Schwellenbereich zwischen 150 und 350 (analoge Werte).

Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth

Verkabelung

Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth

Wichtig: Vor dem endgültigen Anschluss sicherstellen, dass die Laser genau auf die LDRs zielen.

Nach Tests teilte ich das Gerät in drei Einheiten für die drei Eingänge auf. Seitdem keine Sicherheitsbedenken mehr.

Code

PeopleCounter_with_Lasers.ino (Arduino)

/////////////////////////////////////////////
// Create a People Counter with Lasers
// on an Android Device
// by Kutluhan Aktar
/////////////////////////////////////////////
// Zweck: Personenzähler mit Lasern & LDRs, gesteuert per Android-App.
// LDR-Bein mit 1k Ohm an GND.
// Laser exakt auf LDRs ausrichten.
// Optimalen LDR-Schwellwert für Genauigkeit einstellen.

#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(); // Optional: Bluetooth-Defaults ändern
  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) {
    Counter++;
    delay(500); // Entprellung / Erkennungszeit
  }
}

void Set_Alarm() {
  if (Alarm_is_Activated) {
    if (LDR_1_Read < 150 || LDR_2_Read < 150 || LDR_3_Read < 150) {
      Alarm_Initial = true;
    } else {
      Alarm_Initial = false;
    }
    if (Alarm_Initial) {
      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 || !Alarm_Initial) {
    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 geändert: "); Serial.println(Name); delay(2000);
  Control.print("AT+PSWD"); Control.println(Password);
  Serial.print("Passwort geändert: "); Serial.println(Password); delay(2000);
  Control.print("AT+UART"); Control.println(Uart);
  Serial.print("Baudrate gesetzt: "); Serial.println(Uart); delay(2000);
  Serial.println("Aufgabe abgeschlossen.");
}

Schaltplan & Dateien

Intelligenter Personenzähler mit Android-App-Steuerung per Bluetooth

App-Dateien: peoplecounter_J375iBnBF8.aia (MIT App Inventor Projekt), peoplecounter_uBf7MU4A1c.apk (Android App)

Herstellungsprozess

  1. Temperaturgesteuerter Lüfter: DIY Relais-System für Medienmöbel-Kühlung
  2. Gesten-gesteuerter Roboter mit Raspberry Pi
  3. WLAN-gesteuerter Roboter mit Raspberry Pi & Android Smartphone bauen
  4. 3D RGB Arduclock – Bluetooth-LED-Uhr mit Echtzeituhr
  5. NeoPixel LED-Strip per WLAN steuern: ESP8266-Projekt mit Android-App
  6. Android-gesteuertes Roboterfahrzeug mit Raspberry Pi Motor Shield
  7. LEDs mit Alexa über Raspberry Pi steuern – Einfache Schritt-für-Schritt-Anleitung
  8. River Health Monitor: Arduino-basiertes Wasserqualitäts-Messsystem
  9. Interaktives Joystick-Spiel mit Arduino & LED-Feedback
  10. Valentinstags-Geschenk: DIY Tage-zusammen-Zähler