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)

 

 

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

 - 電子工作

  関連記事

マウスを入力I/Fとして使うのを断念してみた。

お疲れ様です。高橋です。 先日の「マウスを分解してみた」でマウスを分解し、ケーブ …

4桁7セグLEDを基板に実装

お疲れ様です。高橋です。 昨日に引き続き今日も奇跡的に早く帰宅する事が出来たため …

電子オルゴール 動作試験 #2

お疲れ様です。高橋です。 Pro Mini互換機とYMZ294、EEPROMで作 …

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

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

猫×おもちゃ×動画×アプリ

お疲れ様です。高橋です。 金魚水槽 先日フラフラとネットサーフィンしていて目に入 …

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

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

音階LED完成、YMZのノイズの原因判明

お疲れ様です。高橋です。 音階LEDの実装が完了しました。 青色LEDが眩しすぎ …

ルンバにスピッツを演奏させてみた

お疲れ様です。高橋です。 家にあるルンバにArduinoを挿して、スピッツの「涙 …

LPC810をSCC/PSGにする

お疲れ様です。高橋です。 出会い ImpactDrillさんのサイトの「LPC8 …

YMZシールドの基板設計

お疲れ様です。 前に基板化したYMZ294をさらにシールド化したい事をPOSTし …