PICAXE(ピカクス)を使ってみる-その2 USB電流チェッカーの製作
前の記事でPICAXEをいじる環境を作ったので、早速具体的なテーマに取り組んでみました。
課題は、USBの電流チェッカー。
ええそうです、ついこのあいだArduinoで作ったばかりの物と基本は同じです。コンセプトとしては、充電電流の大小がLEDの点滅周期で判る物。Arduinoで作ったやつは累積電流が表示出来ます。でも使ってみるとほとんどの場合は、累積電流の測定機能は使いません。それよりもLEDの点滅で「充電中で電流がじゃんじゃん流れているかどうか?」が判るのがすごく便利です。
ということで、電流だけ判る物をPICAXEで作ってみました。といってもまだブレッドボードの段階です。
▼ブレッドボード

PCAXEのCPU以外はLEDと抵抗が少々。
▼回路図(クリックで別窓に拡大)

めちゃめちゃシンプルです。こんなふうに8PinのPICを使うのに憧れていたんですが、PICAXEのおかげで簡単に実現できました。
おっと、これがどういうふうに動くか、説明を全くしていませんでした。
動作としては、USBの電源電流を測定して電流の大小でLEDの点滅周期を変えています。つまり、電流が多ければLEDのチカチカの点滅速度が速くなります。これがあると、スマホなどの充電をする時にまだ充電中か、はたまたもう充電が終わったかなどが簡単に判ります。
LEDの点滅速度は電流に比例。LEDは二つあって、片方は1A流れた時に毎秒1回。もう一つは0.1A流れた時に毎秒一回点滅します。これなら2Aから0.01Aあたりまで広い範囲で充電の状態が判ります。
とはいってもまだPICAXEのプログラミングの勉強段階で、まだ完全に使い方が判っているわけではありません。
一番の問題はPICAXEの実行速度がめちゃくちゃ遅いこと。このチェッカーでは2A流れた時に高速側のLEDの点滅周波数は20Hzが必要です。この速度はArduinoでは楽勝ですが、PICAXEだとかなり苦しくなります。
それと、タイマー割り込みなどの方法で正確な周期でプログラムを動作させる方法が見当たりません。
Arduinoみたいに処理速度が速くて、それこそ数十マイクロ秒で処理が終われば、タイマー割り込み無しでdelay関数でもいけます。でもPICAXEでは処理が数ミリ秒もかかるので正確な周期で動かすうまい手が見つかりません。
とかなんとかで作った現在のプログラム
これ、正確な時間間隔で動かすのは諦めてます。LEDの点滅時間の誤差は10%以上あると思いますが、まあ目安に使うなら許容範囲。PICAXEで例えば10ms間隔で割り込みかける方法は本当に無いのかな。
PICAXEで残念だったことばかり書いてますが、デバッグの画面はすばらしいです。
▼DEBUG画面

こんなふうに内部の変数がリアルタイムで表示出来て、これは便利。但しDEBUG画面のデータを一回送るのに数十msが必要です。
それと、この画面を見て思い出したのは、PICAXEでは変数のメモリーのへのアサイン方法がすごく原始的であること。変数の名前はw1とかb1とかあらかじめ決まっていて、各々の変数のメモリー上の位置も固定です。実はこの仕様が最初は全く理解できませんでした。適切な変数名の選択は、良いプログラムを書く時に重要なんですが。(変数名はsymbol命令で他の名前にマップすることはできます)
PICAXEのプログラムを書くには、変数とメモリー上の位置の関係を正確に把握していないといけません。見かけはBASICですが、変数の利用つまりメモリアクセスに関してはアセンブラと思わないといけません。
なんだか最後はぐだぐだの記事になりました。
課題は、USBの電流チェッカー。
ええそうです、ついこのあいだArduinoで作ったばかりの物と基本は同じです。コンセプトとしては、充電電流の大小がLEDの点滅周期で判る物。Arduinoで作ったやつは累積電流が表示出来ます。でも使ってみるとほとんどの場合は、累積電流の測定機能は使いません。それよりもLEDの点滅で「充電中で電流がじゃんじゃん流れているかどうか?」が判るのがすごく便利です。
ということで、電流だけ判る物をPICAXEで作ってみました。といってもまだブレッドボードの段階です。
▼ブレッドボード

PCAXEのCPU以外はLEDと抵抗が少々。
▼回路図(クリックで別窓に拡大)

めちゃめちゃシンプルです。こんなふうに8PinのPICを使うのに憧れていたんですが、PICAXEのおかげで簡単に実現できました。
おっと、これがどういうふうに動くか、説明を全くしていませんでした。
動作としては、USBの電源電流を測定して電流の大小でLEDの点滅周期を変えています。つまり、電流が多ければLEDのチカチカの点滅速度が速くなります。これがあると、スマホなどの充電をする時にまだ充電中か、はたまたもう充電が終わったかなどが簡単に判ります。
LEDの点滅速度は電流に比例。LEDは二つあって、片方は1A流れた時に毎秒1回。もう一つは0.1A流れた時に毎秒一回点滅します。これなら2Aから0.01Aあたりまで広い範囲で充電の状態が判ります。
とはいってもまだPICAXEのプログラミングの勉強段階で、まだ完全に使い方が判っているわけではありません。
一番の問題はPICAXEの実行速度がめちゃくちゃ遅いこと。このチェッカーでは2A流れた時に高速側のLEDの点滅周波数は20Hzが必要です。この速度はArduinoでは楽勝ですが、PICAXEだとかなり苦しくなります。
それと、タイマー割り込みなどの方法で正確な周期でプログラムを動作させる方法が見当たりません。
Arduinoみたいに処理速度が速くて、それこそ数十マイクロ秒で処理が終われば、タイマー割り込み無しでdelay関数でもいけます。でもPICAXEでは処理が数ミリ秒もかかるので正確な周期で動かすうまい手が見つかりません。
とかなんとかで作った現在のプログラム
これ、正確な時間間隔で動かすのは諦めてます。LEDの点滅時間の誤差は10%以上あると思いますが、まあ目安に使うなら許容範囲。PICAXEで例えば10ms間隔で割り込みかける方法は本当に無いのかな。
PICAXEで残念だったことばかり書いてますが、デバッグの画面はすばらしいです。
▼DEBUG画面

こんなふうに内部の変数がリアルタイムで表示出来て、これは便利。但しDEBUG画面のデータを一回送るのに数十msが必要です。
それと、この画面を見て思い出したのは、PICAXEでは変数のメモリーのへのアサイン方法がすごく原始的であること。変数の名前はw1とかb1とかあらかじめ決まっていて、各々の変数のメモリー上の位置も固定です。実はこの仕様が最初は全く理解できませんでした。適切な変数名の選択は、良いプログラムを書く時に重要なんですが。(変数名はsymbol命令で他の名前にマップすることはできます)
PICAXEのプログラムを書くには、変数とメモリー上の位置の関係を正確に把握していないといけません。見かけはBASICですが、変数の利用つまりメモリアクセスに関してはアセンブラと思わないといけません。
なんだか最後はぐだぐだの記事になりました。
- 関連記事
-
- PICAXEを使ってみる-その5 USB電流モニターの製作
- PICAXEを使ってみるーその4 PWMでタイマー割り込み作ってみた
- PICAXEを使ってみる-その3 タイマー割り込みが無い?
- PICAXE(ピカクス)を使ってみる-その2 USB電流チェッカーの製作
- PICAXE(ピカクス)を使ってみる-その1