気の向くままに辿るIT/ICT/IoT
webzoit.net
IoT・電子工作

Arduinoあれこれ

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
Arduinoって?

Arduinoあれこれ

Arduinoあれこれ

2017/07/10

 電子工作・IoTを始めてみようと思い立ってから約4ヶ月、Arduinoの各種互換機や激安電子パーツ類を使って実際に取り組んでいるわけだが、結構いろいろな状況に遭遇したし、今後も遭遇しそう、しかも原因が究明されていない模様のものもありそうなのでノウハウ・how to、トラブルシューティングにつながればよいなという意味も込めて止めどなく、つらつらと書き留めるページ。

 各ページに追記の形で既に書いてあるものを整理したい思いもあり、追記日があれば、その日付であとからここに転載・追記することもあるかもしれないし、そこそこまとまれば、それらやここに書いたものを個別ページとして起こすこともあるかも。

 また、既に判明していたことでも各ページに書き留めていないものもあるので、そういったものは、今日の日付で書いておく関係もあって内容如何に関わらず、順不同。

Arduino IDE 1.8.7

2018/09/24

 気づけば、Arduino IDE 1.8.7がリリースされていたのでダウンロード、展開(インストールはしないで使う)。

 前述のArduino IDE 1.8.6で必要となったユーザーのグループ追加及びマシン再起動(もしくは、arduino-linux-setup.shの実行)は必要だが、他は特に何もする必要はない。

 つまり、1.8.7では、1.8.5以前と同様、展開のみで使う場合も1.8.6のようにportableディレクトリを作成する必要はなくなり、環境設定の問題も解消されている。

 その中でplugdevグループを作ってユーザーを追加する必要もあったのだが、Debian Stretch amd64(debian-amd64 4.9.0-8-amd64)では、plugdevグループはもともと存在した。

 というのも64bitマシンでDebian含む32bit OSを使っていたのだが、Juliusを使ってみたくなり、Debian Stretch amd64をマルチブートさせる恰好でインストール、Arduino IDEもLinux 64bit版を新たにダウンロード・展開したことでわかった。

 ちなみにグループ追加しなくても展開しただけでArduino IDEの起動自体は可能だが、/dev/USB*(USBデバイス)に対して許可がなく使用できないため、スケッチを書き込めなかったりする。

 さて、以前のは音が小さく認識できなかったんだろうと思い、改めて音源を作成、Arduinoボードに書き込み、Arduinoが発話した内容をJuliusで認識できるか改めて確認...しようとしたところ...。

 再起動したら、Juliusが使えなくなった...正確には、/dev/dsp*がなくなった、もっと言えば、sudo modprobe -c | lessで確認してみるとカーネルモジュールsnd-pcm-ossがblacklist化されていた...sudo modprobe snd-pcm-ossで復活はできるにはできるが...、Arduino IDE用にユーザーをグループ追加した関係で干渉したのか?はたまた、実行したか覚えていないが、apt update/apt upgradeによる何らかの影響か、それともDebianの気まぐれか...、いずれにしても不要だと判断されただけならまだしも、干渉したとなると復活させるにしても後々不安が残る...。

 ここで追加したグループからユーザーを削除、保存して再起動してみたが、blacklist状態は変わらず...、一度なったら自動では戻らないものなのか...。

 /etc/modprobe.d/osspd.confをホームディレクトリ内に移動(mv)、退避して再起動後、whitelist化され、/dev/dsp*も表示されたことを確認後、更に改めてArduino IDE用にユーザーを各種グループに追加し、マシンを再起動したところ、何もせずとも/dev/dsp*は表示されるようにはなったが、原因は絞りきれず、不明のまま...。

 改めてArduinoボードの声を認識するか確認、あれ、まだ声が小さいのか、誤認識...さて、どうしたものか...。

2018/10/01

 なんて流れで勢い余ってRaspberry Pi/ESP8266/Julius/Open JTalkでスマートスピーカーを作ってみたらできた

Arduino IDE仕様変更?

2018/08/26

 かくしてArduino IDE 1.8.6もユーザー権限で起動できるようにはなったのだが、安心したのも束の間、念の為、サラッと確認してみるとサンプルスケッチ、ライブラリのインクルードにおけるライブラリ、ボード、[ESP8266 Sketch Data Upload]など1.8.5までに標準に後で追加してあったものが、ことごとくメニューから消えていることが判明...。

 Arduino Software Release Notesを確認するも因果関係のありそうなものはなく、原因不明...。

 ちなみに以前、ここでも書いたNanoにATmega328P (Old Bootloader)メニューができた件、1.8.6で仕様変更になったかのように書いてあるが、1.8.5で既に変わってたって...。

 ということは、IDEの参照パスが変更になったってことだよね?、ついては、インストールせずに使う場合に[portable]フォルダを要するのも関係あるってことだよね?

 実際、以前のバージョンと比較して自身で変更していた為、異なったスケッチブックの場所をArduino IDE 1.8.6で[ファイル] => [環境設定]においてデフォルトが[sketchbook]である[スケッチブックの場所:]で変更したところ、起動できなくなり、元に戻したら起動できたし。

 尚、起動できた状態でこれを変更したところ改めて起動できなくなったことから、直接ファイルを編集すべく、find、grepでArduino IDE 1.8.6ディレクトリ以下を検索した結果、[portable/preferences.txt]がヒット、当該ファイル内を検索、[sketchbook.path=]の右辺を[sketchbook]としたところ、起動するようになった。

 つまり、展開したArduino IDE 1.8.6ディレクトリに[portable]ディレクトリを作成するとIDEの初回起動時に必要なディレクトリやファイルが配置され、その中に[sketchbook]ディレクトリもあり、ここが、デフォルトの[スケッチブックの場所:]となっているということになる。

 が、これを然るべき方法で変更すると起動しなくなるっていうのは、バグだわな...。

 あ、[ファイル] => [環境設定]を改めて比較してみたら、以前のバージョンでは、[~/.arduino15/preferences.txt]、1.8.6では、[arduino-1.8.6]以下の[portable/preferences.txt]が環境設定用ファイルパスとなっていた。

 ちなみに以前のバージョンの[~/.arduino15/]以下にも、[arduino-1.8.6/portable/]と同様のファイル類があるため、(本来はportableである気がするが、)[sketchbook]ではなく、[/home/xxx/.arduino15]を1.8.6の[スケッチブックの場所:]にしても起動はするが、ライブラリやボードが標準のみしかないのに変わりはないため、害はあっても、良いことは全くないだろう。

 で、1.8.6から再出発する、つまり、とりあえず、デフォルトを変更することなく、過去バージョンで、これまで追加してきたものを改めて追加しなおせば、よいわけだが、それもめんどい...、もしかしたら複数バージョン使わず、install.shすればよいのかも?しれないが、それは論外だから、継続調査中...。

 ライブラリについては、少なくとも自身の環境における1.8.3/1.8.5では、~/Arduino/libraries、~/sketchbook/libraries、~/.arduino15/libraries、~/.sketchbook/librariesが参照されていた(はず)だが、1.8.6では、これらは一切参照されていない...。

 それらの内、必要なlibrariesフォルダから[arduino-1.8.6/portable/sketchbook/libraries]にコピーすれば、妥当なものは、[スケッチ] =>> [ライブラリのインクルード]に追加されるはず...というわけでやってみたら追加されたのでコピペの必要はあるが、これで解決と言って良いだろう。

 ボードについては、そんなにたくさんあるわけではないだろうし、改めて追加するしかなさ気。

 自身は、今思いつく限り、ESP8266とESP32を追加しておきたいところで、以前、前者は、Arduino IDEの[ファイル] => [環境設定]の[追加のボードマネージャのURL:]から、後者は、git cloneした。

 今回は、ESP8266/ESP32が共に認識されていないことから既存のディレクトリは、そのままでも問題ないと判断し、どちらもArduino IDEの[ファイル] => [環境設定]の[追加のボードマネージャのURL:]から追加することにする。

 というのも既存のディレクトリには、既にESP8266/ESP32用に作成したスケッチが多々あるので後でコピペしようという目論見。

http://arduino.esp8266.com/versions/2.4.2/package_esp8266com_index.json
https://dl.espressif.com/dl/package_esp32_index.json

 というわけで、これら2つのURLをカンマ区切りで指定(ESP8266の方は、httpである点に注意)、Arduino IDEの[ツール] => [ボード]の[ボードマネージャ...]から選択、更新・インストールという手順を踏んだ。

 ESP32の方は、以前追加したディレクトリをそのままにしておくと[...xtensa-esp32-elf]が既に存在する旨、表示されたりするが、警告であって別にインストールに支障はない模様(一度、削除、再インストールしてみたが、今度は警告は出なかった)。

 これでESP8266/ESP32何れかのボードを選ぶとスケッチ例にも対象標準スケッチが表示されるようになることは確認済み。

 念の為、ESP32の方は、以前追加した内の[...xtensa-esp32-elf]ディレクトリのみ削除(ゴミ箱送りに)しても、削除せず、そのままにしておいてもArduino IDE 1.8.6からサンプルスケッチGetChipIDやStartCounterをアップロードでき、DevKit V1互換ボードで機能することも確認済み。

 というか、DevKit V1互換ボードで試してみてよかった...DevKit V1互換ボードは、Arduino IDEの場合、スケッチ書き込み時にボード上のBOOTボタンを押さないとエラーとなっていたのだが、1.8.6で改善されたようでBOOTボタンを押さなくてもスケッチを書き込むことができることが偶然にも判明。

Arduino IDE 1.8.6が起動しない...?と思ったら

2018/08/26

 Arduino IDEも1.8.6がリリースされていたことを知ったので、早速ダウンロード、展開。

 だが、実行ファイルarduinoをダブルクリックしても起動しない...。

 ちなみに自身の現時点でのメインOSは、Debian(Linux)、パソコンは64bitだが、OSは32bitを使っている為、Arduino IDEもLinux 32bit版。

 展開ディレクトリを確認、他のバージョンと比較してみると[arduino-linux-setup.sh]なる新たなファイルがある。

 展開のみで複数バージョンを併用してきたため(と言っても滅多に古いバージョン使うことないけど)、install.shも実行したことはなく、arduino-linux-setup.shを実行したら古いバージョンが使えなくなるなんてことはないよね?

 ということで...中身を確認してみるといろいろ設定している中にグループ作成やユーザーのグループへの追加がなされている箇所がある。

 [arduino-linux-setup.sh抜粋]

 ...
sudo usermod -a -G tty $1
sudo usermod -a -G dialout $1
sudo usermod -a -G uucp $1
sudo groupadd plugdev
sudo usermod -a -G plugdev $1
 ...

 端末からidコマンドを実行した結果と比べると自身の場合、1.8.6では、新たにtty、uucpグループにユーザーを追加する必要があるようだ。

 ttyはUSBを扱うにあたって以前から追加してあったと思い込んでいたが、そうではなかったらしい。

 一方、uucpってなんぞや?と思ったら...

 「Unix to Unix CoPy 」の略で, UNIX マシン間でデータ転送を行うためのコマンド群の総称」

 「初期のインターネットの通信手段として広く使われていた」

 などとある...、まぁ、いっか。

 実行後は、再起動が必要なようだ。

 とりあえず、問題なさげなので[arduino-linux-setup.sh]を実行、再起動してみよう。

 実行してみると、そらそうだ、引数にユーザー名がいるとのこと

 arduino-linux-setup.sh $USER

 更にそらそーだ、グループへの追加などを伴うため、sudoすべく、パスワードを求められた。

 するとパッケージのインストール画面も含まれ、結果、インストールされるものはなかったものの、[modemmanager]なるものが、削除されたとある...。

 関係ないかもしれないが、調べてみると、何やら関係ありそうにも見える。

 https://packages.debian.org/ja/sid/modemmanagerによれば、

 ModemManager はモバイルブロードバンド (2G/3G/4G) デバイスおよび接続を制御する DBus 駆動のデーモンです。内蔵デバイスや USB ドングル、Bluetooth ペアリング 済みの電話やプロ仕様の外部電源付き RS232/USB デバイスに対しても、 ModemManager はモデムの準備や設定、接続の構成ができます。

とある。

 一方、これがあると、他のアプリが起動できないこともあるという情報も。

 Arduinoも通信の関係で?これにあたるのかもしれないが、真偽の程は定かではない...と思ったら、[arduino-linux-setup.sh]内にこれを削除する行を発見。

 というわけで再起動...してみるが、arduinoをダブルクリックしてみても、やはり、途中で消えて起動しない...。

 端末でディレクトリを移動し、./arduinoとしてみるとJavaが何やらエラーを吐いている...。

 そこで「arduino 1.8.6 起動しない」をキーにぐぐるとバージョンは異なるものの、Arduino 1.8.2が起動しないがヒット、これによれば、「管理者として実行」するか、実行ファイルarduinoのあるディレクトリに[portable]フォルダを作成するという2つの方法があるとのこと。

 確かにsudo ./arduinoなら起動するが、いちいちsudoするのは馬鹿馬鹿しい、なんでグループに追加したのかわからなくなるし、スケッチの編集含め、ユーザー権限では何もできなくなるのは不便極まりない。

 そこで「portable」フォルダを作成する方法にしてみたが、それでも管理者権限が必要...というのは解せなかったため、ユーザーで実行してみると...起動できた。

 ファイルマネージャ上でダブルクリックしても起動できた。

 portableディレクトリありきの仕様だったのか...。

 それにしても1.8.3や1.8.5では、「portable」フォルダを作らなくても(もちろん、今現在もなく)起動できているのだが、1.8.2や1.8.6で挙動が異なるのは謎だが...先祖返りしてしまったのか...?仕様変更が二転三転しているのか...?

 まぁ、とりあえず、めでたし、めでたし。

Processing 3.4

2018/08/26

 気づけば、Processing 3.4がリリースされていたのでダウンロード、展開。

 久々に実行してみたProcessing、バグフィックスの影響か、Processing 3.3.7では、実行できていたスケッチが修正しないと実行できないというケースにたまたま遭遇する奇跡。

2018/10/02

 Processing 3.4では、デフォルトでは、日本語フォントが表示されず、かと言って[設定]メニュー選択後の[環境設定]ポップアップ上でも[日本語]となっている一方で[Source Code Pro]のままグレー反転し、入力を受け付けず、フォント変更ができなくなっているが、下段にあるpreference.txtを編集すれば、日本語フォントを表示できるようになる。

 具体的には、[editor.font.family=Source Code Pro]を[editor.font.family=Monospaced]に変更して起動済みならProcessingを再起動。

 というか、[フォントの作成]でIPAPGothicやIPAPMinchoを追加、当初、[editor.font.family=MS Gothic]に修正してみて日本語表示できたことを確認していたのだが、これを書くにあたり、改めて確認してみると勝手に[editor.font.family=Monospaced]に変更されていた...。

Arduino IDEでスケッチ開き過ぎたら[終了]メニューは...?

2018/07/26

 Arduino IDEでスケッチを開き過ぎても[ファイル] => [終了]で全部いっぺんに閉じることができる...が、再度IDEを起動した時、同じ数だけスケッチが開いてしまう...。

 もしかして...とやってみたものの、Arduino小休止、ESP32を使いだして気づくという滑稽さもさることながら、この挙動は使えるのか使えないのか...。

Linuxでも使えるProcessing 3+gstreamer1.0用Videoライブラリ

2018/03/28

 Processingについては、あれこれ書くほどではないと思われるため、ここに書いておく。

 ここ1ヶ月ほどArduino+Processing(Processing 3)ネタのデモを実行させて頂いたり、スケッチを書いてみていたのだが、ここ数日、自身が使わせて頂いているOS Debian Stretch環境においてProcessingのVideoライブラリで映像キャプチャや動画再生ができず、ハマって調べた末、テスト版である模様も2017/11/24リリースのgohai氏のライブラリのおかげで解決した。

 尚、Processing標準videoライブラリをインストールした場合は、削除しておくか、ディレクトリ名を改名してからパスの通ったsketchbook/librariesなどに展開。

 結果的には、Processing videoライブラリが、gstreamer0.10に依存しており、最新のgstreamer1.xに対応していなかったことに起因していたようでgohai氏がgstreamer1.x対応のProcessing video用ライブラリを公開して下さったため、自身のLinux環境でも使用可能となり、外付けUSB Webカメラを認識、その映像をキャプチャできた。

 また、VideoライブラリやVideoライブラリに依存する一部のOpenCVライブラリのサンプルスケッチなども機能し、確認することができた。

(PC内蔵カメラはなく、接続したUSBカメラは1つだけだったが、Capture.list()の出力にあたり、要素を与えて1つだけなら、println()でもよいものの、配列要素全ては?と、ふと気になったのだが、printArray()なる関数があり、これが使えることを、この時、知った。)

 gohai氏のご尽力については、Processingフォーラムだったかで昨日、知ったのだが、そのライブラリが機能する形でリリースされていたというのは今日、知るに至った。

 具体的には、以下のようなエラーが表示され、ProcessingでWebカメラ(USBカメラ/Web Cam...)からの映像キャプチャや動画ファイルの再生ができない事象が発生(これが今回解決したことになる)。

32ビットOSの場合
  • UnsatisfiedLinkError: Error looking up function 'gst_date_get_type' : /usr/lib/i386-linux-gnu/libgstreamer- 1.0 .so. 0.800 . 0 : undefined symbol: gst_date_get_type. A library relies on native code that's not available. Or only works properly when the sketch is run as a 64 -bit application.
64ビットOSの場合
  • UnsatisfiedLinkError: Error looking up function 'gst_date_get_type' : /usr/lib/x86_64-linux-gnu/libgstreamer- 1.0 .so. 0.800 . 0 : undefined symbol: gst_date_get_type. A library relies on native code that's not available. Or only works properly when the sketch is run as a 32 -bit application.

 NetBSDでは、ユーザーにとっての早道としてGStreamerのバージョンの混在はさせざるを得なかったし(とは言え、干渉するわけでもなく、難しいことではなかった...はず)、そうでないにしても、今回、[libgstreamer- 1.0 .so]とあるので、検索した過去の状況(昔はできていたらしいこと)からして、この時点でGStreamerのバージョンを0.10にすれば解決しそうなことは予想に難しくないが、できるにしても今更感もあり、Linuxでまでそれをやるのは、何より面倒...なので途中、OpenCVになびきかけつつ、他の解決策を求めて先のvideoライブラリにたどり着いた次第。

 ちなみに遡ることProcessing 1.0では、当初、ビデオキャプチャには、Apple QuickTime(、Windowsでは、これに加え、VDIGソフトウェア)を必要としており、Mac OSやWindowsでは使えたが、Linuxでは実質、使えなかったっぽい?、Processing 2.0あたりから?gstreamer0.10に移行したものの、その後のGStreamerのアップデート(1.0など)には未対応となっていた模様。

 それでも今も昔もLinuxでは、gstreamer{0.10,1.0}-{base,bad,good,dev}やこれらplugins、また、H.264やlibavなどを必要とする可能性があり、環境を整える必要はある模様。

 自身の環境(Debian Stretch)では、Processingのvideoキャプチャ、動画再生が機能するようになったわけだが、完全な環境は把握できておらず、先のvideoライブラリだけでよいのか、追加パッケージもあってのことなのかは判然としない...。

 今回、試行錯誤する中でインストールしていったことや万一、端末を複数開いてインストール作業を別個にバラバラやっていたとしたら履歴も残らず、正確とは言えないわけだが、現存の端末履歴を見る限り、このVideoライブラリに出会う前に適当に見繕ったものを含む次のものをインストールしていた。

$ history | grep "apt install"
1923 sudo apt install libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-base1.0-dev
1946 sudo apt install gstreamer1.0-plugins-ugly gstreamer1.0-tools
1947 sudo apt install gstreamer1.0-alsa
1948 sudo apt install gstreamer1.0-nice gstreamer1.0-packagekit
1974 sudo apt install x264 libx264-148
1976 sudo apt install gstreamer1.0-plugins-good
1985 sudo apt install gstreamer1.0-libav

手持ちのATmega328P搭載ボードが古物扱いになった!?

2018/02/25

 突然、Arduino Nano互換機にスケッチをアップロードするとエラーになり、なんだろ?と思っていたら...。

 な、なんとArduino IDEのボードライブラリを更新したからだろうが、[ツール] => [プロセッサ]メニューを見ると同じAtmega328PにOld Bootloaderなる選択肢が追加(新たな[ATmega328P]が追加、以前のATmega328Pは、[Atmega328P (Old Bootloader)]に改名)されており、手持ちのArduino Nano互換機は、軒並みOldになった模様(Oldを選択しないとスケッチをアップロードできなくなっている)。

 書き込み装置も増えてるみたい?

 で、ブートローダ、何が変わったんだろ?

プルアップ抵抗・プルダウン抵抗は必須

2017/08/17

 これまでプルアップ抵抗、プルダウン抵抗という言葉は知っていたし、これをいれないとINPUTのLOW、HIGHが不定になるため、思いもよらない、期待しない動作、つまり、誤動作の原因になることがあるというところまでは、なんとなく理解していたが、どっちがどっちだか、よくわかんないし、まぁいいかと思っていた。

 しかし、試作をいくつか作った中で、これまで順調だったように思えた鳥よけ装置がある日突然、人感センサーや光センサーに関係なく動作してしまう現象に遭遇。

 (プルアップ、プルダウンについては、見てみぬふりをして、)人感センサーや光センサーの調子が優れないのかななんてなんの根拠もなく、交換してみたら、(たまたま)正常に機能したので、よしよし(プルダウン、プルアップから逃げ切った...)と思っていたら、翌日あたり、また同症状に見舞われた。

 これってやっぱり、プルダウン、プルアップは避けて通れないのか...と思い、よくよく調べてみると奥はそこそこ深いのかもしれないが、億劫がっていたのがバカみたいと思えるほど、やること自体は超簡単なプルダウン(入力電圧=入力ピンとGNDの間に数kΩ〜数十kΩとのことなので適当に)10kΩの抵抗を入れてみたら、あっさり改善した。

 プルダウン抵抗とは入力とGNDの間に抵抗を入れ、スイッチONで入力信号がHIGHとなる回路、プルアップ抵抗とは電源電圧と入力の間に抵抗を入れ、スイッチONで入力信号がLOWとなる回路であり、外部回路を組む場合、前者は素直で簡単だが、後者はArduinoボードを使う場合、遠回り感があり、後述の通り、内蔵されているというのも頷ける気がする。(解釈あってるよね?)

 というわけで入力信号を受けて何かやろうと思ったら、それぞれの入力に対してプルダウン抵抗かプルアップ抵抗の何れかはなくてはならない必須のものだと実感するに至った。

 Arduinoの場合、INPUTがデフォルトであり、INPUT用のpinMode設定は敢えてする必要はない(省略可能である)が、プルダウン抵抗の場合は先のように、プルアップ抵抗については、Arduinoボードに内蔵されており、これを機能させるためには、スケッチに入力信号用のピンを指定してpinMode(inputPin, INPUT_PULLUP);とするだけでよく、その分、外部回路を省略できるとのこと。

Pro Miniってスケッチアップ時リセット要らない?

2017/08/07

 試作・実装品に激安Pro Miniを使うことが多いのだが、FTDIモジュール使う場合、スケッチのアップロード時、もしかしてリセットって要らない?

 尤も、まだ電子工作自体始めて数カ月の自身のことだから、それは気のせいで、もしかするとArduino誕生から12年、いろんな変遷があった過去の一時点のある情報を正としている可能性もある?

 印象としてはリセットが要るときも要らないときもあったような気がするのだが...気のせいか。。。

2017/08/08

 FTDIモジュール使って手持ちのPro Miniいくつかでスケッチのアップをやってみたが、やっぱり、リセットボタンを押す必要はなかった。

電池の特徴・特性を知る

2017/07/22

 少し前から、なぜCR2302リチウムイオンボタン電池だとLEDは点灯するけど、DCモータが回らないんだろう・・・と、とてつもなく基本的なところが、なんとなく気になっていた。

 というのも、つい、うっかり1個(3V)用だと思って先日買ってみたCR2302 x 2(6V)のコイン電池ホルダ(電池ボックス)、2個6Vってなんか使いみちあるか?と思い、なぜか、ちょっと焦って、まず、試したのが、LEDとDCモータだった次第。

 「DCモータ cr2302」をキーにぐぐっても期待する情報がない、が、それもそのはず、恥ずかしながら、CR2032などのボタン電池は時計、電卓、ICタグなど微電流で済む小型機器・小電流使用機器向けであり、アルカリ電池・マンガン電池などはDCモータ駆動などの比較的大電流を要するシーンで利用されることを想定し、製造されているからという極めて基本的な電池の特徴・特性を見落としていた。。。

 で、CR2302(3V)2個で6Vの有効な使いみちって?と思って["cr2302x2"]をキーにぐぐると意外と相当数ヒットするから、必要となる電流量の差こそあれ、アルカリ電池1本〜数本使うのと同じ感覚ってことか。。。

Arduino Nanoとピンヘッダ

2017/07/18

 Nanoは、USBポート必須のシーンにおいては、FTDIモジュールを要するPro Miniよりスマートで便利だが、Pro Miniと違ってNanoは、ピンヘッダが半田付けされていないとブレッドボード上でも使えない。

 ブレッドボードにピンヘッダを挿してNanoを差し込み載せることも可能だが、接触が微妙になり、往々にしてうまくいかず、本来の検証に支障が出る可能性大。

fuse resetter/ヒューズリセッタ

2017/07/10

 Arduinoボードにスケッチやブートローダを書き込むことができない・できなくなった場合、fuse値が書き換わっている可能性もあるらしい。

 その際、任意のfuse値への書き換え、工場出荷時の状態への復帰などlock bit設定含め、行なうfuseリセッタなるものが存在する模様で、これをArduinoボードで代替することもできるらしい。

壊れたか?と思われたArduino UnoやPro Miniも一応復活することもある

2017/07/10

 UnoにもR3などのバージョン以外にボード上の実装が異なる種類があることを知ったわけだが、そんな折、WifiモジュールESP8266、買ったばかりでデフォルトのBlinkが機能することは確認済みの複数のPro Miniにおいて故障なのか原因は不明もスケッチを書き込むことができない事象に遭遇、調べた末、たどり着いたArduinoISPでUnoをISPとして試してみるとブートローダが書き込まれていなかったようでこれを書き込むことでPro Miniの一部は復活した。

 正常機能していたPro Miniが2つ、復活したPro Miniが2つ、内1つはLチカはするが、電源LEDがつかず、最初からだったのか、ある時点から書き込めなくなったのか、どうにも書込みできないPro Miniが1つあるので結果、2個の残るPro Mini 1個は、Programmer is not respondingとなるばかり。

 書き込みに成功したPro Miniは、簡単!ATmega328Pにブートローダを書きこむ(第2弾)の外部オシレータを使わない方法を実行させて頂いたのだが、そこには「既に外部オシレータ付きで書き込まれているものは、これを使う以外方法はないかも」といった旨の記述もあり、もしかしたら、残りの2つも外部オシレータとコンデンサを噛ませれば、復活する可能性はゼロではないのかも?

 その後、Nanoの方がシンプルにできそうなので作り替える予定もPro MiniをArduinoISPとする簡易回路を作り置きしておくことにし、2台ある他のスケッチを書き込んであったUnoもArduinoISPとしたPro MiniでBlinkスケッチを書き込んでみたら成功、次回検証用にとしまっておいた。

[2017/07/11]

 というわけでコンデンサは前回買った詰め合わせで間に合いそうなのでオシレータとNanoを追加で買ってみた

C106とGA7M
[2017/07/20]

 ブートローダもスケッチも書き込めないPro Mini、何が違うのか他のPro Miniと見比べてみると書込みとしては正常な4個のPro Miniの方は、2個あるコンデンサらしき[C106]が載っているが、唯一、書込みできないPro Miniには[GA7M]が載っているくらいだが、これらに互換性があるのかないのか、これに起因するのかなど判断できず、ぐぐってみると[C106]はそれらしい情報があるが、[GA7M]の方は、よくわからない。。。

 Pro Miniを対象とした外部オシレータ+コンデンサを使う方法については、よくわからず断念。

 と言っても実は、これが判明する前に電源ランプの点かないPro Miniとブートローダ、スケッチを書き込むことができないPro Miniの2個は、文字欠けしていたパネル取付用デジタル電圧電流計と共に既にHiLetgoに相談していて良品を発送してくれることになり、その後、電圧電流計だけが届き、再連絡すると入れ忘れていたとのことでPro Miniも再送してくれたとのことなので近いうちに届くことになっている。 => [2017/08/03] 2個届いた内、1個スケッチが書き込めず、再々送して頂くことになったが、こんなことは未だかつてないので極々、稀なことだろう。

 しかし、後日、さて、Unoにスケッチを書き込もうとArduino IDEを起動してスケッチをアップロードしようとしたら、[programmer is not responding]エラーになって書き込むことができなくなっていた。

 もしかして壊れた?故障なのか?でも、前回スケッチ書き込みできたところで終わっての今なのに壊れるってことある!?なんで?ということで改めてPro MiniのArduinoISPで試すも、やはり、Unoにスケッチを書き込むことができない。

debian:~$ arduino-1.8.2/hardware/tools/avr/bin/avrdude \
    -P /dev/ttyUSB0 \
    -b 19200 \
    -c stk500v1 \
    -p m328p \
    -C arduino-1.8.2/hardware/tools/avr/etc/avrdude.conf \
    -v \
    -e \
    -U efuse:w:0xFD:m \
    -U hfuse:w:0xDE:m \
    -U lfuse:w:0xFF:m

 結果、最終的にできたわけだが、まず、Atmega328Pが1つ載ったUnoでInstalling an Arduino Bootloaderの後段の通り、ICSPの6ピンに配線の上、端末から各種fuse値(lfuse/hfuse/efuse)を{ARDUINO}/hardware/arduino/avr/board.txtの当該Arduinoボード用の[*.low_fuses]、[*.high_fuses]、[*.extended_fuses]の値を確認の上、必要に応じて設定し、avrdudeコマンドを実行したところブートローダの書き込みに成功。

 ちなみに冒頭述べたPro Miniにブートローダを書き込んだ際は、fuseの設定はしなかったが、なぜか、できた。

debian:~$ arduino-1.8.2/hardware/tools/avr/bin/avrdude \
    -F \
    -P /dev/ttyUSB0 \
    -c stk500v1 \
    -p m328p \
    -C arduino-1.8.2/hardware/tools/avr/etc/avrdude.conf \
    -U flash:w:arduino-1.8.2/examples/01.Basics/Blink/Blink.ino
debian:~$

 スケッチもArduinoISPとしたPro Mini(などのArduinoボード)とスケッチを書き込みたいUnoを接続、端末からavrdudeコマンドを実行して書き込むか、Arduino IDEの[ツール] => [書込装置]を[Arduino as ISP]として[スケッチ] => [書込装置を使って書き込む]とすることで書き込むことができた。

  • 何れもavrdudeコマンドの各オプション詳細は要確認
  • 場合によっては、ブートローダの書込みの方もsignature checkをスルーする-Fフラグを追加する必要があるケースもあるかも。
  • パスを通していないため、avrdudeとavrdude.confはフルパス指定、パスが通っていれば、後者は指定不要かも。

 しかし、改めてUnoをPCにUSBケーブルで接続、Arduino IDEから[マイコンボードに書き込む]ボタンやメニューでスケッチを書き込んでみると応答がないとかでエラーになる。(もちろん、シリアルポートは適切なものに、書き込み装置もAVRISP mkIIなどに変更済み。)

 続いてAtmega16U2付きのUnoについては、How to Restore the Arduino UNO R3 ATmega16U2 Firmware Using the Arduino IDEによれば、まずは、Atmega16U2のブートローダ書き込みが必要か否かをLoop-Back Test Instructionsを参照して調べて良好ならその必要はないとのことで結果、(自身のDebian環境にはなかったのでインストールした)screenコマンドでシリアルポートにアクセスする方法(screen /dev/tty****)で調べてみるとAtmega16U2の方は、問題なさげだった。

 更に読み進めると、どうやらAtmega16U2が載っているものも、Atmega328Pのブートローダを続けて読み込む必要がある模様、つまり、Atmega328Pだけ積んだボードと同じく、Atmega328Pにもブートローダがあるようなので先と同様、Atmega328PのICSP6ピンに配線の上、ArduinoISPで書き込んだところブートローダの書き込みに成功、そのまま、スケッチを書き込んでみたところ、これまた成功、しかし、やはり、PCにUSBケーブルで接続、書き込み装置をAVRISP mkIIとしてArduino IDEから[マイコンボードに書き込む]ボタンやメニューからのスケッチのアップロードはできない。

 つまり、以後、どちらのUnoもArduino ISPからでないとスケッチを書き込むことができない状況となった。

 なんで?

 もしかして外部クロックモード、内蔵クロックモードが関係してる?

[2017/07/24]

 Pro MiniをArduinoISPとしてLチカしているUnoに改めてブートローダを書き込んでみたら、Arduino IDEからスケッチをアップロードできるようになった。。。オシレータ云々ではなく、原因はブートローダだった。(逆にどうやったらArduinoISPのみ機能するようになってしまうんだろう?というのも気になるが。)

[2017/07/28]

 あれ、再発。。。なんでだ?

 その後、ArduinoISPをPro MiniからNanoに変更はしたが、Arduino IDEからNanoによるArduinoISPを介してUnoへの書込みも、AVRISP mkⅡでスケッチをアップロードも確認済みだったのだが。。。もしかしてArduinoISPとするボードを替えるたびに対象ボードのブートローダを書き換えないとAVRISPとかで書き込みできなくなるとか???

 あ、まさにブートローダ書き直したら、また、Arduino IDEからAVRISP mkⅡを使ってスケッチをアップできるようになった。。。不思議。

 また、lsusb結果は事前確認していなかったため、なんとも言えないが、直接PCとUSBケーブルをつないだ際、Atmega16U2付きのUnoは、シリアルポートが/dev/ttyACM0、これが載ってない方は、FTDIモジュール挿した時と同様の/dev/ttyUSB0になっているのだが、もしかして、これって後者はUSBドライバの再インストールが必要?あ、いや、lsusbでみると載ってる方は[Arduino SA Uno R3 (CDC ACM)]、載ってない方は、[QinHeng Electronics HL-340 USB-Serial adapter]だから最初からこうだったのかも。

Arduinoの各ボードにも複数種類ある場合がある

2017/07/10

 Arduinoシリーズには、いろんなタイプがあり、それとは別にバージョンアップを重ねてきたらしきUnoにも数タイプあるようで現時点で自身は、何れもArduino Uno R3らしき、Atmega328PというICが1つのものとAtmega328P+Atmega16U2という2つのICを持ったUno互換機を2種類持っている。

 当初は、Unoに複数あることも知らなかったが、Arduino関連パーツを買っているAmazon/HiLetgoでも複数タイプを扱っていることに気づき、何が違うのか比べてみようくらいのつもりであとから2つICが載ったものを買ってみた次第。

 買って手元に届いた直後は、Atmega328Pの石の大きさの違い程度と思ったが、よく見れば、Atmega16U2と書かれた石も別途載っているし、Atmega328Pの石の大きさも違えば、小さい方ははんだ付けされているが、大きい方はICソケットに刺さっており、容易に外すことができるタイプだったりする。

 それ以外にも大きく違うらしく、それでも今ひとつピンとはこないが、Atmega8U2/16U2/32U2などがあり、16U2はUno用のものらしいこと、その石は、FTDIモジュールを使わずにシリアルUSB変換するためのブートローダ専用であることらしいことくらいはわかった。

 ちなみにAtmega328Pの前は、Atmega328というICチップ名だったらしいし、データシートを眺めると328PのあとにAUとかPUと付くものもあるらしい、何れにしても、これらは品名というべきなのか、実際には、Atmel Mega 328(Atmel社のMega328)というらしいし、これらはUnoやPro MiniなどのICであって他のボードでは異なる石が載っているらしい。

Arduinoで電池を使うならsleepが有効

2017/07/10

 電池でArduinoボードを動かすと、そのままでは、連続稼働で1日程度持てばよい方くらいだろう、だが、sleep機能、その他を使うと用途にもよるだろうが、数ヶ月、1〜2年持つようにすることもできるらしい。

Arduinoボードでピンヘッダの半田付けを要するもの

2017/07/10

 Arduinoボードには、Pro MiniやNanoのように実装時には、基本的にピンヘッダの半田付けを要するものがあるが、実験・検証時は、ブレッドボードに置いてジャンパワイヤのピンを挿したり、Pro MiniならFTDIモジュールに半田付けされたピンヘッダをすっと挿すだけということもあるだろう。

 そんな時、単に接触がよろしくないということに起因してスケッチやブートローダを書き込むことができないなど、まるでボードの不具合かと思うような事象に遭遇することがあるので指や手で抑えたり、更にFTDIモジュールに挿すだけの場合には、傾きを微妙に変えてみたりするなど、いろいろやってみる必要がある。

 Arduinoerたち(勝手に名付けた)の中には、そのようなブレッドボードの抱える負の一面をもって避ける人もいるようだ。

 つまり、全てがそうというわけではないが、うまく半田付けされてさえいれば、ピンヘッダが装着された状態の場合、そのような不具合は起きない可能性が多分にあるということ。

 それでも動作確認で半田付けしない状態で試したいという場合もあるだろうから、その際は、十二分に注意の上にも注意したいところ。

ArduinoISP

2017/07/10

 ArduinoISPとは、FTDIモジュールの機能をArduinoボードで代替可能なArduino IDE上のサンプルスケッチのこと。

 検索するとUnoやPro Mini 3.3V/8MHzで構成する情報はあるもPro Mini 5V/16MHzの情報はなさげだったので作ってみたが、Nanoの方がシンプルにできそうなので後日Nanoで作り直す予定(見る限り1件くらい?少ないながらもNanoによるArduinoISPの情報はあった)。

Arduino IDEでボードを追加する新旧2通りの方法

2017/07/10

 Arduino IDEには、複数のボードがデフォルトで登録済みだが、必要に応じて更に追加することができる。

 Arduino IDE 1.6.4だか1.6.5?以前までは、board.txtへの必要情報追記、以後は、[ファイル] => [環境設定]で表示されたポップアップ上の[追加のボードマネージャのURL:]に当該ボードで説明されているはずのパスにあるjsonファイルをフルパス指定、環境設定パネルを閉じ、[ツール] => [ボード] => [ボードマネージャ]で表示されるポップアップの中から当該ボードを選んでインストール、そのままか、IDEを再起動すれば[ボード]メニューに追加される。

Arduino Uno+イーサネットシールドにはバグがあるらしい

2017/05/22

 Arduino UnoとUno用のイーサネットシールドW5100などには、イーサネットシールド自体をリセットできないというバグがあるらしい。

 コンデンサを入れたり、W5100のRESETピンを曲げたりすることで対処できるようだが、後者を試した限り、対処可能なケースとそうでないケースに遭遇、その後の検証や前者の検証は、まだ、やってみていない。

 ちなみにICメーカーは複数あるのか、他のICもそこそこ熱くなるが、WIZnetのICは、他に比べ、更に熱めといった情報もある模様。

LinuxでArduino IDEを使う場合、dialoutグループにユーザーを追加

2017/03/03

 Arduino IDEをLinuxで使う場合、dialoutグループ(なければ作成)にユーザーを追加する必要がある。

 そうでないと/dev/tty*へのアクセスに管理者(root)権限が必要になり、ひいてはArduino IDEをrootで起動しなければならなくなる。

 尚、途中で/dev/tty*へのアクセスできなくなった場合、何らかの事情で当該ユーザーがdialoutグループに存在しないことも考えられるので要確認。(それが原因でなければ、とりあえず、root起動で使うしかなさ気。)

Arduino IDEは複数バージョン混在で使うことも一応可能

2017/03/03

 Arduino IDEには、Web版とダウンロード版がある。

 ダウンロード版は、インストールせずに展開するだけにしておけば複数のバージョンの共存が可能。

 ただし、インストールしないと、パスが通っていないため、そのままでは、端末からavrdudeを直接実行する場合などにavrdudeコマンド自体やarduino.confファイルなどをフルパス指定する必要がある。

Arduinoボードには数多くの種類がある

2017/03/03

 Arduinoボードには、あらゆる用途などに対応すべく、Uno、Leonard、Mega、Pro Mini、Mini、Lilypadなどの他、たくさんの種類がある。

 互換機に関しては、公式品と全く同一とは限らず、同じ名称のボードでも使用パーツや配置が(もしかすると回路も?)、異なったりするものもある。

Arduinoはフリーハードウェア

2017/03/03

 Arduinoはフリーソフトウェアならぬフリーハードウェアであり、設計図・回路図も公開されており、公式品と誤認されないよう「〜互換機」などと表記する必要はあるも一個人が互換機を作って販売することすら可能らしく、多くの激安互換ボードも市場に出回っており、「〜ino」といった名称のオリジナル派生ボードも販売されていることがある。

 「〜ino」といったメーカーオリジナル派生ボードはともかく、そのほとんどが中国製と思われる「〜互換機」などとして販売されているものの多くは、往々にして複数の製造者から仕入れた販売代理店によるものの模様、特に激安品については、仕様への準拠や何らかの安全回路の有無、使用パーツ、回路の安全性、はんだ付け状態、同じ商品として売られているものでも構成品や場合によっては仕様が同じとは限らないなど全てに渡って公式品と同等であるとは限らず、そうでないケースの方が多い可能性もあるので要注意。

 また、複数個セットになった電子パーツなどの中には、数の過不足があったり、1つ〜2つだけタイプが違うといったことも多分にあり得るので買うなら、ある程度の覚悟が必要。

 尚、輸入となる場合、相手国内の輸送、通関、自国内輸送など含め、届くまで1〜2週間程度は当たり前にかかると思っていた方がよい。

公式ArduinoボードにはArduinoとGenuinoがある

2017/03/03

 アメリカで設計、イタリアで製造しているらしきArduinoは、2005年に初めてリリースされ、今に至り、アメリカ国内ではGenuino、それ以外の国・地域ではArduinoと呼ぶらしい。

 IDEにもarduino.cc製とarduino.org製の2種類がある模様だが、ArduinoとGenuinoが存在することと関係するのか、前者がより多く普及していて情報が多いということなのか、少なくとも日本で使うなら前者を使うのが無難らしい。

関連リンク

ウェブ造ホーム前へ次へ