エントリー

カテゴリー「実験・研究」の検索結果は以下のとおりです。

ページ移動

  • ページ
  • 1
  • 2
  • 3
  • 4
  • 5

nRF24L01のループバックテスト

かなり前に購入して使わなかったnRF24L01(無線モジュール)の利用価値を確認するためテストした

Arduinoで直接nRF24L01ボードは扱いにくいので3.3V降圧付きのソケットを購入

IMG_20230518_111254.jpg

(左)nRF24L01ボード(右)ソケットアダプタ

8ピンソケットに刺して利用すると感度も良くなるらしいがどうだろう?

IMG_20230518_111338.jpg

接続方法など「無線モジュールnRF24L01を使いArduino間で無線通信をやってみる!」を参考にさせていただいた

使用するためのライブラリは(こちら),メソッドの仕様は「RF24 Class Reference」にある

LED点灯にて送受信確認

まずは参考サイトのとおりボタン押下を通信しLED点灯を行い動作を確認

IMG_20230518_131551.jpgIMG_20230518_144502.jpg

(左)送信側(右)受信側

消費電力

IMG_20230518_171959.jpg

UNO込み5Vで最大20mAのようだ(送受信で10~20mAを変動)

ループバックテスト

無線なんでどのくらいの距離を通信可能か確認したいこともありループバックでテストした

ループバックテストとはメインとスレーブとしたら,メインがスレーブに送信,スレーブが受信したデータをメインに送信(返送)してメインがデータが同じであることを確認する昔からある簡単かつ確実な通信確認(エコーバック,ピンポン手順として通信で利用されることも)

尚,Arduinoで送受信できることは問題ないようなので受信側はATtiny85を使用してみる

(送信側スケッチ)

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define TIMEOUT 200

RF24 radio(7, 8); //CE,CSNピンの指定
const byte sendAddress[6] = "00001";  //送信アドレス
const byte backAddress[6] = "00002"; //受信アドレス

const byte sendData[] = "0123456789abcdef";

void setup() {
Serial.begin(9600);
Serial.println("loopback test begin");

radio.begin();
radio.setPALevel(RF24_PA_MAX); //出力(RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX)
radio.openWritingPipe(sendAddress); //データ送信先アドレスを指定
radio.openReadingPipe(1, backAddress); //(0-5), データ受信アドレスを指定
//0は書き込みパイプと共有となるのでなるべく受信パイプは1-5
}

void loop() {
byte data;
int n, tm;
boolean retry;

for(n = 0; n < sizeof(sendData) - 1; n++) {
retry = true;

do {
delay(5);
radio.stopListening(); // 送信側として動作
radio.write(&sendData[n], sizeof(byte));

delay(5);
radio.startListening(); // 受信側として動作

for(tm = 0; tm < TIMEOUT; tm++) {
if(radio.available()) {
radio.read(&data, sizeof(byte));
if(sendData[n] == data) {
Serial.print(" -> back: ");
Serial.println(data);
retry = false;
} else {
Serial.println(" -> error");
Serial.println("retry");
}
break;
}
delay(5);
}
if(tm >= TIMEOUT) {
Serial.println(" -> time out");
Serial.print("retry");
delay(200);
}
} while(retry);

delay(2000);
}
}

(受信側スケッチ)

// ATMEL ATTINY85 / ARDUINO
//
// +-\/-+
// RESET PB5 | |8 VCC
// ADC3 (D3) PB3 2| |7 PB2 (D2) ADC1
// ADC2 (D4) PB4 3| |6 PB1 (D1) PWM1
// GND 4| |5 PB0 (D0) PWM0
// +----+
//
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(3, 4); //CE,CSNピンの指定(D3, D4)
const byte sendAddress[6] = "00002"; //送信アドレス
const byte recvAddress[6] = "00001"; //受信アドレス

void setup() {
radio.begin();
radio.setPALevel(RF24_PA_HIGH); //出力(RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX)
radio.openWritingPipe(sendAddress); //データ送信先アドレスを指定
radio.openReadingPipe(1, recvAddress); //データ受信アドレスを指定
}

void loop() {
byte data;

delay(10); //これがないと正常に送受信しない
radio.startListening(); //受信側として動作
if(radio.available()) {
radio.read(&data, sizeof(byte));
delay(10); //これがないと正常に送受信しない
radio.stopListening(); //送信側として動作
radio.write(&data, sizeof(byte));
}
}

(結果)

ATtiny85側のsetPALevelを最高のRF24_PA_MAXにすると処理が追い付かないのか通信不良となるのでRF24_PA_HIGHにした(送信側はRF24_PA_MAX)

場所(受信側) 距離 通信 結果画面
見通し 3m 良好
見通し 7m 良好
隣の部屋 5m SS20230519_room.png
2つ隣の部屋 10m 不可 SS20230519_2_room.png
1F-2F 5m(直線) SS20230519_1F-2F.png
10m以上 不可 SS20230519_outside.png
備忘録

(ATtiny85のスケッチ書き込み)

IDE2.XだとArduinoISPで書き込む場合「→」では書き込めなくなっていた(嵌った)

「スケッチ」→「書き込み装置を使って書き込む」を実行

SS20230519_001.png

(ATtiny85との結線)

IMG_20230519_103328.jpg

ATtiny85では全てのピンを使用してしまうため利用するのは厳しそうだ

(ArduinoUNOとの結線)

IMG_20230518_180618.jpg

クラップ発振回路を調整してインダクタンスを測定

LPC用のコイルをクラップ発振回路で調整しようとしたが発振しないせいで上手くいかなかったのでコンデンサーの容量を変更して確認することにした

確認するために用意したインダクタは7種で,市販品の,1mH,680μH,470μH,220μH,100μH,47μH,10μH

IMG_20211121_133730.jpg

目的とするインダクタは手巻きの,0.4μH,0.3μHで,間がないので手巻きで,5μH,1.1μHを作製

IMG_20211119_192552.jpg

回路図のC2,C3,C4の容量を変更して確認する

SC_20211112_01.png

発振して計算して判定できたインダクタをチェック

C2,C3,C4の容量(pF) 判定できた最大インダクタ(μH) 判定できた最小インダクタ(μH) 備考
80,000 1,000 47 コンデンサの表記は0.1μFだが測定すると0.08μF
3,300 680 47  
1,000 47 1.1  
680 10 1.1  
470 5 0.3 目的のインダクタが確認可能レベル
330 - - ミスがあり測定不能で終了

(注)最大インダクタは必要ないので確認していない物もある

新しいシンクロスコープ(H052)も並行使用して確認(10Mhz位までは正確のようだ)

IMG_20211119_183222.jpg

なんとか目的のインダクタで発振して計算できたのだが,300~400nHで手巻きしたコイルのが600~800nHだったので正確なのかどうか判断できない

・・・

と,思っていたところへ安価(約2k)だが0.001μHまで計測可能なLCメーターが届いた

IMG_20211119_195758.jpg

が,マニュアルもなく使い方が全く不明なので本日は止め

(追加)

しばらく良く使いそうなので基板に載せた

IMG_20211128_141342.jpg

回路図は以下だがC2,C3,C4はもう少し減らした方がよかったようだ

Trは(2SC1815でも問題ないが)トランジション周波数の高い2SC1923が手持ちにあったので使用

発振回路_回路図.png

LPC用のコイルをクラップ発振回路で調整しようとしたが失敗

NOAA用アンテナ(137MHz)とBCL用アンテナ(HF),地デジ(UHF)とBS用アンテナ(SHF)を混合して宅内に引き込んだので少しでもノイズ除去のため専用の分波器を作りたいのと,SDRのHF受信用クリスタルコンバーターを作るためにフィルター(LPF,HPF)が必要となるが,そのフィルターのパーツであるコイル(ソレノイド・コイル)が市販品にはない(探せばあるのか?)ので手作りとなる

そこで手作りのためのサイトを参考に作ってみた

IMG_20211116_182521.jpg

毎回,必要インダクタンスで巻き数を計算するのも面倒なのでスプレッドシート化

SC_20211112_03.png

手巻きだけど,それなりのインダクタンスになるらしいが,やっぱり正しいのか確認したいので手持ちのLCテスターで計測してみた

IMG_20211116_190504.jpg

が・・・このテスターの最小単位が1μHなんで,今回作りたい最大コイル400nHも測れない

どうしたもんか・・・安い計測器ないかも探してみたがnHまで計測できる機器だと高価なのしかない(秋月に7Kで良いのがあるけど)

ここは安価に済ませたいので探してみると「クラップ発振回路」を使って計測ってのがあって簡単な部品でできるので採用(クラップ発振なのは安定度が高いからである)

計測したいのは50nH~500nHなので,このインダクタンスで発振して計測できるようコンデンサを調整

SC_20211112_01.png

実際に動作させてみるが発振しない・・・何故?

IMG_20211116_191812.jpg

LTspiceで確認してみるとちゃんと発振しているので回路の問題はないと思われる(以下は0.1μFだが3300pFでも発振している)

SC_20211112_02.png

尚,クラップ発振回路の出力はエミッタでも可能だが(トランジスタの場合)波形の歪みが大きくなる

試しに手持ちの市販コイルを使って確認すると発振した(以下は1mH)

IMG_20211116_191737.jpg

その他,47μH,100μH,220μH,470μH,680μHで発振を確認

このオシロでは(帯域200kHzなんで)周波数は正確にカウントできないため,この前ケース化した周波数カウンタで確認したところ(そこそこ)計算上のインダクタと一致したのでインダクタ計算に使えそうだと思う

SC_20211112_04.png

しかし(設計)nHあたりでは発振していないようなので更に調整もしくは回路変更が必要

5V昇圧DCDCを評価の続きの続き

ダイソー モバイルバッテリーのリップルが多かったのを出力側へコンデンサ追加で改善できるはずなので試してみた

バッテリーの充電等なら問題にならないが,マイコンの電源では基準電圧等の影響もあるため簡単に解消できるなら試しておこうと思うし,折角簡単に手に入る5V昇圧DCDCを見捨てるのも勿体ないためである(中華DCDCよりコンパクトというのも理由の1つ)

先ずは不要なパーツを外し付けられていたパーツを付け直してみた

IMG_20180224_182950283.jpgIMG_20180224_183003718.jpg

早速オシロで計測したが結果は変わらず

IMG_20180318_172223590.jpgIMG_20180318_171335073.jpg

そこで出力側に1μFを付けてみたがほとんど変化なし

IMG_20180318_171600036_BURST000_COVER.jpgIMG_20180318_171609473.jpg

10μFにしたところ少しは改善

IMG_20180318_171633550.jpgIMG_20180318_171651692.jpg

22μFにアップして効果あり

IMG_20180318_171758250.jpgIMG_20180318_171815650.jpg

もう少しなんとかなるか細かい波を小で押さえるため22μF+1μFにしてみるが変わらず

IMG_20180318_171940031.jpgIMG_20180318_171950983.jpg

22μF+0.1μFで少しの変化はあったが影響するほどではない

IMG_20180318_172132404.jpgIMG_20180318_172153934.jpg

出力に22μFを付ける位で良さそうで,もう少し頑張るなら22μF+0.1μFとする

大抵はマイコン側の電源ラインの違いところで0.1μFを付けているので22μFだけで十分と思われる

ページ移動

  • ページ
  • 1
  • 2
  • 3
  • 4
  • 5

ユーティリティ

検索

エントリー検索フォーム
キーワード

過去ログ

Feed