カテゴリー別アーカイブ: AVR LCD ボード使用例

温度センサーIC LM19を使う

ここでは温度センサーIC LM19(National Semiconductor)を使ってRaspberry piで温度監視を行う事例を紹介します。

LM19仕様

  • パッケージ:TO-92
  • 動作電源電圧:2.4V~5.5V
  • 使用温度範囲:-30℃~+130℃
  • 精度:±2.5(@30℃)

接続例

スクリーンショット 2014-01-21 4.24.02
LM19からの出力はアナログ電圧のためRaspberry piでは直接扱うことができません。そこで一旦I2Cインターフェイス基盤でアナログ電圧を読み取り、その結果をI2Cをとおして取得することにします。
ICのデータシートを参考に出力には抵抗とコンデンサをつないでいます。

Python script


import i2cinterface99
ii = i2cinterface99.i2cinterface99()
state,value = ii.analogRead(0) #read A0 Pin 
if state == True:
 volt = value / 1023.0*3.3 #3.3V電圧でインターフェイス基盤を動作している場合のAD変換式
 temp = (1.8641 - volt)/0.0117 #ボルトから温度への変換の式
 print "%d deg/C" %(temp) #摂氏表示
else:
 print "I2C error"

温度への変換式はICのデータシートに記載されている−10℃〜65℃における推奨式を元にしています。
上記スクリプトをsudo python ファイル名.py で実行します。
温度センサーの値を読み取った結果がコンソールに表示されるはずです。
I2Cインターフェイス基盤にLCDを接続していれば、LCD上に温度の値が表示されるようにしてもよいでしょう。

今回行った実験では、LM19の測定値が温度湿度センサーDHT11による測定値とほぼ同じであることが確認できました。

Raspberry piを使った時報システム

I2Cインターフェイス基板とRaspberry piを使った時報システムを簡単に作ってみました。時報の音はI2Cインターフェイス基板上に実装されている圧電スピーカーを鳴らします。

python なら専用のライブラリーがあるので、音を出すための設定も楽々です。
こんな感じでプログラムを作ってみました


import time
import i2cinterface99
ii=i2cinterface99.i2cinterface99()
ii.setSound(16,2)
for var in range(0, 3):
 ii.sound(1)
 time.sleep(1)
ii.setSound(32,30)
ii.sound(1)

ライブラリi2cinterface99.pyと同じディレクトリに保存しておきます.
あとはLinuxのcrontabによって定時動作させるだけ

pi@raspberrypi ~ $ crontab -e

0 7-19 * * * python ~/alarm.py

この例では毎日7時から19時の間に毎正午時報を鳴らすことが出来ます。
piユーザーでもi2cデバイスを操作できるようにpiユーザーのサブグループにi2cグループを追加しておけばsudoから呼び出す必要はありません。

$ sudo usermod -a -G i2c pi

スクリーンショット 2013-12-15 6.55.18

MacでAVR 開発環境を構築する

AVR マイコンATtiny,ATmegaをプログラミングするのに一般的にはAtmel studioを使います。Atmel studioはWindows用の開発環境のためMacを使っては別の環境を考える必要が有ります.

ここではArduino IDEを使っての開発環境を提案します.書き込み機にはAVR ISP mkIIを使います.ATmegaまたはATtinyがターゲットになります.マイコンの書き込みのための信号線(MISO,MOSI,SCK,RESET,Vcc,GND)を引き出すのはブレッドボードでもユニバーサル基板を使ってもどちらでも結構です.28ピンDIPパッケージATmegaについてはAVR LCD Boardを使うのも良いかもしれませんね。AVR ISP mkIIのソケットに対応したピン配のヘッダピンを載せる事が可能です.
CIMG2359

xcodeを使ってC言語でプログラミングする方法もありますが、入出力のポート設定とかビット操作とか正直面倒なところが有ります.そこでプログラミングのハードルがぐっと下がるArduino言語を使ってプログラミングが出来るように環境を構築します.
Arduinoと言ってもその中身はAVR ATmegaなわけでATmegaだけでなくATtinyシリーズのプログラミングも出来てしまうのです。Arduino用に公開されているスケッチを参考にして自分だけのプログラムを作るのも簡単です。とことん小型化するのならATtiny13を、ポートの数はもう少し欲しいなと思えばATtiny2313を、ある程度機能を充実したいのならATmega328と言った具合に自分の使いたいチップを選ぶ事が可能です.

それではMacでAVRをArduinoでプログラミングする環境を構築しましょう。まずはMacからプログラムを書き込むためのArdudoをインストールします.Terminalを起動して下記コマンドを実行してください。MacPortsはすでにインストール済みという前提です。

MacBook:~ user$ sudo port install git-core libusb avrdude

無事インストールが出来ていれば 
MacBook:~ user$ which avrdude
のコマンドを実行すると
/opt/local/bin/avrdude
と返ってくるはずです。

これでUSBに接続するAVR ISP mkIIが使えるようになります.
OS Xの以前のバージョンSnow Leopard のころはUSBにISP mkIIを接続するだけで他のドライバーを必要とせず使えていたのですが、最新のOS XバージョンであるMavericks ではavrdudeが必要となるようです.

次にArduino IDEをインストールします.Arduino公式サイトからダウンロード&インストールします.ここで注意が必要なのが最新バージョンではなく0.2xのバージョンを使う事です。ArduinoさいとのDownloadページから行くと最新バージョンのダウンロードを紹介されます(2013.12.15時点での最新バージョンは1.0.5です)。ページの下の方に行くとちょっと分かりにくいのですが、以前のバージョンのダウンロードへのリンクが見つかります.
Previous IDE Versions
そこで002xのバージョンをダウンロードします.当方は0022で動作確認しました。

最新バージョンと旧バージョンは同じMacに上書きされませんので、必要に応じてバージョンの使い分けも可能です。
旧バージョンを立ち上げるたびに、新しいバージョンへのアップデートを促されますがそれは無視します。
スクリーンショット 2013-12-15 6.54.09
Arduinoのターゲット設定ファイルを確認します。これはArduino UNOやLeonardoといったボードごとまたはATmega328やATtiny2313といったチップごとの固有の設定を記述しています.動作クロック、プログラムの最大サイズ、チップのフューズビットの設定などが書かれています.実際に接続するターゲットデバイスまたはチップとこの設定が異なるとうまく書き込むことができません.

設定ファイルは /Users//Documents/Arduino の中のatmega,atmega64,attinyのそれぞれの中にboards.txtがありそこに記述されています。ターゲットがATmega328だとしたら、atmegaフォルダ内のboards.txtを開くと
avr328p.name= ATmega328P / Int.8MHz
から始まる設定が見つかるはずです.もし”#”でコメントアウトされていたら”#”を削除して有効にしてください。逆に使わない設定はコメントアウトする事でIDEで表示されなくする事も出来ます。
スクリーンショット 2013-12-15 6.55.18
ここで示される”ATmega328P / Int.8MHz”がArduinoIDEのTools>Boardで表示される名前になります.具体的な設定はそれ以降に書かれます.各項目は次のようになります.

  • vr168p.upload.maximum_size=16384
  • 書き込めるプログラムの上限サイズになります.チップごとに決まっています.

  • avr168p.bootloader.low_fuses=0xe2
  • フューズビットを書き換える事でチップの動作を細かく設定します.チップごとに内容が異なりますので詳しくはターゲットとするチップのリファレンスを参照してください.

  • avr168p.bootloader.high_fuses=0xdd
  • フューズビットを書き換える事でチップの動作を細かく設定します.チップごとに内容が異なりますので詳しくはターゲットとするチップのリファレンスを参照してください.

  • avr168p.bootloader.extended_fuses=0×07
  • フューズビットを書き換える事でチップの動作を細かく設定します.チップごとに内容が異なりますので詳しくはターゲットとするチップのリファレンスを参照してください.

  • avr168p.bootloader.path=dummy
  • これは変更する事は無いでしょう

  • avr168p.bootloader.file=dummy.hex
  • これは変更する事は無いでしょう

  • avr168p.bootloader.unlock_bits=0x3F
  • これは変更する事は無いでしょう

  • avr168p.bootloader.lock_bits=0x3F
  • これは変更する事は無いでしょう

  • avr168p.build.mcu=atmega168
  • これは変更する事は無いでしょう

  • avr168p.build.f_cpu=8000000L
  • 動作クロックを宣言しています。実際にチップが動いているクロック速度とここでの宣言が異なっているとDelay関数などの時間制御でずれが生じます。

  • avr168p.build.core=arduino:arduino
  • これは変更する事は無いでしょう

  • avr168p.build.variant=atmega_int
  • これは変更する事は無いでしょう

ターゲットがATtinyシリーズの場合も同様にattinyフォルダ内のboards.txtファイルの中で対象とするチップ設定が有効になっているか確認します.

これでAVRマイコンへArduino言語でプログラミングする環境は出来上がりです.Arduino IDEを使ってプログラミングし、チップに書き込む際はTools>Boardからターゲットのチップを選択、Uploadボタンを押します.プログラムに間違えが無く、ISPおよびチップとの接続が問題なければ無事書き込めるはずです.
書き込みエラーになる原因の一つにチップ側への給電を忘れている事が有ります.ISP mkIIへはUSB経由で給電されます。ターゲットのチップは別の電源で給電する必要が有ります。このときの電圧はUSB電圧と同じでなくても構いません。ターゲットを動かすことを想定した電圧(例えば3.3V)でも構いません.チップの動作電圧の範囲で給電しましょう。

ここではMacからAVR ISP mkIIを介してAVRチップへArduino IDEでプログラミングする手法とその環境に付いて説明しましたが、同様のことはWindowsでも可能です。Atmel studioは難しいな、ArduinoIDEを使いたいと思った方はWindowsでも是非トライしてみてください.

CIMG2359

AVR LCDボードのコスト比較

AVR LCDボードとArduinoボードを使った場合とのコスト比較を行いました。

最小限の構成(クロックはマイコン内蔵発振回路を使用)ではAVR評価ボードは1280円となり大変安いことがわかります。これをベースに必要な機能を追加することになります。プログラムのアップロードにはISPが必要になります。ATMEL純正プログラマーのAVR ISPmkIIは実売3,000円であり安心して使うことが出来ます。一台あれば使いまわすことが出来便利です。もちろんArduinoIDEとの組み合わせでも使えます。複数のマイコンを使った制御を行う場合、何種類ものプロトタイプを行う場合にはコストをセーブすることが出来ます。

Arduinoボードを使った場合シリアルUSB変換、レギュレーター、外部発振子搭載などがされています。アプリケーションによっては必ずしも必要でない機能です。一台目の学習用としては大変重宝しますが、何台も作る場合には若干高めのコストが難点になります。LCDとの接続を簡単にしたシールドもありますが、モジュール単体に比べると高くなります。
LCD表示は利用する機会が多いでしょう。コネクター接続だけでマイコンとの接続が済んでしまうAVR LCD評価ボードを使うととても便利です。
評価ボードについて

2台目以降の学習用、プロトタイプ、製品への搭載などに使えます。