まごころせいじつ堂

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

Arduino

Grove LEDbarを使う

 GroveのLEDbarを使ってみた。10個のLEDがレベルメータのように並んでいるモジュール。

Grove - LED Bar

ライブラリは以下から。zipでまとめてダウンロードし、展開後できるフォルダ名の末尾-masterを削除し、Arduino IDEのライブラリフォルダにコピーする。

https://github.com/Seeed-Studio/Grove_LED_Bar


2014LEDbar1

 動作確認はArduino Leonardo、Crowduino(5V)で問題なし。
 仕様上3.3Vで動くようなことが書いてあったが、Crowduinoの3.3V設定では止まってしまった。
 おまけとしてIntel Galileoでもやってみたがまったく動かなかった。

Crowduinoはこれね。Crowduino With ATMega 328 V1.1

 なお、このLEDbarは0〜9の番号がそれぞれに振ってあるが、0が赤、1が橙、あとは緑になっている。オーディオのレベルメータとは直感的には反対なので注意。


GalileoにGrove SerialLCDを接続する

 Galileoになんか表示器を付けるのはGPIO経由は無理。ということで部品箱を探してSeeed StudioのGrove SerialLCDを見つけてきた。これなら動きそうな気がする。

Grove - Serial LCD
Grove - Serial LCD(Wiki)

ライブラリは以下:
https://github.com/kc0tfb/Grove_LCD_Arduino

こっちにもあるが、少し違う:
https://github.com/Seeed-Studio/Grove_SerialLCD

 問題が。このライブラリはSoftwareSerialにしか対応していない。GPIOを制御してシリアル通信を行うのはGalileoではダメそうだ。通常のHardwareSerialで使えるようにと色々書き換えていたが降参。しばらく間を置いて検索したらHardware Serial用のライブラリがあった。

https://github.com/ElvisTheKing/SerialLCD

 入出力をストリームで抽象化したものらしいのだが、なぜかSoftwareSerialではなくなりHardwareSerial(従来のSerialやSerial1)だけに対応している。これを使った。Galileo用のArduino IDEライブラリのフォルダに入れて再起動。Grove Base Shield経由でPin0/1にSerialLCDを接続し、exampleにあるスケッチを呼び出す。ここでSerialの記述をすべてSerial1に書き換える。

2014galiserialLCD

 ライブラリは無修正で動作した。

いくつかの問題点:
・Grove SerialLCDは扱いが少ない(が、プロトコルは単純なので作れそうではある)
・Galileoのシールド、Pin0/1によるシリアル通信はSerial1()だった。Arduino互換のピン配置はUNO R3やLeonardoでない古い方に合わせているみたいなんだけど。なぜ新しい方に合わせなかったんだろうか?
・RTCバックアップ用の端子に接続しているとシールドと干渉する

Galileo用シリアル変換の工作

 前回、Galileo用のシリアルポート用ケーブルを作ったけど特殊なのでもっと汎用性のあるものを、と考えArduinoの通信などに使うUSBシリアル変換アダプタをRS232Cのレベルに変換する工作をした。使い勝手を考えてFRISKケースに入れた。

 USBシリアル変換アダプタはこういうものです→FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
 レベル変換に使ったのは手持ちのADM3202。こちらのセットは必要なコンデンサやICソケットも一緒になっている→RS232CインターフェースIC(DIP)ADM3202AN(2個入)

 Galileoのシリアルポートは3.5mmのピンジャックで、先端がRxD、真ん中がTxD、根元がGND。なのでアダプタ側は先端がTxD、真ん中がRxD、根元がGNDになるようにしなければならない。

2014GalileoSerialschm

Intel Galileo回路図(PDF)

 こんな感じで作った。
GalileoSerial_2014-02-07 11_28_38
 ピンジャックには3.5mmステレオミニジャックDIP化キットを使っているがFRISKケースにぎりぎり収まらないのでハンダ付けした足をカットする必要がある。というか基板にハンダ付けするんじゃなかった。ユニバーサル基板は適当にカット。基板裏にハンダを盛るとやはりケースに収まらなくなるので、ICは浮かせてハンダ付けしてある。C5は電解コンデンサを使ってるが実際は0.1μFでもよい。
 RTSはオープン。CTSは一応GNDに落としている。

 USBシリアル変換アダプタは3.3Vでも5Vでも動作する。

 これでGalileoのブートメッセージを採取した。https://gist.github.com/houmei/8856634


 さてここからは失敗談。簡単な回路だと思いデータシートを見ながら適当に工作して接続したら、受信はできるが送信はできないという状態になった。Windows/TeraTerm接続とMacOSX/SerialTools接続で送信文字が見えたり化けたりする。エコーバックはおかしいがブートメッセージの表示はできるので送信のレベル変換がおかしいのでは?とおもいV+とV-を観測したらVccと同じレベルだった。見なおしてみるとチャージポンプ用のコンデンサ付けるのを忘れてた。ということで簡単な回路でもちゃんと自分で回路図描きましょう。
 

GalileoのGPIOは遅い

 GalileoのGPIOを更新する速度は最大230Hz程度ということなので実測してみた。

Intel® Galileo 開発ボード FAQ [日本語訳](Galileoぶろぐ) 
 これによるとGPIOはI2CのI/Oエキスパンダ経由で入出力され、I2Cの速度は100KHz。Quark SoC X1000は400KHzのモードも持っているが、I/Oエキスパンダ側の制限で100KHzと。
ピン出力をHIGH/LOW繰り返すスケッチを書いてオシロで観測した。
 2014galitoggle

 一目盛り0.5ms×4.6=4.5ms。約220Hz。
 
 比較のためArduino Leonardo(ATmega32U2)で同様の観測をしてみた。
2014leonardoHIGHLOW 
 2μs×6.2=12.4μs。約80.6KHz。

 これらはpin3で測定してみたが、他はどうだろうか。以下のスケッチで測定した。
pinXに対して10000回、HIGH-LOWを繰り返してシリアルポートに経過したマイクロ秒を表示。

https://gist.github.com/houmei/8769953 

これらの測定結果のうちで、HIGH-LOWを除いたもののループ時間を測定して引いてやるとHIGH-LOWだけ行った時間がわかる。

Galileo GPIO speed (ms)
4.448620513
4.447915384
4.452584615
4.54159021
4.536844755
4.539793846
4.535693846
4.535053846
4.531913846
4.539608391
4.531913846
4.528699301
4.582708391
4.76309021
4.452417482
4.464853846
4.458908391
4.458935664
4.455917482
4.457762937
0.794843846

2014galileogpio 
 このうちpin20は存在しないので外にアクセスしに行っていないと思われる。pin13だけ少し遅いが、ブロック図から考えるとLEDはQuark X1000に繋がっており、かつGPIOは外に存在している。両方制御しているので時間がかかるのではないだろうか。

 あと調べた所ではSCLがA5、SDAがA4とショートしてた。ここまで真似せんでもいいだろうにとは思った。



・以下の本手配中 はよ届け

Getting Started With Intel GalileoGetting Started With Intel Galileo
Matt Richardson

Maker Media, Inc 2014-01-22
売り上げランキング : 3140

Amazonで詳しく見る
by G-Tools

Galileo シリアルポート用ケーブルの工作とRTC設定

 GalileoのLinux側にログインしてなんかしようとするにはスケッチ経由でやる方法もあるがシリアルケーブルがあると便利。が、Galileoは3.5mmのステレオプラグをシリアルポートとして使っているので手持ちのもので工作してみた。

 たまたま、Dsub9ピン→RJ45のコンソールケーブルとサンハヤトのRJ45変換基板CK-18があったのでこれとステレオプラグを使って組み立てた。コンソールケーブルはCiscoのネットワーク機器以外の一部のサーバ機でも使われているのでたまたま持ってた。

参考:
Ciscoコンソール用 DB9-RJ45変換コネクタの自作
RS-232(Wikipedia)
「Intel Galileo Development Board」を起動して動作確認
【CK-18】コネクタ変換基板・モジュラー88タイプ


※追記 秋月電子のUSB-シリアル変換ケーブルでも動作確認
USB-シリアル変換ケーブル グレー色 延長ケーブル付

 プラグ加工。ケーブルの赤が先端、緑が中央、黒が根元。
2014galiseri1

 これをCK-18基板の端子に接続。赤=3,緑=6,黒=4または5。
 RJ45端子における信号は
1 CTS (in)
2 DTR (out)
3 TxD (out)
4 GND
5 GND
6 RxD (in)
7 DSR (in)
8 RTS (out)
 となる。フロー制御をなしにするのでTxDとRxDだけの接続でよい。
ハードフロー制御をONにしてしまった場合は端末側が送受信できなくなるのを防ぐため、CTS/DSRをGNDに落とせばよい。または、CTS-DTRをショートなど。
2014galiseri2

 TeraTermによる画面表示。 通信速度は115200bps。起動時はGRUBのブートメニューが出る。10秒ほほど待つと起動し、login:プロンプトが出たらrootでログイン。
2014galiseri3


 さて、ついでにRTCのバッテリバックアップも作ったので動作確認する。CR2032の電池ボックスから2本線出してくっつけただけ。

2014galirtc

 時刻の設定は以下のようにする。

# date -s "2014-01-31 01:45:00"

 時刻設定が終わったら、RTCに転送しておく。

# hwclock --systohc

 電源をいったん切って、起動後にdateコマンドで確認。

参考:
システムの時計を設定する方法
 

 
エムサーブ コンソールケーブル(RJ45-DB9)エムサーブ コンソールケーブル(RJ45-DB9)

エムサーブ
売り上げランキング : 22506

Amazonで詳しく見る
by G-Tools

GalileoのファームウェアアップデートとLCD表示

 Arduino互換のIDEとシールドが使えるIntelのGalileoを使ってみた。

 まずはこちらを参考にファームウェアのアップデート。
Intel Galileoはじめの一歩 (人と技術のマッシュアップ)

ハマりどころは
・シリアルデバイス名でtty.*でなくcu.*を選択する
だが他にもあった。MacOSX(10.8)で専用のIDEを使ってアップデートする場合、ファイル名にスペースなどを含めてはいけない。ファイル名の長さも8文字まで。さらに、[アプリケーション]フォルダ以下に直接置かないといけない。私はArduinoのサブフォルダを作って複数の環境を置いていたのだが、ここでは動かなかった。

Problems updating firmware

 さて、Lチカも確認し手持ちのシールドが動くかどうかテスト。Galileoは5V/3.3Vのシールドが使える(ショートプラグで切り替え)。LCDキーパッドシールドを使った。スケッチは過去やったFizzBuzz。が、液晶の上の行に全部トーフが表示されたままで変わらない。調べたらlcd.init()を追加する必要があった。

Intel GalileoでHD44780キャラクタ液晶を使う方法(もへある)
Problems getting LCD to work with Galileo

LiquidCrystal lcd(8,9,4,5,6,7);

に対し、lcd.begin()の前に

lcd.init(1,8,255,9,4,5,6,7,0,0,0,0);

が必要。ピン8,9,4,5,6,7はそれぞれRS,ENABLE,D4,D5,D6,D7に対応。

ソース:https://gist.github.com/houmei/8505883

2014galileoLCD

 表示できることはできるのだが表示が遅い。感覚では300ボーの端末の画面表示よりも遅い。

 Galileoでは既存のライブラリはあまりあてにできないようだ。


 
No brand LCD キーパッド シールド Arduino 計測結果 表示No brand LCD キーパッド シールド Arduino 計測結果 表示

ノーブランド
売り上げランキング :

Amazonで詳しく見る
by G-Tools

Leonardo互換のSeeeduino LiteとGrove OLEDテスト


 Seeeduino Lite (スイッチサイエンス) 1995円。同社扱いのArduino Leonardo 2835円とくらべて安い。
黄色いコネクタと白いGrove用コネクタは自分でハンダ付けする。
特徴として、3.3V/5V切り替え、I2CとシリアルのGroveコネクタ、半ピンずらしたコネクタ取り付けのパターンあり。

 MacOSX 10.9.1 + Arduino IDE 1.0.5で動作確認。

 Seeeduino Lite Wiki
2014leo



 このままだとちょっとつまらないのでGroveを使ってみる。Groveは4ピンコネクタを使用するセンサ類を接続するSeeedStudio独自の規格。最初、右側のシリアル端子にシリアル用LCDを接続して試してみたが、Seeeduino Liteでは1,2番ピンに接続されている。これはATMega32U4のハードウェアシリアル端子なので、ライブラリに付属しているexamplesでは動かないようだ。
 そこで左側のI2C接続端子に128x64 OLEDを接続してみた。

GROVE System

Grove - OLED Display 0.96"

2014leo2 

 これは簡単、ライブラリをインストールしてArduino IDEを再起動、サンプルスケッチを呼び出してみただけ。
 

MacOSX10.9(Mavericks)とFTDIドライバについて→10.9.5アップデートで解決

※MacOSX10.9.5アップデートで解決した模様。

 FTDIドライバ対策を行っていなかったMacOSX10.8をMavericksにアップデートし、10.9.5アップデート後、FTDIチップを使用しているArduino(例:互換機のCrowduino)を接続しbrinkスケッチを転送。接続時はドライバは以下のようにFTDIドライバは1つだけ認識。書き込み可能。

$ kextstat | grep FTDI

  155    0 0xffffff7f82c33000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.16) <138 36 5 4 3 1>

 もともとのAppleUSBFTDI.kextは削除していない。

$ cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/

$ ls -al

total 0

drwxr-xr-x  24 root  wheel  816  8 21 03:26 .

drwxr-xr-x   8 root  wheel  272  9 19 13:21 ..

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDC.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDCACMControl.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDCACMData.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCDMM.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCECMControl.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCECMData.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCEEM.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDCWCM.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBEHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:33 AppleUSBFTDI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBHub.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBMergeNub.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBOHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBOpticalMouse.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBUHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:35 AppleUSBVideoSupport.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBXHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBCompositeDriver.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBHIDDriver.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBHIDDriverSafeBoot.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:27 IOUSBLib.bundle

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBUserClient.kext 



ーーー以下は以前の記事

 MacOSXを10.9にアップデートしたらFTDIチップを使っているArduinoが通信できなくなるという話を聞いて、10.9.1のアップデータが来るまで待っていたのだけど相変わらず直ってなかったので以下を適用した。
☆Arduino UNO R3、Arduino LeonardoなどFTDIチップを使わずにシリアル通信を実現しているものは問題なかった。

Arduino in OS X 10.9 Mavericks - Serial Port Issues

 AppleがMacOSX10.9からFTDIドライバをつけるようになったのだが、それに不具合があるらしい。修正方法は、標準のApple FTDIドライバを削除してFTDICHIPが配布しているドライバをインストールすること。
Virtual COM Port Drivers こちらからMacOSX用2.2.18をダウンロードする。ダウンロードして展開したFTDIUSBSerialDriver_v2_2_18.dmgを開くと2つのパッケージがあるが、FTDIUSBSerialDriver_10_4_10_5_10_6_10_7の方をインストールする。

ドライバの確認はkextstatコマンドで確認できる。デバイスを接続しないと現れない。

以下は2つのドライバが入ってしまっている例。

$ kextstat | grep FTDI

  127    0 0xffffff7f8259d000 0x7000     0x7000     com.apple.driver.AppleUSBFTDI (1.0.1b1) <114 37 5 4 3>

  128    0 0xffffff7f825a4000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.18) <114 37 5 4 3 1>


先ほどのリンクにあった手順
cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns 
    sudo mv AppleUSBFTDI.kext AppleUSBFTDI.disabled 
    sudo touch /System/Library/Extensions
で削除して再起動し、FTDIのドライバをインストールすると以下の様に確認できる。

$ kextstat | grep FTDI

  125    0 0xffffff7f81ca1000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.18) <114 36 5 4 3 1>

 動作確認はCrowduinoで行った。これはArduino Duemilanove互換でFTDIのチップを使ってシリアル通信をしている。クロウディーノ(Arduino互換) (801-ECP-C328) 

ついでにこんなのも見つけた。FTDIドライバをON/OFFするらしいが試していない。Arduinoに限らず影響があったみたい。OS X Mavericks (10.9) - IMPORTANT


追記:
Mac OS X MavericksにおけるFTDIシリアルポートドライバの取扱い 

201312メモ

Arduino関連。
Happy Hacking KeyboardをBluetooth化する(無改造版)

Arduino に dualMocoLUFA(USB-MIDI ファームウェア)を導入

無線LAN(Wi-Fi) SDカードまとめ ~Arduinoで使いたい~

Firmataプロトコル概要 (Ver 2.3)

DFU-Programmerのビルド

100円マイコンATtiny2313でArduino

Trinket 5V版と3.3V版がある。USBはソフトウエアで実現。シリアル通信はWindows側にドライバが必要。速度が遅すぎるせい?
Home/ Trinket/ Introducing Trinket/ Pinouts
Home/ Trinket/ Trinket USB Volume Knob/ Code

NXPのDIPーARMマイコン。
NXPの8ピンARMを食す(その2)
LPCXpresso IDEのRed State Machine file generatorを使ってみた [電子ブロック工房]
180円mbedの使い方

BeagleBoardBlack
OpenRTM-aistをBeagleBone Blackに実装し、開発する方法

共立エレショップのシリアル→パラレル変換ボード付きOLED

 OLEDは視認性が良いということで実験してみたかったんだけど、よくあるキャラクタLCDとインターフェースは同じでも初期化などが若干異なるということでなんとなくやってなかった。共立エレショップのOLEDにはシリアル→パラレル変換ボードが付いたセットがあるので、ついでにArduino LeonardoやArduino MEGAにあるハードウェアシリアルを使った実験をやってみた。

C9B362 シリアル→パラレル変換ボード付16x2【白色】OLEDカラーディスプレイ
C9B361 シリアル→パラレル変換ボード付16x2【黄色】OLEDカラーディスプレイ

資料:
資料:パラレル→シリアル変換ボード付き 16×2OLED カラーディスプレイ

上記で使われているOLEDは以下と同じもの。
BB1418 OLEDディスプレイ キャラクタ表示タイプ 16文字x2行 黄文字

今回はArduino LeonardoやArduino MEGAにあるハードウェアシリアルを使う。
Arduino→OLEDモジュール接続:
TXD→RXD
RESET→RESET
5V→+5V
GND→GND

スケッチはこちら:
// #include 
// OLED serial
// 20131119 for Arduino MEGA & Leonardo
//

// SoftwareSerial oled(8,9);

void setup() {
  Serial1.begin(9600);
  while(!Serial1);
  Serial1.write(27);Serial1.write('C');
}

int count=0;

void loop() {
  Serial1.write(' ');Serial1.print(count,DEC);
  count++;
  delay(50);
}

 Arduino MEGAでの例:
2013oled1

 Leonardoでも同様。スケッチの冒頭、while(!Serial1); がないとゴミが表示された。
 2013oled2

 ひょっとしてこちらのディスプレイに差し替えただけで動くかなあとやってみたけどダメだった。残念。
DAV413 OLEDディスプレイキャラクター表示タイプ20文字×4行 黄文字

 なお、Arduino MEGAは比較的高価なので、SainSmartの互換品を使った。



サインスマート(SainSmart) MEGA2560 互換ボード for Arduinoサインスマート(SainSmart) MEGA2560 互換ボード for Arduino

サインスマート(SainSmart)
売り上げランキング : 37414

Amazonで詳しく見る
by G-Tools

SpilmzieLabsの電卓キットを組み立てた

 SpilmzieLabs Calculator Kitを組み立ててみた。 2013calc0

 Adafruitで$44。ドイツ製。アクリルケースが美しい7セグLED6桁の電卓。
SpikenzieLabs Calculator Kit - 

 他のディストリビュータはこちら。
Calculator Kits from Spikenzie Labs Maker SHED
SpikenzieLabs Taschenrechner Bausatz EXPTECH
SpikenzieLabs Awesome Oldskool Calculator Kit Phenoptix


 組み立て方は詳しい説明書がある。また、レビューもある。組み立て前に見ておくと良い。
http://www.spikenzielabs.com/Downloadables/calc/CalcBuildInstructions.pdf [PDF]
レビュー記事:
SpikenzieLabs Calculator Kit review
Building the SpikenzieLabs Calculator Kit

 内容物はこんな感じ。CR2032コイン電池も入っている。ハンダごて、ニッパー、ラジオペンチ、カッター、六角レンチがあれば作れる。あとアクリル組み立ての時にテープを少々。
2013calc2


 では電気の工作から。電子部品はATmega328、10KΩ×4、0.1μF×2、7セグメントLED×6、コイン電池金具、タクトスイッチ×17。ICソケットはない。つけようとしてもケースを閉じることができない。
2013calc3

 コインホルダの金具を先にハンダ付けする。次に抵抗、コンデンサ。タクトスイッチは4本足があるが、対角2箇所を先にハンダ付けして目視で取り付け具合を確認し、調整する。 
ATmega328は直接ハンダ付け。7セグメントLEDはスペーサを介して基板に取り付けるがここが一番難しかった。説明書にはLEDのバリをカッターで取れとあったが、特に必要なかった。ピシっと揃っていればいい。

 2013calc4

 あとはコイン電池を上側がマイナスになるように取り付ければ"CALC 1.1"の表示が出るはず。色々押して動作確認。何も操作しなければ約15秒でオフになる。また、電卓機能は0に関する操作はサボってなにも動かない。つまり÷0や+0をやっても何も結果は表示されない。

 次はスイッチとアクリルケースの組み立て。
 アクリルはビニールで保護されているので剥がす。が、実際やってみて思ったのは指紋がペタペタついてしまって見栄えが悪くなってしまうということ。大きなパネル3枚については、スイッチの組み立てが終わるまでは剥がさないほうがいいかも。
 タクトスイッチの上にアクリルの土台とボタンを組み合わせたスイッチ部品を作ることにより、タクトスイッチむき出しのダサさをなくすことができる。キーの穴が空いている2枚のパネルを重ねながら、穴と同じサイズのアクリル部品に対してボタンを取り付ける。ボタンにはあらかじめ両面テープが貼ってある。
 ボタンができたら枝のようなスペーサ目的のアクリル部品をつけ、基板と一体化させる。ここらへんはネジで仮止めしながら行う。ちょっとむずかしい。底面用のアクリル板の四隅はタップが切ってあるので、これでネジを固定する。ネジは六角レンチで締めるが、ラジオペンチでも可。

2013calc5


 さてこうやってみると必要最小限の部品できれいにまとまっている。いいね。

 もうひとつの楽しみは、これがプログラム可能だということ。スケッチも公開されている。
Arduino互換で、Arduino IDEからは Arduino Pro / Pro mini 3.3Vとして扱える。独自の電卓も実装可能よ。

ここのフォーラムではIPアドレスを計算するものが投稿されていた。
SpikenzieLabs Calculator Kit

2013calc6



 組み立ては3時間くらい。国内でも扱わんかなあこれ。
 

Arduino Leonardo用 USB-HIDの書き換えメモ、その他

 この記事、Arduino Leonardoでどうやって標準ではないUSB-HIDジョイスティックを入力可能にしているのかと思っていたら:
ゲームコントローラー cubic9.com

Turning an Arduino Leonardo into a joystick.

USBAPI.hとHID.cppを差し替えるだけだったのか! バイナリにパッチ当ててたよ……


以下、今月のメモ
HID-class USB Serial communication for AVRs using V-USB

Arduinoで物足りなくなっちゃった方へ。Cypress CY8CKIT-042 PSoC 4 PIONEER KIT
DA4121 PSoC 4 PIONEER KIT 共立エレショップ
Fubarino SD Development Board MICROCHIP PIC32MXのボード

mbed LPC1114FN28で8桁7セグLEDモジュールを制御してみた きょうのかんぱぱ
AVR用ISP変換ケーブルふたたび ikkei blog
Raspberry Piクイックスタートアップガイド (日本語) 
日本語音声認識  cubic9.com
ATmega32U2でArduinoモドキを作る  kosaka lab
Freescale,ノイズ耐性などに優れた5V電源仕様のARM Cortex-M0+マイコンを発売  5V系ARM
FRDM-KE02Z: Kinetis EシリーズFreedom開発プラットフォーム 
Cyclone V GX Starter Kit $179。DE0の次はこれか?
VFDとは
3V-5V switchable I2C Real Time Clock Shield
Marcelo Barros / This repository is a program ArduinoShieldSPI
ASOOVU USB

メモ:My First Brainfuckコンピュータ

 8文字だけでプログラミングできる言語Brainfuck (Brainf*ckとも)。これをワンボード・マイコンにしたものがあった。
My First Brainfuck Computer

 キー入力は4個で音楽も奏でられる。その実体はArduinoのシールド。

 Brainfuckについては以下が参考になる。

Brainf*ck(kmonos.net)

KMC ID:primeさんによる紹介
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング

LEDとタクトスイッチに圧電ブザー、バニラシールドがあればすぐに組み立てられそうね。

たぶん最後のカイゼン LEDのチラつきをなくしキー入力を確実に

 以下の続き。

 カイゼンCookieClicker用自動マウスクリック(TimerOne割り込みによるキー読み取り)  

Arduino Leonardoでマウスクリック/クッキーを自動的に焼く装置(マウスクリック99回/秒、設定変更可能)

 残り、気になっている点は7セグメントLEDのチラつきと、クリック送出開始・送出終了のキー反応が敏感すぎること。一回確実に押しっぱなしにしてON、離してから次に押しっぱなしにしてOFFのような動作にしたい。

 LEDのチラつきは表示を消してから書いているためで、値が変わらなければ表示の更新もしないことで解決。BASICでゲーム作る時は移動先にキャラクタを描いてから元のキャラクタを消さないとちらついてましたね。

 送出開始・終了は、割り込みルーチン内で直前は押していない、現在は押している状態を認識させればよい。押しっぱなしでも記録されるのは1回だけ。これでかなり操作性が良くなった。
 なおディレイ間隔の増減は押しっぱなしで連続的に変化してもらいたいためそのままとした。

  key=digitalRead(CBTN);
  if (key==LOW && Psend==HIGH) Send=1; // Press
  Psend=key;
 
ソースはこちら:
https://gist.github.com/houmei/6627272

現在、4.5GcpsでUncannyClickerのarchivementを得た。
 

カイゼンCookieClicker用自動マウスクリック(TimerOne割り込みによるキー読み取り)

前回作った
Arduino Leonardoでマウスクリック/クッキーを自動的に焼く装置(マウスクリック99回/秒、設定変更可能)
が大変雑だったので、スケッチを作りなおした。

 どのへんが雑だったかというと:
(1)ループ内でキーを読み込んでいるため、ループ回数などが簡単にいじれずキーの反応も悪い。
(2)1000回ループのうち指定した回数を最初の方に1ms間隔でマウスクリックを押し込めたのでどうもよろしくない(ブラウザが固まることがある)

 特に操作感が悪かったのでキー入力を取りこぼさないようタイマ割り込みで読み取り、グローバル変数に結果を置き、メインのループでそれを参照するようにした。また、マウスクリック(1ms)+指定したms何もしないで待つ、という動作を繰り返すようにしてなるべくマウスクリックを一定間隔にあけられるようにした。このため、7セグLEDでの表示は待ち時間のmsに変更。つまり数値が小さいほど時間あたりのクリック数は多い。

ソースはこちら:
https://gist.github.com/houmei/6611030 

 タイマ割り込みについてはTimerOneライブラリを使用する。これはArduino Leonardoにも対応している。動作は簡単に言うとBASICのON TIME GOSUB 行番号。通じた?

 TimeOneライブラリを使用するにはsetup()内で初期化する。

  Timer1.initialize();
  Timer1.attachInterrupt(readkey,30000); // 30ms 

これで30ms間隔でreadkey()関数を呼び出す。

 readkey()関数はプッシュボタンの状態を呼び出す。直前のボタンの状態と比較し、押されていたらグローバル変数Up,Down,Sendを1に設定する。これはボタンのチャタリングを除去するため。Up,Down,Sendはloop()内で読み出したら0にクリアする。

volatile int Send=0;
volatile int Up=0;
volatile int Down=0;

volatile int Psend=0;
volatile int Pup=0;
volatile int Pdown=0;

void readkey() {
  int key;
  key=digitalRead(ABTN);
  if (key==LOW && Pdown==LOW) Down=1;
  Pdown=key;
  key=digitalRead(BBTN);
  if (key==LOW && Pup==LOW) Up=1;
  Pup=key;
  key=digitalRead(CBTN);
  if (key==LOW && Psend==LOW) Send=1;
  Psend=key;
}

 さて、ちょっとはまったのが noInterrupts()と interrupts()。これらは割り込みを抑止/許可するのだが、Mouse.click()以前にnoIntterrupts()状態だとクリックが送出されない。つまり、USBのHIDマウス/キーボードを使うときには割り込みを許可しておかなければならない。
 
 で、だいぶ操作感は改善されましたよ。

2013cookieclick3




現在3.5Gcps (cookies per second)

http://orteil.dashnet.org/cookieclicker/ 



Arduino Leonardo (ソケット・ヘッダ付き)Arduino Leonardo (ソケット・ヘッダ付き)

Arduino
売り上げランキング : 38773

Amazonで詳しく見る
by G-Tools

Arduino Leonardoでマウスクリック/クッキーを自動的に焼く装置(マウスクリック99回/秒、設定変更可能)

 なぜか今日ツイッターの自分のTLで突然流行り始めたクッキークリッカー。最初はクッキーをクリックするだけだったのが……
http://orteil.dashnet.org/cookieclicker/

 常にクリックするのも面倒なので、勝手に連続クリックするのを作ってみた。マウスクリックの代わりはArduino Leonardoを使えば簡単にできそうだ、ということでその辺にある物で作ってみた。

https://gist.github.com/houmei/6572149

2013cookie


 Pin8,9,10にタクトスイッチを接続。もう片方はGNDへ。
 表示はシリアル接続7セグメント4桁LED(赤)を使ったけどクリック動作には直接関係ない。約1秒あたりのクリック数を表示させる。これはArduino Leonardoのハードウェアシリアル機能を使うのでPin2をモジュールのRXに接続する。以前ちょっと試した。
シリアル接続7セグメント4桁LEDとUSB-TTLシリアルコンバータケーブル
 8,9に接続したボタンでクリックする数を増減させる。10に接続したボタンでクリックの開始と停止。これはメインのループ内でポーリングしているだけなので応答が悪い。クリックを送出している時はLeonardo上のLEDを点灯させる。ま、TXランプが点滅するのでわかるんだけど。
 やってみたら1秒あたり100回ぐらい、もっと増やすとブラウザ側が応答できなくなってくる。

 こんな感じでスクリプト言語を使ってるみたいに思いついたものを作りたいんだけど、物理的な部品と使い方のストックが必要なのよねー 
 

作って遊べるArduino互換機 Uncompatinoの組み立て失敗

 愉快な製作例が満載 作って遊べる Arduino互換機鈴木哲哉著)を買ってきた。作例で使うArduino互換のUncompatino基板が付いている。部品は別に入手しなければならないが、秋月電子で1000円で売っていた。
『作って遊べるArduino互換機』パーツセット
【書籍】作って遊べるArduino互換機

2013uncompatino1
 
 さて、難関はFT232RLのハンダ付け。これだけ2.54mmピッチではない。本の通りにやってみる。ハンダの吸い取りは吸い取り線にフラックスを塗ってやってみた。
2013uncompatino2

 他の部品も取り付けた後、PC側に必要なソフト類を用意。
BitBang版avrdude(avrdude-setjtag04e.zip) (すzのAVR研究)
avrdude-GUI(avrdude-GUI-1.0.5.zip) (ゆきの研究室)
libusb-win32

 Uncompatinoのプラグを全ショートにしてUSBで接続。avrdude-GUIでFUSEを読み込んでみるが以下のエラーが発生。


 
avrdude.exe: BitBang OK
avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
avrdude.exe: drain OK

ft245r:  bitclk 76800 -> ft baud 38400
ft245r:  bitclk 76800 -> ft baud 38400
avrdude.exe: ft245r_program_enable: failed
avrdude.exe: initialization failed, rc=-1
             Double check connections and try again, or use -F to override
             this check.


avrdude.exe done.  Thank you.

 -Fオプションを付けてやってみると:
avrdude.exe: BitBang OK
avrdude.exe: pin assign miso 3 sck 5 mosi 6 reset 7
avrdude.exe: drain OK

ft245r:  bitclk 76800 -> ft baud 38400
ft245r:  bitclk 76800 -> ft baud 38400
avrdude.exe: ft245r_program_enable: failed
avrdude.exe: initialization failed, rc=-1
avrdude.exe: AVR device initialized and ready to accept instructions
avrdude.exe: Device signature = 0x000000
avrdude.exe: Yikes!  Invalid device signature.
avrdude.exe: Expected signature for ATMEGA328P is 1E 95 0F

avrdude.exe done.  Thank you.
 USBからFT232RLへの通信は上手く行ってるみたいだが、FT232RLとATmega328pの通信がうまく行っていない。これはもうハンダ付け不良。
2013uncompatino3
 
 目視してもわからない。ショートチェックはやったが基板とFT232RLの足がうまくついているかはわからないので、半田ごてでなぞってみる。
 そうやってからUSB接続したらLEDが薄明るく点灯。読み書き操作で点滅。これで上手く行った。 Arduino用のブートローダを書き込んで、BlinkのサンプルスケッチでLチカやって動作確認。
 これでArduinoが一枚増えた。また、AVRの書き込み器としても使えそう。
 老眼つらい。

 
作って遊べるArduino互換機作って遊べるArduino互換機
鈴木 哲哉

ソシム 2013-08-21
売り上げランキング : 119653

Amazonで詳しく見る
by G-Tools

LaunchPad用のArduinoライクな開発環境Energia

 昨年(2012年)頃まで450円とキャンペーン価格だったTIのMSP430ボードLaunchPadとCortex-M4FボードのStellaris LM4F120 LaunchPad。これら用のArduinoライクな開発環境、Energiaを試してみた。

 現在はキャンペーン価格は終了している。共立エレショップで購入できる。
MSP430 LaunchPad(ローンチパッド)
LM4F120 Stellaris LaunchPad(ステラリス ローンチパッド)
MSP430 LaunchPadは私が買った頃はMSP430G2231搭載でMSP430G2211が付属だったけど、グレードアップしている。
Get started with the LaunchPad Evaluation Platform from Texas Instruments
TIから直接購入することもできる。
MSP430 LaunchPad バリュー・ライン開発キット
Stellaris® LM4F120 LaunchPad Evaluation Kit

追記:
宮崎 仁のマイコン基礎の基礎: 第12回 安価で手軽なMSP430™開発キットLaunchPadを使ってみよう

 さて、EnergiaだけどMacOSX10.8で試した。
Energia

 Energiaのサイト、Downloadからenergia-0101E0009-macosx.dmg - Mac OS X: Binary release version 0101E0009 (12/06/2012) をダウンロードする。CDCドライバが入っているのでこれを先にインストール。インストール後は再起動が必要。次にEnergia本体をインストール。インストール手順の説明ではパッケージに署名がないためこれを無視する手順が書かれてある。私はすでにそういう設定にしてあったので何も警告は出なかった。MacOSX10.8でインターネット上に公開されているソフトをインストール可能にする手順と多分同じ。

 Energiaを起動するとArduino IDEに似た赤い画面が出てくる。あとはArduinoを使ったことがあればだいたい同じかんじ。
 [ツール]→[マイコンボード]で対応するボードを選択する。USB経由でLaunchPadを接続し、[ツール]→[シリアルポート]で接続先を選択する。/dev/tty.usbmodem????や/dev/tty.uart-????といったポートが追加されているはず。

 サンプルのblinkをいじってボタンを押している間、赤と緑が交互に点灯するスケッチを書いてみた。
https://gist.github.com/houmei/6262174

// LaunchPad(MSP430G2231),StellarisLaunchPad(LM4F120)
//
void setup() {
  // initialize the digital pin as an output.
  // Pin 14 has an LED connected on most Arduino boards:
  pinMode(RED_LED, OUTPUT);
  pinMode(GREEN_LED, OUTPUT);
  pinMode(PUSH2, INPUT);
}

  int tg=0;
  int a,b;
void loop() {
  if (tg==0) {
     digitalWrite(RED_LED, HIGH);
     digitalWrite(GREEN_LED, LOW);
  } else {
     digitalWrite(RED_LED, LOW);
     digitalWrite(GREEN_LED, HIGH);
  }    

  a=digitalRead(PUSH2);
  delay(50);
  b=digitalRead(PUSH2);
  if (a==0&&b==0) {
    tg=!tg;
  }
  delay(100);
}


2013launchpad430
Stellaris LaunchPad
2013launchpadStellaris

 
追記:LaunchPad v1.4、MSP430G2553に差し替えてもOKだった。基板上はTxD、RxDのショートプラグを外す。Energia IDEはLaunchPad G2553を選択。

2013MSP430G2553 

S9705 照度ー周波数変換フォトICを使った照度計

 秋月電子で売っている照度ー周波数変換フォトIC S9705 を使った照度計を作った。

照度・周波数変換フォトIC 550nm S9705(2個入)

資料:S9705 (浜松フォトニクス)

作例:■簡易照度計V2(S9705) (電子工作etc) こちらによると、100lx=50KHzなので周波数を測定したあと÷500をするだけでよいとのこと。
 では、手持ちのArduinoでやるには周波数カウンタがあればよいわけだ。探したらライブラリがありました。
Arduinoで遊ぼう - 周波数カウンタ(なんでも作っちゃう、かも。)
Arduino Frequency Counter Library(Lab III)

 これはATMega328内蔵のカウンタを使ってArduino Pin5に入るパルスを一定時間カウントするもの。ゲートタイムを1秒に設定すればそのままカウント数が周波数になる。S9705の出力はデューティ50%で最大周波数は10Klxで1000KHz、とあるので充分。

2013photoIC
 Arduino IDE1.0.5で確認した。先程のArduino Frequency Counter Libraryからライブラリをダウンロードし、ライブラリをインストールする。MacOSXだとArduinoのアイコンを右クリックして「アプリケーションの内容を表示」をクリック、Contents→Resources→Java→Libraries以下にフォルダごとコピー。

 最初はまったのはArduino Leonardoで動作しなかったこと。ライブラリ中、defined (__AVR_ATmega328P__) という箇所があるので__AVR_ATmega32U4__と追加したらエラー発生。AVRのレジスタに関するシンボルが見つからないみたい。32U4もハードウェアとしてはカウンタを持っているはずなのでここをちゃんと定義してやれば使えそうだが、Arduino Unoに変えて楽することに。
 と思ったらヨソで使用中なので現在手持ちにArduino Unoがない。で、鳥人間のHarpy nanoがあったなあと引っ張り出してきて使用。マイコンボードはArduino Pro or Pro Mini (3.3V, 8MHz) w/ ATmega 328を選択する。S9705を3.3Vで使用することになるが問題ない。
2013photoIC3

スケッチは以下:サンプルを少し改変した程度。
#include <FreqCounter.h>

void setup() {
  Serial.begin(9600);                    // connect to the serial port
  Serial.println("Frequency Counter");
}

long int frq;
void loop() {
  FreqCounter::f_comp = 8;             // Set compensation to 12
  FreqCounter::start(1000);            // Start counting with gatetime of 1000ms
  while (FreqCounter::f_ready == 0);  // wait until counter ready
  frq = FreqCounter::f_freq;            // read result
 Serial.print(frq);                // 
 Serial.print(" ");                // 
 Serial.println(frq/500);                // S9705 100Lux=50KHz
  delay(80);
}
 これでシリアルコンソールに周波数と照度を垂れ流す。一応、同じく秋月電子で買った照度計で大きくずれてないか確認した。

2013s9705

メモ:マイコン関係のリンク色々

 ブラウザのタブ整理。主にtwitter経由で知ったものをあとで読むつもりで貯めていたものです。

ArduinoをAVRライタとして使う
Arduino ISPを使う 
FT232Rモジュール利用 AVR TPIライター

Arduinoのライブラリを作るときの参考:
Arduinoの各種ライブラリ  
自作ライブラリの作り方 
 
開発環境:
embedXcode
MPIDE: One IDE to rull them all. (For Arduino and its varients anyway) 
Emuduino Emu(lator) + (Ar)duino Arduinoエミュレータ
ブラウザでArduinoプログラミング 
ino使うとCUIでArduinoをビルドできて便利

Arduinoで.hexファイルを出力する方法について
Issue 493: .hex export option 

I2C関連:
ArduinoでI2C通信をやる際のメモ
I2C block for ArduinoIO simulink package
ストロベリー・リナックスの低電圧I2C液晶をArduinoで使う
I2C液晶のArduinoライブラリ


その他:
V-USB Virtual USB port for AVR

Arduino + イーサネットシールド + LCDでFacebookページの「いいね数カウンター」をつくる
デザイナーがやる、はじめての電子工作(1):暗くなったらArduinoから自動的につぶやくおやすみメッセージ
参考)部屋の明るさをツイッターでつぶやいてみよう!

WIZ820ioをつかってみました

sparkfun OpenLog

AVRとZ80でCP/Mの改良 

Free Online Design Tools from Aspen Labs and Digi-Key Give Engineers an Edge in Online Printed Circuit Board Design 
記事検索
プロフィール

hardyboy

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