curious4dev

中国旅行、Arduinoなどを使った電子工作、その他色々。

*

上司離着席検知システムの作り方

 

お疲れ様です。高橋です。

上司離着席検知システムの作り方は下記の通りです。

必要な部品と価格

必要な部品は下記の4種類です。

Arduino Pro Mini(互換機も可) – 秋月価格: 1,400円 * 2個 = 2,800円

2.4GHz帯無線モジュール – aitendo価格: 390円 * 2個 = 780円

IR測距センサ – 秋月価格: 450円

LED(赤と青) – aitendo価格: 3円 * 2個 = 6円

合計 4,036円

日本で買うとこのような価格となります。

AliExpress参考価格

中国のECサイト AliExpress で購入すると・・・

Arduino Pro Mini互換機 AliExpress価格: 200円 * 2個 = 400円

2.4GHz帯無線モジュール – AliExpress価格: 131円 * 2個 = 262円

IR測距センサ – AliExpress価格: 511円

LED(赤と青) – AliExpress価格: 1円 * 2個 = 2円

合計 1,175円

となります。IR測距センサーはSHARP製だからなのか、秋月で購入したほうが安く済みます。

IR測距センサだけを秋月で購入した場合、1,114円となります。

日本の価格の27%。驚異的な価格競争力です。

中国の物の安さは、バカな物を気楽に少量だけ作ろうとする人にとっては、とてもありがたい。

無線モジュールnRF24L01のピン配置

IMG_5470

回路図

クライアント側

090301_client

サーバ側

090302_server

スケッチ

クライアント側
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#define IR_SOKKYO_PIN 1

void setup() {
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"serv1");
  Mirf.payload = sizeof(unsigned long);
  Mirf.config();

}

void loop() {
  const byte irChakuseki = 10;
  const byte irRiseki = 20;
  byte sendData[Mirf.payload];

  if (!Mirf.isSending() && Mirf.dataReady()) {
    Mirf.getData(sendData);
    Mirf.setTADDR((byte *)"clie1");
    int val = AnaToCm(IDSread());
    if (val != 0) {
      sendData[0] = irChakuseki;
    } else {
      sendData[0] = irRiseki;
    }
    Mirf.send(sendData);
  }
}

int IDSread() {
  long ans ;
  int i ;

  ans = 0 ;
  for (i = 0 ; i < 100 ; i++) {
    ans  = ans + analogRead(IR_SOKKYO_PIN) ;
  }
  return ans / 100 ;
}

int AnaToCm(int analogValue) {

  if (analogValue < 85 ) return (0) ;
  if (analogValue >= 470) return (10) ;
  if (analogValue >= 260) return (20) ;
  if (analogValue >= 165) return (30) ;
  if (analogValue >= 126) return (40) ;
  if (analogValue >= 105) return (50) ;
  if (analogValue >= 85 ) return (60) ;
  return (-1) ;
}
サーバ側
#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>
#define CHAKUSEKI 3
#define RISEKI 2

void setup() {
  pinMode(CHAKUSEKI, OUTPUT);
  pinMode(RISEKI, OUTPUT);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  Mirf.setRADDR((byte *)"clie1");
  Mirf.payload = sizeof(unsigned long);
  Mirf.config();
  digitalWrite(CHAKUSEKI, LOW);
  digitalWrite(RISEKI, HIGH);
}

void loop() {
  const byte irChakuseki = 10;
  const byte irRiseki = 20;
  unsigned long time = millis();
  byte recvData[Mirf.payload];

  Mirf.setTADDR((byte *)"serv1");
  Mirf.send(recvData);
  while (Mirf.isSending()) {
  }
  while (!Mirf.dataReady()) {
    if ((millis() - time) > 1000 ) {
      return;
    }
  }
  Mirf.getData(recvData);
  if (recvData[0] == irChakuseki) {
    digitalWrite(CHAKUSEKI, HIGH);
    digitalWrite(RISEKI, LOW);
  } else {
    digitalWrite(CHAKUSEKI, LOW);
    digitalWrite(RISEKI, HIGH);
  }
  delay(1000);
}

参考サイト

なんでも独り言 – nRF24L01モジュールで無線通信

きむ茶工房ガレージハウス赤外線測距モジュールで物体の距離を測ってみます(1/2)

 

 

以上、よろしくお願い致します。

 - 電子工作

  関連記事

音階LED実装 #1

お疲れ様です。高橋です。 今日の進捗 音階LEDの半田付け 1日目です。 ICソ …

YMZシールドの基板設計 #2

お疲れ様です。高橋です。 先日行ったYMZシールドの基板設計の設計図を元に、部品 …

ArduinoIDE1.6.4+ATTiny13Aで赤外線リモコン

お疲れ様です。高橋です。 先日実験したArduinoで赤外線リモコンの問題点、そ …

USBやDCジャックからの5Vを3.3Vにする物を作った

お疲れ様です。高橋です。 前にesp8266の動作試験を行った時、とても面倒だと …

音階LED実装 #4

お疲れ様です。高橋です。 今日は音階LEDのIC-IC間、GNDの敷設、そして1 …

webからUSBカメラ+Raspberry Pi

お疲れ様です。高橋です。 The Internetから、RaspberryPiの …

【完成】 電子オルゴール

お疲れ様です。高橋です。 電子オルゴールの制作が佳境に入り、とうとうカルトナージ …

Pro Mini互換機でFF2戦闘音楽を使ったYMZ動作試験

お疲れ様です。高橋です。 電子オルゴールの最終形をイメージしてブレッドボード上で …

満員電車内でのオナラと検知 #5

お疲れ様です。高橋です。 マイコンと5V給電 先日実験に成功した硫化水素センサー …

Arduino+EEPROM+YMZ294で曲の抜き差し

お疲れ様です。高橋です。 I2Cの256KBitなEEPROMに曲データを書き込 …