まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

メモ 赤外線受信

 Seeed StudioのGrove - Infrared Receiverの動作確認をした。動かしただけなのでメモ。

Grove - Infrared Receiver (Seeed Wiki)
ライブラリのソースはこちら。
https://github.com/Seeed-Studio/IRSendRev

サンプルのrevTestで動作確認。受光器に向けてリモコンのボタンを押すと数値がでる。

2015Ir


 以上はArduino Unoで確認したが、Arduino Leonardoではライブラリをコンパイルする時にエラーとなった。

 別のソースを試してみる。

赤外線通信の実験パート2(赤外線リモコンを送信機にして何か動かす)(きむ茶工房ガレージハウス)

こちらはスケッチのみなのでArduino Uno/Arduino Leonardoともに動いた。ただしたまに数値の受信が抜けることがあった。



ロータリーエンコーダ実験

 半年くらいまえにちょっとやってうまくいかず放置していたロータリーエンコーダの実験、うまくできたので整理。

環境:MacOSX 10.10 / Arduino IDE 1.0.6 / Seeeduino Lite(Arduino Leonardo互換)

ロータリーエンコーダはA相とB相の状態を見て回転方向を調べる。C端子はGND、AとBは10KΩでプルアップすることになっているが、ピンのプルアップ設定でよい。

2014rot1

コードは以下を参考に少し変えた。A相の変化で割り込みを使ってBの変化を読み方向を決める方式。
Leonardo系はpin2の割り込み番号がUNO系の0と違って1なので注意。

ロータリーエンコーダーを使ってみる(忘れないページ)
arduinoでロータリーエンコーダを使う (創ったり投げたり。)

https://gist.github.com/houmei/6524d5254652c7460a6e

私の環境では大量のテキストを連続してArduino IDEのシリアルモニタに送るとArduino IDEが応答なしになってしまう現象があった。なので、適当にdelay()を入れ、数値も変化した場合のみ送ることにした。
元のソースでは回転方向を'R'、'L'でいったん記録し、続くif文で++または--している。'R'を+1、'L'を-1にして続きでそのまま加算してやれば簡単になると思って改変したら'R'方向(ClockWise)の動きが渋くなってしまった。なんでプラス方向だけスッポ抜けることがあるのか不明だが調査保留とした。

追記:
Arduino IDE1.0.6の最新ファームを純正Arduino Leonardoに書き込んで実験→再現。Arduino UNOでも再現。

 さて以前やったときなぜうまくいかなかったか。ひとつはロータリーエンコーダの理解不足でカチカチと動かした時にA相B相の状態が固定になると思っていた。しかしクリックできる所で止まるとA,BともCとの接続はOFFになる。
 もうひとつはロータリーエンコーダによる端子配列の違い。

 これは上からC,B,Aの順。秋月電子のキットから流用したもの。
2014rot2

 これは上からB,C,Aの順。どこで買ったか忘れた。最近見かけるLED内蔵の透明な軸のタイプもこれ。
2014rot3

 これを間違って配線すると、片方向にしか回らないという現象が発生する。


秋月の超小型USBシリアル変換モジュールとMacOSXでのはまり所

 秋月電子の超小型USBシリアル変換モジュールAE-FT234Xとstrawberry-linuxの7セグメント汎用ディスプレイを接続してみた。

超小型USBシリアル変換モジュール(秋月電子)
汎用ディスプレイモジュール(strawberry-linux)

 5V/GND/Tx/Rxだけと割りきった仕様で超小型。
2014AEFT234X1

こんなかんじ

 CB0パッドは設定変更が可能。
2014AEFT234X02

 パイロットランプの青色はやめよう。まぶしい。
2014AEFT234X04


 7セグ8桁の汎用モジュールとつなぐのは簡単。電流も100mA以内で問題ない。
2014AEFT234X


 FTDIのドライバは以下からダウンロードできる。
Virtual COM Port Drivers

・Windows7(64bit) OK
・MacOSX 10.9 (2.2.18-x86 64bit) OK

 MacOSX 10.10(Yosemite)でデバイスは認識するがシリアルポートが見えないという問題があった。

 以下を参考にした。
Yosemite(Mavericks)でFTDIが動かない件

 私の環境ではすでにAppleのFTDIドライバは殺してある。それでも動作しなかったのはYosemiteからドライバの認証が変わっているかららしい。念のためシステム環境設定の「セキュリティとプライバシー」を確認してみると、”ダウンロードしたアプリケーションの実行許可”のチェックボックスが以前設定した”すべてのアプリケーションを許可”が戻っている。30日以上経ったので戻したよとのメッセージが出た。
 ということであらためて設定しなおしてから再度ドライバをインストールし、以下を実行した。

cd /System/Library/Extensions
sudo chmod -R 755 FTDIUSBSerialDriver.kext
sudo kextload FTDIUSBSerialDriver.kext

 これでYosemiteでも動作した。

 ついでだが私はMacOSX上ではSerialToolsを使っているがAppStoreに対応したらしいので更新した。
SerialTools(Mac App Store)

メモ:arduino MsTimer2の上位FlexiTimer2

 arduinoでタイマ割り込みが必要な時はMsTimer2を使ってきたが、32U4を使っているArduino Leonardo系ではコンパイルできない。が、探したらあった。FlexiTimer2というのを使う。

http://playground.arduino.cc/Main/FlexiTimer2


 Teensyというのが書いてあるが、Teensy2.0は32U4を使ったボード。ということでやってみたら動いた。MsTimer2での書き方がFlexiTimer2でもそのまま使えた。

メモなんで詳細略。すまん。

aitendoのArduino互換機「びんぼうでいいの」とMacOSXでのハマりどころ(CH341Tドライバ)

2016/11/19追記:macOS Sierra用
Run Makeblock hardware (and Arduino-compatible Boards with CH340/CH341) on Mac OS Sierra
CH34x USB-UART macOS 10.12 Sierra対応ドライバ

追記:署名入りCH340ドライバがあるようだ。
Signed Mac OS Driver for Winchiphead CH340 serial bridge

 aitendoで500円のArduino互換基板「びんぼうでいいの」を買ってみた。ソケットやATmega328などの部品を余らせている人向け。
びんぼうでいいの [U3](aitendo)

 表面実装の部品はあらかじめ取り付けてある。USBのBコネクタ、28ピンICソケット、リセット用のタクトスイッチ、DCジャックをハンダ付けしArduinoのファームを書き込んだATmega328をソケットに差し込めばOK。
2014binbo1


2014binbo2

KEY_L、KEY_Hというタクトスイッチのパターンが謎だがテスタで追ったら以下のように2Pの端子に出ているだけの模様。
2014binboudeino

 基板の角はバリがあるのでやすりで削っておこう。
ATmega328の書き込みは省略して動いているArduino UNO R3から外して取り付け動作確認した。ドライバはCH341T用のものと同じ。
http://www.wch.cn/downloads.php?name=serch&page=1&keyword=ch341ser
 
Windows7(64bit)+Arduino IDE1.0.5で確認した。マイコンボードは"Arduino UNO"を選択する。

さて、ここからが問題。MacOSX用のドライバはあるのだが認識しない。ドライバはインストールできるのだが/dev/以下に現れないのでArduino IDEからも認識しようがない。USBデバイスとしては認識しているようなのだが……(MacOSX 10.9とMacOSX 10.10で確認)
CH340Tdevice


 調べたらドライバの署名がおかしくてロードされていないということらしい。

Topic: [Solved] Clone arduino Mega 2560 - no serial port DCcduino Mega 2560

対処としては
sudo nvram boot-args="kext-dev-mode=1"
としてから再起動すると署名がおかしいドライバもロードするようになり「びんぼうでいいの」も認識するようになった。ただしこれはあくまでも例外的な対処なのでドライバが更新されたらアップデートすべき。


http://www.cindori.org/enabling-trim-on-os-x-yosemite/ 

http://stackoverflow.com/questions/24986390/kext-with-invalid-signature-can-load-on-one-machine-but-not-the-other-why 

Arduino Leonardo/Micro互換のPololu A-Star 32U4 Micro

 A-Star 32U4 Microは超小型のArduino Leonardo/Micro互換マイコン。
A-Star 32U4 Micro
(スイッチサイエンス)

A-Star 32U4 Micro(Pololu)

 Arduino Microより小さい。ピンアサインはこちら。
A-Star 32U4 Micro PinAssign

 ピンの一部を出さないことでサイズを小さくしている。Digital13はLEDのみで、Analog2-5はない。32U4だと一部のDigitai端子にアナログ入力が割り当てられるので、使いたければこちらを使用するという考え。
2014pololu

これまでの選択肢としてはこういうのがあった:
Arduino Micro
Pro Micro 5V/16MHz
ダヴィンチ(ストロベリーリナックス)
32U4ブレークアウト
(スイッチサイエンス)

A-Star Programmable Controllersの仲間にはArduino Microと同じサイズのものがあり、動作電圧のバリエーションがある。

以下はA-STAR 32U4 MicroのUSB情報。

Pololu A-Star 32U4:
  製品 ID:0x2300
  製造元 ID:0x1ffb
  バージョン: 1.00
  速度:最高 12 Mb/秒
  製造元:Pololu Corporation
  場所 ID:0xfd120000 / 4
  利用可能な電流(mA):500
  必要な電流(mA):500
 


Galileo / Galileo Gen2のGPIO速度測定

 Galileo Gen2はGPIOがI2CのI/Oエクスパンダ経由からダイレクト制御に変わったということで動作速度が改善されてある。実際、キャラクタLCDはちゃんと表示された。簡単なスケッチを書いて動作速度を確認した。

 以下のスケッチでピン0〜13について0/1を繰り返し動作速度を求める。
https://gist.github.com/houmei/7a9a04c019c31098497a

Galileo 1.0.2 10000ループ
0 44534ms 4453.4us 224.5Hz
1 44684ms 4468.4us 223.8Hz
2 44514ms 4451.5us 224.6Hz
3 44947ms 4494.7us 222.5Hz
4 44785ms 4478.5us 223.3Hz
5 45071ms 4507.1us 221.9Hz
6 44928ms 4492.8us 222.6Hz
7 45096ms 4509.6us 221.7Hz
8 45207ms 4520.7us 221.2Hz
9 45225ms 4522.5us 221.1Hz
10 45298ms 4529.8us 220.8Hz
11 45265ms 4526.5us 220.9Hz
12 45097ms 4509.7us 221.7Hz
13 45188ms 4518.8us 221.3Hz

Galileo Gen2 1.0.2 100000ループ
0 222ms 2.22us 450.5KHz
1 222ms 2.22us 450.5KHz
2 222ms 2.22us 450.5KHz
3 222ms 2.22us 450.5KHz
4 257ms 2.57us 389.1KHz
5 257ms 2.57us 389.1KHz
6 257ms 2.57us 389.1KHz
7 56093ms 560.93us 1.783KHz
8 56027ms 560.27us 1.785KHz
9 257ms 2.57us 389.1KHz
10 222ms 2.22us 450.5KHz
11 257ms 2.57us 389.1KHz
12 222ms 2.22us 450.5KHz
13 257ms 2.57us 389.1KHz

Galileo Gen2はGalileoにくらべて充分高速。ピン7,8だけ極端に遅いのはここだけI/Oエキスパンダ経由になっているからと思われる。他のピンは450KHzと390KHzに分かれているがこれはなんだろう?

Galileo2届いた

 Galileo2届いた。スイッチサイエンスから購入。Galileoの時と同じくパソコンショップでも購入できるようだ。
Intel Galileo Gen 2開発ボード(スイッチサイエンス)

 GalileoとGalileo2の比較レビュー。
Arduino互換IoT向け開発ボードIntel Galileo Gen 2ってどこが変わった?(ひとりぶろぐ)

 さて、以下のドキュメントを読んで準備。
Intel Galileo Gen 2 Development Board Documents

 こちらからGalileo/Galileo2用のArduino IDE 1.5.3をダウンロード。
Software Downloads - Drivers

 MacOSXではアプリケーション以下のサブフォルダに入れたり長いファイル名では動かないことがあった。Arduino→ArduinoG513に改名して置く。
[ツール]→[マイコンボード]→[Intel Galileo 2]を選択。シリアルポートはGalileoと同じでケーブルを接続しただけではすぐには現れない。一分ほど待って選択。
[ヘルプ]→[Firmware update]で確認。現在、最新は1.0.2なのでそのまま。
 サンプルスケッチの01.Basics→BlinkでLチカ確認。USBホストコネクタ近くの緑色LEDが点滅する。

 さてGPIOの速度が気になる所だがLCDを使って確認することにした。Galileoでは表示はできるが更新が遅くとても使えない感じだった。

 LCDでFizzBuzzをやってみる。問題なく動作した。Galileoではinit.lcd(...)を追加しないと動作しないというワークアラウンドがあったが、GPIO直結のせいか必要がなくなった。
https://gist.github.com/houmei/a009ea0622b92779db7b

2014galileo2



Intel Galileo Gen 2 Disti Kit Arduino互換のインテル製開発ボード
Intel Galileo Gen 2 Disti Kit Arduino互換のインテル製開発ボード
Intel
売り上げランキング : 36854


Amazonで詳しく見る
by G-Tools
LCDシールドキット(青)
LCDシールドキット(青)
スイッチサイエンス
売り上げランキング : 80600


Amazonで詳しく見る
by G-Tools

 

Arduinoで任意のUSBコードを送る 解決編

 Arduino Leonardo/MicroはUSBキーボードとして使えるが、Usageコードが101より大きいものは無視されるという問題があった。
PS/2キーボード変換器の製作(18) USBキーボードの無視されるキーについて
対策箇所はわかっていたが、当時はバイナリにパッチするという手段しか思いつかず強引にやっていた。
PS/2キーボード変換器の製作(19) HEXファイルにパッチを当てる
 この後、Arduino IDEのフォルダ内にあるソースをいじると反映されることを知った。Arduino IDEは毎回ソースから全部ビルドしてたのか!コアな部分はコンパイル済と勝手に思っていた。
Turning an Arduino Leonardo into a joystick.(Imarginary Industries)
 この記事ではUSBAPI.h、HID.cppを修正することによりジョイスティックのUSB-HIDを追加している。ということはArduino IDEにあるHID.cppのHID Report Descripterを修正することで日本語キーボードの機種で¥マークなどを入力できるようになるはずだ。
MacOSXだと修正対象のソースはContents/Resources/Java/hardware/arduino/cores/arduino/以下にある。
https://gist.github.com/houmei/2ad9f7a713f46149e72f

HID.cppを差し替え、ライブラリを組み込む。このライブラリはHID.cpp/USBAPI.hと一体化もできると思うが以前作ったのをそのまま流用しているのでこうなっている。

2014shot1
 これはDavinciにArduino Microのファームウェアを書き込んだもの。pin4にスイッチを付けてフリスクの大きめのケースに入れてみた。たったこれだけ。日本語キーボードがついてるものがWindowsXPの古いノートPCしかなかったのでそれに接続して¥マークが入力できることを確認した。

https://gist.github.com/houmei/0ac6873618caa02f22b4

 USBキーボードのUsageコードについては以下からどうぞ。注意点としてUSキーボードのレイアウトが基準。
USB HID to PS/2 Scan Code Translation Table

 ああ、これで数年悩んでた問題が解決だ。変なバイナリパッチ作った時点で誰も突っ込んでくれないのね。


 ついでにPrint ScreenのUsageコード(0x46)を設定して最近話題のエビデンス画面スクリーンショット用ボタンにしてみた。これでハードコピー取り放題よ。
2014shot2

 

I2C接続のジョイパッド

 MICROCHIPのI/OエキスパンダMCP23008を使って簡単なジョイパッドをC基板で作ってみた。
MCP23008は8本のGPIOをI2C経由で制御できる。上位のMCP23017は16本制御できるが、ジョイパッドに必要なスイッチは上左下右ABなのでMCP23008を選択した。
 C基板のちょうど収まりのよい位置にタクトスイッチを配置してメッキ線でぜんぶ配線。上の方にI2C端子を出す。Groveの並び(SCL/SDA/Vcc/GND)に合わせる。
2014joypad1

     回路図はあとで整理するけどもほぼ見たまんま。

MCP23008
1 SCL Groveコネクタ1 SCLへ 3.3KΩプルアップ
2 SDA Groveコネクタ2 SDAへ 3.3KΩプルアップ
3 A2 Vdd
4 A1 Vdd
5 A0 Vdd
6 *RESET 10KΩプルアップ
7 NC
8 *INT NC
9 Vss
10 GP0 ジョイパッドUp
11 GP1 ジョイパッドLeft
12 GP2 ジョイパッド Down
13 GP3 ジョイパッド Right
14 GP4 ジョイパッド Trigger A
15 GP5 ジョイパッド Trigger B
16 GP6 NC
17 GP7 NC
18 Vdd

Groveコネクタ3 Vdd
Groveコネクタ4 Vss 

 マイコンボードはArduino Leonardoと互換のSeeeduino Liteを使用した。これはボード上にGrove端子(I2C,Serial)が付いていてそのまま接続できる。今回Seeeduino Lite用のドライバや定義ファイル(board.txt)は使わずにArduino Leonardoとして使っている。 

2014joypad2

   さて、I2Cの制御はどうしようかなと探していたらMCP23008用のライブラリがあった。これをArduino IDEにインストールしておく。
https://github.com/adafruit/Adafruit-MCP23008-library 

 動作テスト用のスケッチはこちら。
https://gist.github.com/houmei/4c5c3db0579f5b12a71e

 押したスイッチに対応してU L D R A B の記号が表示される。これでハードの動作確認ができた。

続きの予定:
・回路図描く
・コネクタを追加し、ATARI(MSX)仕様のジョイスティックをつないでみる。





 
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ