OTTO Robotのその後

だいぶ前に、OTTOというロボットを作って遊んでたことは書いたと思う。

 https://www.hackster.io/otto/otto-build-your-own-robot-in-two-hours-5f2a1c

あれからもこそこそ3Dプリンタで一部改善されたボディを出力しつつ、パーツ集めていじってた。

 

今度はLEDのマトリクスを含んだバージョンを作成しようとしてるところ。

 https://github.com/OttoDIY/PLUS

ここのMatrix codesを使用。

最初にOTTO_FULL_MOUTH_HI.inoをコンパイルしたところ、

 OTTO_FULL_MOUTH_HI:188: error: 'otto' was not declared in this scope
  Otto.putAnimationMouth(otto,i);

というエラーが。

結局、

 exit status 1
 'otto' was not declared in this scope

で止まってしまった。

ざっと検索したところ、どうやらライブラリが読み込めてないエラー。

試しに別のOTTO_todo_MINE_MOUTH.inoをコンパイルしたところ、これは通った。

何が違う??と思ったけど、Otto.putAnimationMouth(otto,i);の行が引っかかってるぐらい。

ここはもう少し突っ込んで調べないと、原因がわからなさそう。しばらく保留にしておく。

 

最終的に、コンパイルしてLEDもまともに動いたスケッチはZOWI_BASE_v2_MATRIX.inoというやつ。

内容的には同じような感じ。ロボットの配線もそのまま使えるので、これで組み立てかけている。

しかし動作確認しながら組み立ててたところ、どうやら電源が弱いと動かないことが判明。

LEDが増えただけで電力不足になった。安物の9V電池だとすぐLEDのみの表示になってしまう。

そもそも公式の組立図見てると、長持ちしそうな単三電池4本使ってるしなあ。

ただ、格安のサーボモータの動きもなんか怪しいのも確か。同じスケッチ使っても、動きに個性がありすぎ。

 

安物のパーツをかき集めて作ると結構大変、ということはよく解った。いつものことだが。

そのうちまともに動くロボットができたら、またTwitterに載せて自慢するかも。

Sponsered Link

Arduinoのコンパイルエラー(Serial.h)

よくわかってる人なら周知の話なんだろうけど、自分は初めて知ったので一応メモしておく。

(また別のスケッチをコンパイルしたら忘れそうだ)

以前もTime.hで引っかかったのと同じような感じ。

 

前回のTEA5767モジュールをまだいじってるんだけど、拾ってきたスケッチを片っ端からコンパイルしていたら出てきたエラー。

 fatal error: Serial.h: No such file or directory

 #include <Serial.h> 

 ^

 compilation terminated. 

こんな感じのやつ。

よくライブラリが足りない時に出て来るエラー。でも前のとはちょっと違う。

 

じゃあSerial.hを拾ってきてインクルードすればいいのか、と思って探しかけたけど、前の経験からしてそういう問題ではなさそう。

それより、Serial.hって普通は標準で付いてくるライブラリじゃなかったっけ?

…と、疑問に思ったので検索してみたところ、いつものArduinoのフォーラムで同じことを聞いていたのを見つけた。

 https://forum.arduino.cc/index.php?topic=486176.0

単純に、「#include <Serial.h>」は削除しちゃっていいらしい。

理由もちゃんと書いてあって、HardwareSerial.hの中ですでに定義されているため不要とのこと。

さらにHardwareSerial.hはArduino.hに含まれていると。

まあとにかくわざわざ宣言する必要はないよということらしい。なるほど。

実際、コメントアウトではなく削除してコンパイルしたところ、エラーは出なくなった。

 

スケッチの履歴を見ると2,3年前ぐらいで、前のエラーが出たやつと同じ時期に作成された感じ。そんなに古いスケッチじゃないと思うけど、そうでもないのか。

Arduino IDEをバージョンアップさせるたびこんなことやってるんで、こまめにチェック、というほどでなくてもたまには起動して勉強しないとなあ。

で、肝心のTEA5767はまだうまく動かない。先にこっちだな。

Sponsered Link

TEA5767とArduino

ここんとこAliExpressからパーツが次々届くので、せっせといじり中。

ただ、届くのに一ヶ月とか時間がかかるせいで、何がしたくて買ったのか覚えてないものも多々ある。

 

たぶんD1 miniとかでラジオを作ってみようと思って買ったのは、TEA5767というICのモジュール。

封筒に基板とアンテナが別々に入ってやってきた。

アンテナ付きでも3ドル程度。とってもお手軽。

 

簡単にArduinoで動作チェックをしようと思ったが、ボリュームやLCD付けたりと凝った接続とスケッチが多い。

単純にこのモジュールとArduinoだけの接続のものを画像検索で探して見つけた。

 http://www.ardumotive.com/how-to-use-the-tea5767-fm-radio-module-en.html

スケッチと、必要なライブラリは上記のページ内にリンクがあるのでそこからダウンロード。

自分の環境ではTEA5767.hのライブラリだけなかったので読み込み。

 

最初、接続は格安Arduino UNOもどきで実験してみた。

これで合ってるはずなのに、どうしてもシリアルモニタに何も表示されない。

スケッチはそのまんまだし、配線も4本だけで単純すぎて、チェックしようがない。

試しに別のArduinoを接続してみたところ、反応があった。

Arduino Nanoだけど、接続する端子は当然同じ。

Arduinoの方が壊れてたか。そういえば前にも動作しなかったことがあったっけ。

壊れたやつはもったいないので、いずれ修理することにする。

 

とにかく上記の状態で、シリアルモニタを見てみると

 Current freq: 96.00MHz Signal: MONO 10/15

とか、現在の周波数が表示されてるはず。

シリアルモニタから+かーを入れて送信すると、周波数が変化するんで動作が確認できる。

 

これならラジオ聴けるかな?と思ってスピーカーとアンテナと繋げて周波数は最寄りのFM局にしてみたんだけど、ノイズだけでどうも受信できてないみたいだ。

一応動くということだけで、ちゃんと使えるようにするにはもうちょい考えないとダメか。

Sponsered Link

Arduino用2.4inchTFT LCDシールド(2枚目その後)

なんかだいぶ前にいじってたLCDシールドの件、再び。

結局、自作のBMPファイルを表示できずに挫折したやつです。

 

ちょっとしたフォトフレームを作りたくなったので、お手軽にArduino UNOに接続できるLCDを引っ張り出してきた。

新しいもの買うより、こういうシールドやモジュール使った方が楽なので。

でも一旦挫折したLCD相手では、正直無理かなと思ってた。

が、以前から参考にさせていただいているホームページの記事で、ふと見つけた記載にショックを受けた。

 http://nopnop2002.webcrow.jp/Arduino-Hard/ArduinoTFTShield.html

0xC505という数字にピンときた。

自分は当時、FT1505Cと判断しちゃったけど、これってR61505シリーズなのか?

 

試しに、自分の環境でも確認用のスケッチを走らせることにした。

 https://github.com/prenticedavid/MCUFRIEND_kbv/tree/master/examples/LCD_ID_readreg

LCDを乗せたArduino UNOを接続し、上記を実行。すると…

 

Read Registers on MCUFRIEND UNO shield
controllers either read as single 16-bit
e.g. the ID is at readReg(0)
or as a sequence of 8-bit values
in special locations (first is dummy)
 
reg(0x0000) C5 05    ID: ILI9320, ILI9325, ILI9335, ...
reg(0x0004) 00 00 00 00    Manufacturer ID
reg(0x0009) 00 01 00 01 00    Status Register
reg(0x000A) 00 00    Get Power Mode
reg(0x000C) 00 00    Get Pixel Format
reg(0x0061) 00 00    RDID1 HX8347-G
reg(0x0062) 00 01    RDID2 HX8347-G
reg(0x0063) 00 00    RDID3 HX8347-G
reg(0x0064) 00 00    RDID1 HX8347-A
reg(0x0065) 00 00    RDID2 HX8347-A
reg(0x0066) 00 00    RDID3 HX8347-A
reg(0x0067) 00 00    RDID Himax HX8347-A
reg(0x0070) 00 00    Panel Himax HX8347-A
reg(0x00A1) 00 00 00 00 00    RD_DDB SSD1963
reg(0x00B0) 00 00    RGB Interface Signal Control
reg(0x00B4) 00 00    Inversion Control
reg(0x00B6) 00 00 00 00 00    Display Control
reg(0x00B7) 00 00    Entry Mode Set
reg(0x00BF) 00 00 00 00 00 00    ILI9481, HX8357-B
reg(0x00C0) 00 00 00 00 00 00 00 00 00    Panel Control
reg(0x00C8) 00 00 00 00 00 00 00 00 00 00 00 00 00    GAMMA
reg(0x00CC) 00 00    Panel Control
reg(0x00D0) 00 00 00    Power Control
reg(0x00D2) 00 00 00 00 00    NVM Read
reg(0x00D3) 00 00 00 00    ILI9341, ILI9488
reg(0x00D4) 00 00 00 00    Novatek ID
reg(0x00DA) 00 00    RDID1
reg(0x00DB) 00 00    RDID2
reg(0x00DC) 00 00    RDID3
reg(0x00E0) 16 06 16 06 16 06 16 06 16 06 16 06 16 06 16 06    GAMMA-P
reg(0x00E1) 07 88 07 88 07 88 07 88 07 88 07 88 07 88 07 88    GAMMA-N
reg(0x00EF) 00 02 00 02 00 02    ILI9327
reg(0x00F2) 00 71 00 71 00 71 00 71 00 71 00 71    Adjust Control 2
reg(0x00F6) 00 52 00 52    Interface Control

 

と出力された。赤字の部分から、やっぱりR61505Wだと判明。

2年越しに正体がわかった瞬間でした。やれやれ。

 

しかし書き込みができるライブラリやスケッチが見つからない。

ILI9325用のライブラリが使えるらしいんだけど、うまく動かなかった。コンパイルでエラーは出ないんだけど、画像が出ない。

探し回ったというほどでも無いけど、R61505Wで検索したら見つかった。

 https://github.com/prenticedavid/MCUFRIEND_kbv

上記をダウンロードして、ライブラリを読み込んだ後にshowBMP_kbv_Uno.inoを開いてコンパイル。

無事完了したので、320x240の自作ビットマップ(Photoshopでセーブ時に24bit、詳細モードで16bitのX1R5G5B5を選択)にしてSDカードに保存、LCDに挿しておく。

 

これで書き込みしたところ、あっさり表示されるようになってしまった。

嬉しいけど、あの努力はなんだったんだという、いつもの感じ。

画質は良く無いです、でもこの画像、昔のガラケーから取り出したやつなんで元々こんなもん。

4枚ほど画像を入れて見たけど、多少ドットがおかしくなったりちょっと安定しない。

この手のLCD、もうちょい買ってみようかな。多分また苦労するんだろうけど。

Sponsered Link

UbuntuにArduino IDE(1.8.5)インストール

以前は古いUbuntuにArduino IDE 1.8.0をインストールしたけど、今度は環境がちょびっと変わったのでまたメモしておく。

やってることは基本同じなんで、手順は変わらないはず。

ただ、今回環境をUbuntu 16.04にしたところ、なんか以前と勝手が変わってしまってビビった。

まず最初にUbuntuを立ち上げてホームのフォルダを見たら、

 $ ls
examples.desktop  テンプレート  ドキュメント  ピクチャ      公開
ダウンロード      デスクトップ  ビデオ        ミュージック

となってたんで驚いた。

フォルダ名が日本語って、元々そうだったっけ?というだけなんだけど。

 

まあそれは置いといて、とにかく

 https://www.arduino.cc/en/Main/Software

から、Linux 64bitをダウンロード。

ダウンロードフォルダの arduino-1.8.5-linux64.tar.xzはアイコン上で解凍して、arduino-1.8.5フォルダを取り出しておいた。

/otpに移動させるんだけど、このとき

 $ sudo su

で念の為rootにしていた。これがまずかった、と、後で気づいた。

 

この後、

 # sudo mv arduino-1.8.5 /opt

 # cd /opt/arduino-1.8.5

 # ./install.sh

とやってみたら、

Adding desktop shortcut, menu item and file associations for Arduino IDE...touch: '/root/.local/share/applications/mimeapps.list' に touch できません: そのようなファイルやディレクトリはありません
/usr/bin/xdg-mime: 807: /usr/bin/xdg-mime: cannot create /root/.local/share/applications/mimeapps.list.new: Directory nonexistent
touch: '/root/.config/mimeapps.list' に touch できません: そのようなファイルやディレクトリはありません
/usr/bin/xdg-mime: 807: /usr/bin/xdg-mime: cannot create /root/.config/mimeapps.list.new: Directory nonexistent
 done!

と、エラー出まくり。

なにこれ、と思ったら、単にrootでインストールしちゃいけなかったというだけの話だった。

(一応いろいろ調べて回ってしまった)

 

なので、正解はrootにならずsudoもフォルダを作成するとき以外は付けずに、

 $ sudo mv arduino-1.8.5 /opt

 $ cd /opt/arduino-1.8.5

 $ ./install.sh

と、やるだけだった。また余計な遠回りしてしまった。

あとはインストール時にショートカットどうする?的なことを聞かれるけど、まあyにしておけば問題ないです。

Adding desktop shortcut, menu item and file associations for Arduino IDE...mv: replace '/home/ユーザー名/.local/share/applications/mimeapps.list', overriding mode 0644 (rw-r--r--)? y
mv: replace '/home/ユーザー名/.config/mimeapps.list', overriding mode 0644 (rw-r--r--)? y
 done!

もしinstall.shに実行権限が無いようなら、

 $ sudo chmod +x install.sh

としてからインストール。自分は今回やっておきました。

 

余談だけど、Arduino IDE 1.8.2ではinstall.shの内容に間違いがあってインストール前に編集する必要があったけど、このバージョンでは問題ありません。

自分がやったみたいなよけいなヘマしなければ、問題なくインストールできます。

 

あとは安物Arduinoを使ってる人には必須、CH340のUSBドライバのインストール。

自分は適当に検索して、出てきたところからダウンロードしてきた。

 http://www.wch.cn/download/CH341SER_LINUX_ZIP.html

大抵の記事で上記にリンクがあるんで、まあ大丈夫ではないかと思う。

ファイルを解凍しておき、CH341SER_LINUXフォルダ内に移動してコンパイルする。

 $ cd CH341SER_LINUX

 $ sudo make

ちょっとワーニングが出てたけど、そのまま完了。ロードもできた。

 $ sudo make load
modprobe usbserial
insmod ch34x.ko

この後、Arduino IDEを起動してD1 miniを接続したら認識したのでたぶん大丈夫かな…と思いきや。

Arduinoを起動して、D1 miniを接続してスケッチを書き込もうとしたところ、

error: cannot access /dev/ttyUSB0

というエラーが。

エラーメッセージで調べてみると、同じようなことで困ってる人が結構いた。

どうやらUSBのドライバの権限を書き換えればアクセスできるようになるらしい。

 $ sudo chmod 666 /dev/ttyUSB0

これで書き込みできた。

さすがにこれは落とし穴だったなあと思うけど、原因がよくわからない。

今のところはこれで動いてるから、このまま使ってみる。

 

メモ書きをまとめるとさくさく環境を構築してるように見えるけど、裏ではなんだかんだでコケてることが多い。

躓くことも勉強になると思ってるんでいいんだけど、時間の無駄とも言えるな。気を付けないと。

Sponsered Link