Arduino
1458778369

Arduinoリファレンス

関数やライブラリの参照に便利
1458776824

労働者監視プログラム

使用パーツ

  1. LED
  2. LCD RGB Backlight
  3. Buzzer
  4. RIP Motion Sensor
  5. Speaker
#include "rgb_lcd.h"

#define PIR_MOTION_SENSOR 2 // Pin D2
#define LED  4  // Pin  D4
#define BUZZER 5 // Pin D5
#define SPEAKER 6 // Pin D6

rgb_lcd lcd;
int counter = 0; // 32bit Max 2147483647
int lastValue = LOW;
char scount[17];
float gLastMtime = 0;
float gLastSound = 0;
int flagAlert = 0;

void kLcdoutDec(int i)
{
  sprintf(scount, "%14d", i);
  lcd.setCursor(0, 1);
  lcd.print(scount);
}

void beep() {
  int i;
  for (i = 0; i < 1; i++)
  {
    digitalWrite(BUZZER, HIGH);
    delay(4);
    digitalWrite(BUZZER, LOW);
    delay(1);
  }
}

void sound()
{
  int idx = 0;
  for (int j = 0; j < 3; j++) {
    for (int i = 0; i < 400; i++)
    {
      digitalWrite(SPEAKER, LOW);
      delayMicroseconds(500 - i);
      digitalWrite(SPEAKER, HIGH);
      delayMicroseconds(500 - i);
    }
    delay(200);
  }
  digitalWrite(SPEAKER, HIGH);
}

void LedOn()
{
  digitalWrite(LED, HIGH);
}

void LedOff()
{
  digitalWrite(LED, LOW);
}

void setup()
{
  pinMode(PIR_MOTION_SENSOR, INPUT);
  pinMode(LED, OUTPUT);
  pinMode(BUZZER, OUTPUT);

  pinMode(SPEAKER, OUTPUT);
  digitalWrite(SPEAKER, HIGH);

  lcd.begin(16, 2);
  lcd.clear();
  lcd.print("Work supervisor ");
  lcd.setRGB(0, 128, 0);
  beep();
//  delay(1000);
//  sound();
}

void loop()
{
  unsigned long mtime = millis();
  int sensorValue = digitalRead(PIR_MOTION_SENSOR);
  if (sensorValue == HIGH) {
    LedOn();
    counter = 0;
    flagAlert = 0;
    lcd.setRGB(0, 128, 0);
    if (lastValue != sensorValue) {
      int nondet = (int)((mtime - gLastMtime) / 1000);
      if (nondet > 10) {
        kLcdoutDec(nondet);
        beep();
      }
      gLastMtime = mtime;
    }
  }
  else {
    LedOff();
    if(mtime - gLastMtime > 10000) {
      flagAlert = 1;
      lcd.setRGB(128, 0, 0);
    }
    if(flagAlert == 1 && ((mtime - gLastSound) > 2300)) {
      gLastSound = mtime;
      sound();
    }
  }
  lastValue = sensorValue;
  if (++counter >= 1000000000)
    counter = 0;
}
労働者監視ロボット - YouTube
一定時間、労働者の動きが止まるか、離席をすると警報を発報します。 この動画では10秒間に設定しています。 警報の発報後、動きを検知すると警報を停止し復帰までに要した秒数を表示します... という空想のものです。 将来、このようなロボットが職場に配備されると怖いですね。
1458605574

Seconds Counter [Arduino]

#include "rgb_lcd.h"
rgb_lcd lcd;
int counter = 0; // 32bit Max 2147483647
char scount[17];
const int pinBuzzer = 4;

void beep() {
  int i;
  for(i=0;i<1;i++)
    {
      digitalWrite(pinBuzzer,HIGH);
      delay(4);
      digitalWrite(pinBuzzer,LOW);
      delay(1);
    }
}

void setup() {
  pinMode(pinBuzzer,OUTPUT);
  lcd.begin(16, 2);
  lcd.clear();
  lcd.print("Seconds counter ");
  delay(5000);
}

void loop() {
  delay(990);
  lcd.setCursor(0, 1);
  sprintf(scount, "%14d", counter);
  lcd.print(scount);
  counter++;
  if (1000000000 <= counter) {
    counter = 0;
  }
  beep();
}
Seconds Counter (Arduino) - YouTube
Sample Code https://put.kodama.com/4WO7