工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

nRF24L01+とATtiny85で実現する3ピン無線センサ送信

必要な部品と材料

部品数量備考
nRF24L01+ モジュール2送信側・受信側各1個
ATtiny851送信側マイコン
Arduino UNO1受信側・ATtiny85書き込み用
セラミックコンデンサ 10nF1電源安定化用
カーボン皮膜抵抗 22kΩ13ピン制御用
スイッチングダイオード 1N414813ピン制御用
3.3V電源1nRF24L01+用(5V不可)
nRF24L01+ ソケットアダプタ1任意(安定動作に推奨)

プロジェクト概要

前回の「Arduino UnoでATtiny85をプログラミング」に続くプロジェクトです。安価なATtiny85を採用した後、センサデータを安価に無線送信する方法を探し、低消費電力RFトランシーバ「nRF24L01+」にたどり着きました。しかしATtiny85はピン数が少なく、通常のSPI接続(CE, CSN, SCK, MOSI, MISOの5ピン)ではセンサ接続ピンが足りません。そこで「nRF24L01+を3ピンで制御する」手法(Ralph Doncaster氏の手法)を実装し、残りのピンをセンサ入力に割り当てられるようにしました。

システム構成:送信モジュールと受信モジュール

ライブラリは RF24 library (TMRh20版) を使用。Arduino IDEのライブラリマネージャから「RF24」で検索してインストール可能です。

送信側(Transmitter)の構築

必要部品

配線(3ピン制御のポイント)

通常SPIでは5ピン必要ですが、CEとCSNを同じピン(PB3/ピン2)に割り当て、ダイオードと抵抗で信号を分離することで3ピン(SCK, MOSI, 共通CE/CSN)に削減しています。詳細な配線は以下の画像を参照してください。

nRF24L01+とATtiny85で実現する3ピン無線センサ送信
nRF24L01+とATtiny85で実現する3ピン無線センサ送信
nRF24L01+とATtiny85で実現する3ピン無線センサ送信

送信側スケッチ(sender.ino)

#define CE_PIN 3
#define CSN_PIN 3  // CEとCSNを同一ピンで共有(3ピン構成)
#include "RF24.h"

RF24 radio(CE_PIN, CSN_PIN);
byte address[11] = "SimpleNode";
unsigned long payload = 0;

void setup() {
  radio.begin();
  radio.setAutoAck(1);
  radio.setRetries(15,15);
  radio.openWritingPipe(address);
}

void loop(void){
  payload++;
  radio.write(&payload, sizeof(unsigned long));
  delay(1000);  // 1秒ごとにインクリメント値を送信
}

※ATtiny85への書き込み方法は前回記事「Programming ATtiny85 with Arduino Uno」を参照してください。

受信側(Receiver)の構築

必要部品

配線

Arduino UNOの標準SPIピン(SCK=13, MOSI=11, MISO=12)に加え、CE=7, CSN=8を使用します。

nRF24L01+とATtiny85で実現する3ピン無線センサ送信
nRF24L01+とATtiny85で実現する3ピン無線センサ送信

受信側スケッチ(receiver.ino)

#define CE_PIN 7
#define CSN_PIN 8
#include <SPI.h>
#include "RF24.h"

RF24 radio(CE_PIN, CSN_PIN);
byte address[11] = "SimpleNode";
unsigned long payload = 0;

void setup() {
  Serial.begin(115200);
  radio.begin();
  radio.setAutoAck(1);
  radio.setRetries(15,15);
  radio.openReadingPipe(1, address);
  radio.startListening();
}

void loop(void){
  radio.stopListening();
  radio.startListening();
  radio.read(&payload, sizeof(unsigned long));
  if(payload != 0){
    Serial.print("Got Payload ");
    Serial.println(payload);
  }
  delay(1000);
}

重要:nRF24L01+の電源について

nRF24L01+は必ず**3.3V**で駆動してください。Arduino UNOの3.3V出力は電流容量が不足し、モジュールが正常動作しないことがよくあります。以下のいずれかの対策を推奨します:

  1. 別途3.3Vレギュレータ(例:AMS1117-3.3やLD1117-3.3)で安定化電源を作る
  2. モジュールのVCC-GND間に10μF以上の電解コンデンサを直結する
  3. nRF24L01+用ソケットアダプタ(オンボードレギュレータ付き)を使用する

動作確認

  1. 送信側に電源を投入(自動的に送信開始)
  2. 受信側のArduinoをPCに接続し、シリアルモニタ(115200bps)を開く
  3. 「Got Payload 1」「Got Payload 2」...と1秒ごとに表示されれば成功

実装例:ユニバーサル基板へのはんだ付け

ブレッドボード上で動作確認後、ユニバーサル基板にはんだ付けして常設化しました。

nRF24L01+とATtiny85で実現する3ピン無線センサ送信
nRF24L01+とATtiny85で実現する3ピン無線センサ送信
nRF24L01+とATtiny85で実現する3ピン無線センサ送信

まとめと今後の展開

このプロジェクトでは、ATtiny85の限られたピン数でnRF24L01+を制御し、残りのピンをセンサ入力に使えることを実証しました。フィードバックや改善提案を歓迎します。

回路図ファイル(Fritzing)

製造プロセス

  1. ローラーピン:エトルリア起源から現代の職人技へ
  2. 現代ボウリングピンの進化と職人技
  3. Raspberry Pi 2でDS18B20温度センサー読み取りガイド
  4. Raspberry PiでMaxim 1-WireセンサーとDS2482 I2Cブリッジを用いた温度測定
  5. Raspberry Piでサーバークローゼットの温度を正確に監視
  6. Walabot搭載Posture Pal:首・背中の痛みを防ぐリアルタイム距離監視
  7. Raspberry Piで手書き数字認識:TensorFlowとOpenCVを用いたディープラーニング実装
  8. TJBot入門:組み立て、設定、音声制御で自分だけのAIロボットを構築
  9. Raspberry Pi で自作セグウェイ(自己平衡ロボット)を構築
  10. GoPiGo v2をWindows 10 IoT Coreで拡張 - Raspberry Pi 3対応
  11. スイッチ付き回路:基本電気回路の実践ガイド