カテゴリー
Arduino AVR LCD ボード使用例 Raspberry pi デバイス・モジュール

温度センサー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による測定値とほぼ同じであることが確認できました。

カテゴリー
AVR LCD ボード使用例 I2Cinterface99 Raspberry pi

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

カテゴリー
AVR LCD ボード使用例 Raspberry pi

Raspberry pi から20文字x4行LCD(SC2004)を制御する

ここではi2cInterfaceBoardを使ってRaspberry pi から20文字x4行LCD(SC2004)を制御する例を紹介します。
LCDには現在時刻の表示と外部センサー(温度湿度センサー)から読み取った値を表示します.

カテゴリー
AVR LCD ボード使用例 Product

I2Cインターフェイス基板 LCD20x4付き (キット)

概要

I2Cインターフェイス基板 LCD16x2付き(キット)が20文字x4行キャラクターディスプレイに対応しました

カテゴリー
Arduino AVR AVR LCD ボード使用例

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

  • 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でも是非トライしてみてください.