せとブログ

学んだことを忘れない

とにかく小さいArduino

小さいArduinoが使いたい

Arduinoってホント便利ですね。昔はコンパイラがまともじゃなくてアセンブリじゃないとやりたいことができない時代(PIC16F84とかH8とか…)がありましたけど、何の障壁もなく普通にCライクな言語で使えちゃう。

でもArduino Unoってサイズがでかすぎるんですよね。で、Arduinoで探してできるだけ小さいやつというと、Arduino Pro Miniかなと。

www.switch-science.com

なんというか部品サイズはどんどん小さくなるんですがやっぱり個人で使うには2.54mmピッチじゃないとダメっていうのが、そうだよね、無理だよね、ってちょっと安心します。

で、結論から言って何も考えず使えました。Writerも下記を使って、何も考えずそのまんま接続すれば(情報ありがとうございます!)終わり。あ、ただ5Vモードで使わないとダメ。

www.switch-science.com

もっと小型化したい

さらなる小型化とコストを考えるとホントはAVRのマイコンからスクラッチで作りたいことだけどそれをやるには時間がない。ホント便利になったなぁ。

 

一応データシートは下記。

http://www.atmel.com/images/atmel-8271-8-bit-avr-microcontroller-atmega48a-48pa-88a-88pa-168a-168pa-328-328p_datasheet_complete.pdf

 

あと乗ってるATMGAは電流の制限があって、なんかその辺りも確認が必要でした。なんで確認したか忘れたけど…LEDをDriveするには十分な電流を流せる(Source側ですね)みたいでした。

Arduino Playground - ArduinoPinCurrentLimitations

MacBook ProでKernel Panic

MacBook Proでパニック

家に帰ったら友人からLINEでヘルプを求めるメッセージが。どうもMacBook Pro (2012だったかな)が変なメッセージが出て起動しないとのこと。いろいろ聞くとKernel Panicが起こってるっぽかった。

とにかくパニック

何やったの?と聞くと、OSをアップデートしろといわれたからアップデートしたらこうなった…とのこと。Yosemiteにするときにどうもダメになったらしい。表示されているメッセージは下記の通り。

panic (cpu 0 caller 0xffffff802ae59241): "Unable to find driver for this platform: \"ACPI\".\n"@/SourceCache/nxu/xnu-2050.20.9/iokit/Kernel/IOPlatformExpert.cpp:1548

メッセージから見ると、キャッシュに対するDriverがない感じ。

どうしたか

いろいろ調べてみると、OSアップデート時にいろんな人が食らっている現象らしい。マジか。そんなん許されるん?

上の記事によると何も考えずCommand+ROS XユーティリティでOSを再インストールすれば回避できるみたい。念のためHDDを取り出して他のMacでバックアップを取ってから再インストール。そして何事もなかったかのように復活…。データロスもありませんでした。ちゃんちゃん。

nRF24L01+を使ってArduinoで無線通信

とにかく安く無線通信したい

たかだか1バイト程度のデータを送信するのにBLEとかもったいなぁーでも赤外線でリモコンめいたもの作るのもめんどくさいなーなんかないかなー。と探していたら見つけたのがnRF24L01+でした。nRF24L01、でP/Nに+がないやつの情報が多いですが基本的には変わりません。

どこで買った?

Amazonです。昔と違ってなんでもネットで買えるってほんと便利。昔ならこの手の部品って買いに行ったら一日それで終わりだったのに。

使い方

このあたりを参考にしてArduinoと接続して使います。SPI以外はAssignを変えれば使えるのでどこでも問題ないです。ブレッドボードで接続するとうまくいかないという噂があるので最初から適当にハンダ付けしてやりましたが、Capacitorはなくても通信できるようでした。

ここまでできた

 1対nの通信はできないとかいう話もありますが、できます。というかBroadcastになりますが。Masterは1台のみでしか試していませんが、Slave側でReadingPipeを開く時のAddressを同じにしておけば、複数のSlaveでMasterからのデータを取ることができます。

ハマった所

考えてみたら当然なのですが、MasterとSlaveのアドレスは変えないと当然通信できません。いろんなブログでそのままスケッチの例を使えばできる、ということが書かれていましたがそんなことはない!MasterとSlaveでAddressを入れ替えないと通信できません。Masterは書き込み、SlaveはそのアドレスをListenするということです。

radio.begin();
if(IS_MASTER) {
  // Master
  radio.openWritingPipe(addresses[0]);
  radio.openReadingPipe(1, addresses[1]);
} else {
  // Slave
  radio.openWritingPipe(addresses[1]);
  radio.openReadingPipe(1, addresses[0]);

参考にさせていただいたサイト

nRF24L01無線モジュール

ブレッドボードではうまく使えないとあったので変換用のボードを作りました。

Optimized High Speed NRF24L01+ Driver Class Documenation: RF24 Class Reference

RF24のクラスリファレンス。

nRF24L01+ 無線実験 | 興味本位の Trial 安堵 Error

電源まわりは結構鬼門なんだろうなぁ。

nRF24L01モジュールで無線通信 | なんでも独り言

MirfというModuleを使ってらっしゃいますが、今回は使いませんでした。あと、1対nもできました。nRF24L01+だとできるのかな?未調査。

arduino-info - Nrf24L01-2.4GHz-HowTo

Capacityこそすべてという勢いで書かれています。

https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf

nRF24L01+のデータシート。