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)

 

 

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

 - 電子工作

  関連記事

抵抗が焼けた – Arduinoで赤外線リモコン

お疲れ様です。高橋です。 今日の実験中、抵抗が焼けてしまいました。 なんか異臭が …

YMZシールド 再作成

お疲れ様です。高橋です。 YMZのノイズが超気になる YMZ294用の音楽を聞く …

「びんぼうでいいの」を組み立ててみた。

お疲れ様です。高橋です。 懸案だったヘッドフォンの修理が片付き、やりたい事をやり …

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

お疲れ様です。高橋です。 硫化水素センサーが到着しました。結構前に到着していたの …

耳コピミキサー 試作

お疲れ様です。高橋です。 iPhoneから流す音と電子ピアノから流す音を合成する …

YMZシールドのMIDI化を検討

お疲れ様です。高橋です。 Arduino UNOにYMZシールドをくっつけ、さら …

音階LED実装 #3 – 秋葉原で買い物

お疲れ様です。高橋です。 先日、お小遣いがチャージされまして、音階LED実装に必 …

汎用ロジックIC(NAND/NOR/AND/OR)試験機

お疲れ様です。高橋です。 単一の機能を持ったシンプルな、汎用ロジックICという物 …

EEPROM書き込みシールドの作成

お疲れ様です。高橋です。 先日成功したPCからのEEPROM書き込みですが、ジャ …

耳コピミキサー 半田付け #1

お疲れ様です。高橋です。 耳コピ用ミキサーの半田付けを行いました。 ブレッドボー …