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)

 

 

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

 - 電子工作

  関連記事

YMZシールドの基板設計

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

Arduino電源ON/OFF機

お疲れ様です。高橋です。 Arduinoを使っている時、特に2個とか複数同時に使 …

ブレッドボード上のYMZ294をユニバーサル基板化してみたが。

お疲れ様です。高橋です。 ArduinoからYMZを鳴らしているブレッドボードが …

大掃除を終え、aitendoで30円で売ってたタクトスイッチ基板でクリスマス

お疲れ様です。高橋です。 aitendoで店頭限定30円だったタクトスイッチ基板 …

音階LED表示器の実体配線図を書いてみた。

お疲れ様です。高橋です。 前に「音階に合わせてLEDを光らせてみた。」で実験した …

ArduinoIDE1.6.4+ATTiny13Aで赤外線リモコン(難航)

お疲れ様です。高橋です。 先日から引き続いて、ATTiny13Aで赤外線リモコン …

上司離着席検知システムと空巣検知

お疲れ様です。高橋です。 前回のおさらいと課題 前回の「上司離着席検知システムの …

ルネサス RX621でLチカするまで

お疲れ様です。高橋です。 とある事情のため購入した、ルネサスのRX621マイコン …

aitendoのArduino用生シールド基板を1枚120円で買った。

お疲れ様です。高橋です。 今日もaitendoに行ってきたのですが、120円のシ …

YMZ294のMIDI音源化と、YMZのピン数圧縮

お疲れ様です。高橋です。 YMZで使うピン数を11本から6本に減らす事によって、 …