2015年9月12日土曜日

LEDと照度センサーでPID制御の確認


2015/09/06 : 初公開
2015/09/11 : LCD動画追加


フィードバック制御の一つであるPID(Proportional-Integral-Derivative Controller)の
動作を見てみようと思います。

PIDを説明するとき車の速度を制御する例がよく利用されます。目標速度を指定しアクセルと
速度センサで目標の速度になるようにする例です。

しかし、ここでは目標の明るさを指定しLEDの明るさと照度センサを使用してPID制御を行う例をやってみようと思います。


目標の明るさの指定はボリュームダイアル(0~255)で行う。
LEDの明るさは PWM出力(0~255)で調整する。
今の明るさは照度センサのアナログ値(0~255)で取得する


ビジュアル化として次の値をLCDに表示する。

 目標の明るさ値 :入力値 0~255 : LCDのSETTING値  : 家に転がっていたもの
 LEDの明るさ値  :出力地  0~255 : LCDのLED(PWM)値  : 家に転がっていたもの
 今の明るさ値    :入力値  0~255 : LCDのSENSER値     : 秋月電子で購入(NJL7502L)抵抗は10KΩ

目標の明るさを変化させたさせた時のPID制御の時系列的変化をグラフで表示する。
時系列変化のグラフはLED(PWM)の値を表示しています。

なお、LCDの下部のサインカーブはLCDの動作検証(デモ)用として表示しています。





使用したCPU基板は GR-KURUMI、LCDは秋月電子で購入のシャープ製(LS027B4DH01)です。
開発環境はルネサス「がじぇっとるねさす」のコミュニティーサイトで提供さてている ArduinoIDEに似た
gr-kurumiIDEを使用しました。
左上の青いarduino基板はLCDを見やすく傾けるために使用しているだけです。


2015年9月7日月曜日

いろいろつなげて動かしてみた!

Raspberry Pi の場合



・LCD (Arduino経由のi2c接続)
  モータードライバのパルスカウンタ値、ジョイスティック値を表示する。

・ジョイスティック (MCP3206経由のIO接続)
  上下でモーターの回転方向とスピードを操作する。
  左右で加速度センサによるモーター制御への切替を行う

・加速度センサMPU6050 (i2c接続)
  左右に傾けることによりモーターの回転方向とスピードを操作できる。

・モータードライバインターフェース MED-G9001A-SPI (SPI接続)
  エムイーシステム社製モータードライバと通信する。モーターを制御する。
  モーターは maxon社製です。

・WiFiUSBドングル (USB接続)
  BUFFALO社製でネット接続する。 TeratermでRaspberry Piへアクセスしています。

一応、接続している機器は作成したプログラムにて同時に使えるようにしています。


GR-KURUMIの場合




・LCD (Arduino経由のi2c接続)
  モータードライバのパルスカウンタ値、ジョイスティック値を表示する。

・2x8キャラクタLCD (i2c接続) 秋月で購入
  とりあえずつけてみました。

・ジョイスティック (MCP3206経由のIO接続)
  上下でモーターの回転方向とスピードを操作する。
  左右で加速度センサによるモーター制御への切替を行う

・加速度センサMPU6050 (i2c接続)
  左右に傾けることによりモーターの回転方向とスピードを操作できる。

・モータードライバインターフェース MED-G9001A-SPI (SPI接続)
  エムイーシステム社製モータードライバと通信する。モーターを制御する。
  モーターは maxon社製です。

・SDカードスロット (SPI接続)
  SDカードのファイル読み書きやフォルダ内のファイル一覧表示、ファイルの削除、
  ファイルの内容の表示は行える。モーターを制御しながらSDカードアクセスが可能です。

・WiFiUSBドングル (USB接続)
  BUFFALO社製でネット接続する。 TeratermでRaspberry Piへアクセスしています。


一応、接続している機器は作成したプログラムにて同時に使えるようにしています。



動作確認に使用したプログラムについて


Raspberry Pi とGR-KURUMIで動かしているプログラムは単一のソースファイルをビルドできるように工夫して作成しております。 SPIやi2c(Wire)はArduino互換のRaspberryPi用のライブラリを作成して対応しております。一部互換性を保てない特殊なケース(i2cの拡張機能)もありますが、注意してアプリを作成すれば問題ない範囲だと思います。
Raspberry Piに LCD(2x8 i2c接続)を繋げると他の i2c接続機器が使えなくなったので Raspberry Piへの接続はやめました。

今回使用したプログラムの構成は次のようになっています。



2014年11月22日土曜日

グラフィックLCDを繋ぐ

前回は秋月電子にて販売されている

 ・シャープ モノクロHR-TFTメモリ液晶モジュール 2.7インチ WQVGA

を Arduino に繋げてみました。

今回はさらに秋月電子にて販売されている

 ・LCDコントローラS1D13781F00A評価基板 (Epson製LCDドライブIC)
  と
 ・TFT液晶モジュールATM0430D5

を Arduino と GR-KURUMI に繋げてみた。

GR-KURUMIの開発環境で提供されているAPIは Arduino 互換なので SPI接続のLCDは各開発環境の下で再ビルドすれば動作します。

今回 SharpのLCDの方は SPIのクロックが最大のCPUの 1/2 の8MHz では動作しなかったので GR-KURUMIで使用する場合は 4MHz に落とす必要がありました。

GR-KURUMIは Arduino Mini Pro 互換の基板(ピン配置)であるとともに、CPU動作クロックは2倍の 32Mhz であったりRAMサイズも 20Kbと多かったりします。

なので、GR-KURUMIで繋げて動かしたほうが描画速度が速いようです。(見た目にはあんまりわからないようにも感じるのですが)
  • シャープ製LCD + Arduino UNO (16MHz)


     
  • シャープ製LCD + GR-KURUMI (32MHz)


     
  • エプソン社製LCDドライブIC + Arduino Mini (8MHz)


     
  • エプソン社製LCDドライブIC + GR-KURUMI (32MHz)





2014年11月16日日曜日

ArduinoにグラフィックLCDを繋ぐ

Arudinoに秋月電子で販売されているシャープ製モノクログラフィック液晶(LS027B4DH01)を繋げてみました。

とりあえず、日本語表示はArduinoのメモリが少ないので無理なのでASCIIコードのアルファベットが表示できるとこまでやってみました。

SPI接続でつなげました。

この液晶は 2.7インチで 400x240 ドットの表示画面があります。
横1列の400ビット、つまり50バイト単位での更新しか行えないためちょっと不便です。
また、液晶内のメモリからデータを読み出すことはできないようだ。





文字コードからフォントデータの変換をしながらの全画面を更新する場合は画面の更新過程がちらつくので工夫が必要なようだ。



この液晶は 5V 動作とのことでしたが、 3.3V の Arduino pro mini でも動作しました。 動作クロックが 5V  の半分の 8MHz なので Arduino UNO より表示が遅く感じます。