■■ おしゃべり お天気センサー 「PIC 18F452」■■
- 概要 温度・湿度・気圧計・通信機能(RS232C)・音声合成・天気予報・温度湿度タイマー制御
-
前回に製作しました’お天気センサー’を基本にしてアップグレードしました。センサーは温度・湿度・気圧・高度・時計・無線通信機能(RS232C)
お天気予報・不快指数・結露温度・体感温度・温度/湿度測定・時計タイマー機能(月、週、時間)と機能強化しました。
通信機能を使いPCに1分間隔で温度・湿度・気圧のデーターを収集できます。
今回の製作目玉は音声合成ICを使って温度・湿度・気圧・標高・月・時計・日時・週を読み上げます。また、各モードも音声ガイドします。
温度・湿度データーを使って、目的値以上又は目的以下になるとONにする制御機能です(LED表示、音声ガイドします)。
この機能で自家菜園の自動水まきとか自動洗濯物取り込み装置への応用も可能になるかも!!
天気予報はLEDで(赤=晴れ、白=曇り、青=雨、赤白=晴れのち曇り)と表示して音声ガイドします。
不快指数は100人中のパーセントで表示、結露温表示、体感温度は文字表示と音声ガイドします。
タイマー機能は月動作、週動作、時間動作を設定後は繰り返し動作します。 また音声時計機能は1分間隔で音声ガイドします。
手動で任意に音声ガイドします。
制作した装置の機能と表路方法を下記に書いておきます。
機能詳細(全てリモコン制御) デモ音声
- All Data Display.(全機能測定表示)
-
気温測定 00.0℃(音声ガイド有り)
湿度測定 00.0%RH(音声ガイド有り)
気圧測定 0000hpa(音声ガイド有り)
時計表示 00:00:00(音声ガイド有り)
年月日表示2000/00/00(音声ガイド有り)
曜日表示 SUN,MON,TUE,WED,THU,FRI,SAT(音声ガイド有り)
無線を使ったデーター通信機能(RS232C通信:2400、8、無し、1)
標高測定 000.0m(音声ガイド有り)
- Put Time new.(時計・日付データー入力)
-
時分秒データセット(音声ガイド有り)
日付け・週データセット(音声ガイド有り)
- The measurement.(温度・湿度で測定制御)
-
測定項目選択 温度か湿度を設定(音声ガイド有り)
目的データー入力 目的より大きい/小さい設定(音声ガイド有り)
測定開始(1分間ごとに音声ガイド・ON=I/O出力 LED表示(赤・青))
- Dew . Discomfort.(不快指数・結露温度・体感温度測定表示)
-
不快指数 00%(音声ガイド有り)
結露測定 00.0(音声ガイド有り)
体感温度 文字で表示(音声ガイド有り)
気温表示 00.0℃(音声ガイド有り)
湿度表示 00.0%RH(音声ガイド有り)
- Weather forecast.(天気予報)
-
予報更新回数 00(24H)
気温表示 00.0℃(音声ガイド有り)
湿度表示 00.0%RH(音声ガイド有り)
天気予報 文字表示(音声ガイド有り
気圧測定 0000hpa(音声ガイド有り)
時計表示 00:00
- Timer mode.(月・日付け・週・時間タイマー・おしゃべり時計)
-
Timer mode [1,2] か Talk Time.. [4]の選択
タイマーセット(月・日付け・週・時間データー入力)
タイマースタート(音声ガイド有り・ON=I/O出力 LED表示(赤・青)以後繰り返し)
おしゃべり時計(音声ガイド有り・1分間ごとに音声ガイド)
タイマーリセット(音声ガイド有り)
- Setting the flag.(機能設定)
-
標高表示入力 表示する/しない
LCD時計表示 6桁/4桁設定
1-6の機能には手動音声ガイド機能有り。(リモコン制御)
|
|
■■おしゃべり お天気センサー基板紹介■■
 |
- 基板は3枚構成
- 今回、制作をしたおしゃべり お天気センサーは3枚の基板に分かれます。メイン基板(上)・音声合成/受信基板(中)・送信基板(下)
で構成しました。
操作もリモコン(赤外線センサー)で全て行います。圧力センサーはMPL115A1使用大気圧センサーモジュール(I2C)
を使用して測定制度をあげています。湿度・温度は前回と同じです。今回の特徴は音声合成ICを使用したおしゃべり機能です。
各IC間の通信方法はI2C方式を使用しています。
- 測定範囲 温度 0-50℃(+-2℃)
- 測定範囲 湿度 20-90%RH(+-5%)
- 測定範囲 気圧 50kPa~115kPa
(精度:±1kPa)
- 無線通信 2400、8、無し、1
- 赤外線リモコン 4ch
- 温度湿度センサーDHT11
- 圧力センサー、MPL115A1使用大気圧センサーモジュール(I2C)
- 音声合成LSI ATP3011F4-PU(かわいい系の女声)
- 時計モジュール、アラーム機能、タイマー機能、周波数出力機能
- 送信モジュール、ASK/OOK、動作周波数:315MHz、通信距離:50-120米
- 受信モジュール高感度:-107dBm、・通信距離:300-500米(目安)
- 赤外線リモコンのエンコーダIC PT2262-IR
- リモコンのデコーダIC PT2272-L4
|
|
■■PICマイコン PIC18F452-I/P■■
 |
- PIC18F452-I/P概要
- ハイパフォーマンスエンハンスドフラッシュマイクロコントローラー
・10ビットA/D・ハードウェア乗算器内蔵
- 動作周波数:DC~40MHz
- ハードウェア乗算器:8x8ビット
- プログラムメモリ:16Kバイト
- RAM:1536バイト
- EEPROM:256バイト
- タイマーx4ch(16ビットx3 8ビットx1)
- CCPモジュールx2
- MSSP・USART・PSP
- A/Dコンバータ:10ビットx5ch
|
|
■■MPL115A1使用大気圧センサーモジュール■■
 |
- MPL115A1使用大気圧センサーモジュール概要
- Miniature I2C Digital Barometer.
- 使いやすい6ピンDIPパッケージ
- freescaleの超小型大気圧センサーを使いやすいDIPモジュール
- I2Cインターフェースでデータを出力します。
- 電源電圧:DC3.3V
- 測定範囲:50kPa~115kPa
- 分解能:0.15kPa
- 精度:±1kPa
- 基板寸法:10.16x10.16mm
- (動作範囲:DC2.375V~DC5.5V)
|
|
■■デジタル温度湿度センサー「DHT11」■■
 |
- DHT11概要
- DHT11は湿度・温度測定、通信機能を搭載した温度湿度センサーです。また、出力校正済み
で無調整で使用することが可能です。センサーの構成は温度測定にはNTCサーミスタ、湿度測定に
高分子膜湿度センサーを使用しています。
- 測定範囲 温度 0-50℃(+-2℃)
- 測定範囲 湿度 20-90%RH(+-5%)
- 相対湿度及び湿度出力
- 校正済みデジタル出力
- 少ない部品校正・長距離伝送
- 低消費電力
>
- 4端子(VDD,DATA,NC,GND)
- 上位機種DH21と交換
|
|
■■Real Time Clock Module RTC-8564JE/NB■■
 |
- リアルタイムクロック(RTC)モジュール概要
- セイコーのリアルタイムクロックIC(RTC-8564NB)を使ったクロックモジュールです。
★動作電圧:1.8V~5V
★アラーム機能、タイマー機能、周波数出力機能
★消費電流:330nA(@5V、非アクセス時)
- I2Cインターフェース(2線式)でPICやH8などと通信可能です。
- 簡単に正確な時刻を得られます。時間を計時するアプリケーションに最適
- IC内に高精度クリスタルが内蔵されています。
- パーツは全て実装済み。8ピンDIPのICとしてお使いになれます
- INT割り込み用のLED付
|
|
■■315MHz送信・受信モジュール■■
 |
- 微弱電波を使用したデータ伝送モジュール概要
-
遠隔リモコン、モデム、その他の電子機器のリモートコントロール及びコンピューターのデータ通信のように
一定のデータまたは制御信号を無線伝送方式で送信・受信を出来るようにしてくれる無線機用モジュールです。
周波数帯が異なるため、無線LANや無線インターネットなどのホームネットワークとして使用されている2.4GHz/5.4GHz帯への
干渉の心配がありません。
送信・受信モジュールはマイコンCPUに接続して様々な無線制御システムを構築することができます.
エンコーダ/デコーダチップを使用すればプログラミング不要で無線制御システムを作成することができます。
- 送信■
- 送信モジュールの完成品、ASK/OOK、動作周波数:315MHz、通信距離:50-120米
- 動作電流:40mA以下(@12V)、9mA以下(@3V)
- 最大伝送速度:10Kbps
- 動作電源:3-12V
- 外形寸法:16.0×10.5×11.5mm、
- 受信■
- 構造が最もシンプルな高感度ASK式315MHz帯無線受信モジュール、電源を入れてすぐ使用できる、AGC内蔵、動作周波数:315MHz。
- 高感度:-107dBm、・通信距離:300-500米(目安)
- 動作電源:3.3-5.0VDC・出力信号:CMOSレベル
- 動作電流:2.5-2.7mA・バンド幅:200KHz
- 動作温度:-30℃-85℃
- 外形寸法:30.0x8.5x5.0mm
|
|
■■音声合成LSI ATP3011F4-PU(かわいい系の女声)■■
 |
- 音声合成LSI ATP3011F4-PU概要
-
Atmel ATmega328(P)(I-03142)に音声合成エンジンを搭載した
ワンチップ音声合成LSIです。
ホストからシリアル通信を介してデータを送ることによって、任意の音声をリアルタイムに
発声させることができます。また内部の不揮発メモリ(EEPROM)にデータを保存して、
ホスト無しでフレーズを発声させることができます(スタンドアローンモード)。
- 動作電圧:2.5V~5.5V
- 消費電流:3.5mA(発声時)
- ベースチップ:Atmel ATmega328P)
- 音声合成コア:AquesTalk pico
- 入力データ:ローマ字音声記号列(ASCII)
- 出力:8KHzFS PCM 8bitPWM出力
- インターフェース:UART/I2C/SPI
- プリセットメッセージ:15メッセージ
- 動作クロック:内蔵
|
|
■■赤外線リモコンのエンコーダIC(送信)■■
 |
- PT226ーIR2概要
-
赤外線リモコンエンコーダ4チャンネル...............................................
- 赤外線リモコンのエンコーダIC
- 赤外線LEDでデータ送信します。
- 動作電圧4~15V
- PTC製
|
|
■■赤外線リモコンのデコーダIC(受信)■■
 |
- PT2272-M4概要
-
赤外線リモコンデコーダ4チャンネル...............................................
- 赤外線リモコンのデコーダIC
- 赤外線4データビット、モーメンタリィ出力
- 動作電圧4~15V
- PTC製
|
|
■■赤外線リモコン受信モジュールOSRB38C9AA■■
 |
- OSRB38C9AA概要
- メーカーカテゴリ OptoSupply Limited
PIN : Positive-Intrinsic-Negative PN接合の間に真性半導体層を設けた構造
- 電源電圧範囲:DC2.7V~DC5.5V
- 消費電流:0.9~1.5mA(無信号時)
- 中心周波数:37.9kHz
- ピーク感度波長:940nm
|
|
■■感光基板パターン。■■
|
|  |
-
<-----100mm----->
|
|
|70mm 寸法
|
|
|
[上] CPU
[右] 音声合成・受信
[左] 送信
|
|
■■音声・気圧・温度湿度・時間センサー プログラム■■
- おしゃべり お天気センサーに使うセンサーはそれぞれデーターの取得方法が違います
[1] ■デジタル温度湿度センサーは一本線(SPI)?によるシリアル通信方法
[2] ■大気圧センサーはI2C通信方法
[3] ■リアルタイムクロック(RTC)モジュールはI2C通信方法
[4] ■315MHz送信・受信モジュールはRS232C通信方法
[5] ■音声合成はI2C通信方法
◎私が使用した各センサーの通信方法を下記に書いておきます。
プログラムはFDE PIC C Compiler. V14.00Aで制作しています。
HEXファイル(音声合成IC ID:0x2E)タイプ
HEXファイル(音声合成IC ID:0x5C)タイプ
回路図3種類・キー操作図(エクセル)
基板パターン図3種類(PDF)
以上をまとめてZIPファイルでダウンロード・ここ
ベータ版に付きバグが有るかも知れませんあしからず。(全ての動作はします)
|
|
デジタル温度湿度センサー 1本線? SPIの通信方法 |
-
温度・湿度センサーは専用の通信方法でデーターを送り出しています。
データーフォーマットは8BitMSB構成で温度+湿度+パリテーの
シリアル信号でPCに送られてきます。読み取った8Bitデーターを
アスキーに変換して表示します。プログラムは読み取り時間のタイミン
グでクロックを読み取りますのでCPUクロックを変えたときには、各
プログラムのウエイトタイミングの変更が必要です。(現在のCPUク
ロック=20MHz)関数呼び出しのエラー処理は"No response"、"Checksum" Error!"
を返します。温度湿度センサーのプログラムの主要部分を下記に
抜粋しておきます。
-
|
//-----------------------------------------------------------------------------
// DHT11センサー シリアル通信 温度・湿度 プログラム
//-----------------------------------------------------------------------------
unsigned char message1[] = "00.0 C";
unsigned char message2[] = "00.0%RH";
void main(oid)
{
DHT11_main();
LCDPrintAt(9,1);
LCDString(message1);
LCDString(message2);
}
//-----------------------------------------------------------------------------
// DHT11センサー シリアル通信 温度・湿度 読み出し
// It is the temperature humidity after this
//
// 戻り値 = 1 or 0 1 = No Err 0 = Err
//-----------------------------------------------------------------------------
unsigned char
DHT11_main(void)
{
unsigned int CheckSum, DHT11_Err_frg = 0, check=0;
unsigned char T_Byte1, T_Byte2, RH_Byte1, RH_Byte2;
DHT11_StartSignal();
check = DHT11_CheckResponse();
if (!check) {
vstrcpy(message2,"No response");
}else{
RH_Byte1 = DHT11_ReadByte();
RH_Byte2 = DHT11_ReadByte();
T_Byte1 = DHT11_ReadByte();
T_Byte2 = DHT11_ReadByte();
CheckSum = DHT11_ReadByte();
//---------------------
// Check for error in Data reception
// DHT11センサー 温度・湿度 読み出し
// データーを文字列に変換
// "00.0 C RH 00.0%";
//---------------------
if (CheckSum == ((RH_Byte1 + RH_Byte2 + T_Byte1 + T_Byte2) & 0xFF)){
message1[0] = T_Byte1/10 + 48;
message1[1] = T_Byte1%10 + 48;
message1[3] = T_Byte2/10 + 48;
message1[4] = 223;
message2[0] = RH_Byte1/10 + 48;
message2[1] = RH_Byte1%10 + 48;
message2[3] = RH_Byte2/10 + 48;
DHT11_Err_frg = 1;
}else{
vstrcpy(message2,"Checksum Error!");
}
}
return DHT11_Err_frg;
}
//-----------------------------------------------------------------------------
// DHT11センサー シリアル通信 温度・湿度 読み出し
// It is the temperature humidity after this
// 20MHz専用
// 戻り値 = 無し
//-----------------------------------------------------------------------------
// -- --
// | |
// ------------------------
// <--------10mS----------><20-40uS>
//-------------------------------------
void
DHT11_StartSignal(void)
{
TR0bit = 0;
RA0bit = 0;
Wait(25); //25
RA0bit = 1;
WaitUs10(4);
TR0bit = 1;
}
//--------------------------------------
// CheckResponse シリアル 通信
//
// -- --------------
// | ||<-- !=0 ||<-- !=1
// ------------- -----
// <--80uS---> <--80uS--->
// 戻り値 = 無し
//---------------------------------------
unsigned char
DHT11_CheckResponse(void)
{
WaitUs10(0);
if (RA0bit) return 0;
while(!RA0bit);
WaitUs10(0);
if (!RA0bit) return 0;
else {
while(RA0bit);
WaitUs10(0);
if (RA0bit)
return 0;
else
return 1;
}
}
//-----------------------------------------------
// ReadByte シリアル 通信
//
// -- ---- -- ------------
// | | | | | | |
// --------- --- --------- ---
// <-50uS--><26-28uS> <--50uS--> <--70uS--->
// 戻り値 = 1 or 0
//------------------------------------------------
unsigned char
DHT11_ReadByte(void)
{
unsigned char i;
unsigned char num=0;
TR0bit = 1;
for (i=0; i<8; i++){
while(!RA0bit);
WaitUs10(4);
if (RA0bit){
num |= 1<<(7-i);
while(RA0bit);
}
}
return num;
}
MPL115A1 大気圧センサー I2Cの通信方法 |
-
大気圧センサーはI2C通信方法を使ってデータを読み取ります。
MPL115A1使用大気圧センサーのデータを見ますとID:0xC0
となっています。早々に試したところ一発で読み取れました。
私は気圧・温度データーから気圧補正データーまで一揆(16Byt)に読み取っています。
気圧・温度データと気圧補正データーを分けて読み取るとうまく読み取れませんでした。
|
//-----------------------------------------------------------------------------
// MPL115A1使用大気圧センサー プログラム
//-----------------------------------------------------------------------------
unsigned char flo_buf[12], str_buf[16];
void main(oid)
{
unsigned char tmp1;
IC8564_MPL115A2_read();
tmp1 = Baroconv();
fPrtString(flo_buf, tmp1);
itof(6);
sprintf(str_buf,"%shPa",flo_buf);
LCDPrintAt(0,0);
LCDString(str_buf);
}
//-------------------------------------------------------------------------
// I2C CPU to MPL115A2 Data Read 16Byt
//-------------------------------------------------------------------------
void IC8564_MPL115A2_read(void)
{
unsigned char address;
QuickStop();
//CPU to MPL115A2IC Read code Addres 0x60 Set
IIWrite(0b11000000,IISTART|IIACK);
IIWrite(0x12,IIACK);
IIWrite(0x01,IIACK);
Wait(4); // Henkan wait 3mS
//CPU to MPL115A2IC Read code Addres 0x60 Set
PORTC |= (1<<_SCL);
IIWrite(0b11000000,IISTART|IIACK);
IIWrite(0x00,IIACK);
//CPU to MPL115A2IC Read code Addres 0x61 Set
PORTC |= (1<<_SCL);
IIWrite(0b11000001,IISTART|IIACK);
//CPU to MPL115A2 Data Read 16Byt
for (address = 0; address < 17; address++){
TRISC |= (1<<_SDA);
Read_data[address] = IIRead(IIACK);
Wait(5);
}
}
//-------------------------------------------------------------------------
// [MPL115A2]の気圧変換と係数補正 * (Tempw1 = 気圧値[XXXX.XhPa]
// ※整数値で下1桁が小数点以下)
// I2C通信
// char *Bdata = データ格納バッファ[12]
// 戻り値 = 計算結果・気圧変換
//-------------------------------------------------------------------------
float
Baroconv(void)
{
unsigned int padc;
unsigned int tadc;
float a0, b1, b2, c12, c11, c22, f, decPcomp;
unsigned int h , l;
padc =(unsigned int)(Read_data[0]);
padc = padc << 8;
padc +=(unsigned int)(Read_data[1]);
padc = padc >> 6;
//-------------------
tadc = (unsigned int)(Read_data[2]);
tadc = tadc << 8;
tadc +=(unsigned int)(Read_data[3]);
tadc = tadc >> 6;
// ??---------------------------------
h = (Read_data[4]);
l = (Read_data[5]);
a0 = (float)(h << 5) + (l >> 3)+ (l & 0x07) / 8.0;
// ??---------------------------------
h = (Read_data[6]);
l = (Read_data[7]);
b1 = ((h & 0x1F) * 0x100 );
b1 = b1 + l;
b1 = ( b1 / 8192.0 ) - 3.0;
// ??----------------------------------
h = (Read_data[8]);
l = (Read_data[9]);
b2 = (( h - 0x80) << 8 );
b2 = (b2 + l );
b2 = (b2 / 16384.0 ) - 2;
// ???---------------------------------
h = (Read_data[10]);
l = (Read_data[11]);
c12 = ( h * 0x100 );
c12 = ( c12 + l);
c12 = ( c12 / 16777216.0);
// Pcomp------------------------------------------
f = a0 + ( b1 + c12 * tadc ) * padc + b2 * tadc;
decPcomp = f * 65000;
decPcomp = decPcomp + 51150000;
decPcomp = decPcomp / 102300;
return decPcomp;
}
//-----------------------------------------------------------------------------
// 小数点数値を文字列に変換する。
// #include をインクルードする。
// fPrtString(*buf, ターゲット) floatを文字列にする.
// itof (*buf, 桁数)
// 文字列バッファを返す
//
// char *flo_buf = バッファ文字列
// char si = 桁数
// 戻り値 = バッファ文字列
//-----------------------------------------------------------------------------
void
itof(unsigned char si)
{
unsigned char i, k, a, dc;
if (flo_buf[9] != 'e' && flo_buf[9] != '-')
flo_buf[10] = flo_buf[9];
a = flo_buf[10] - 0x30;
dc = flo_buf[9];
if (dc != 'e' && dc != '-'){
if( a != 0){
for(i=0;i<7;i++)
flo_buf[i+1] = flo_buf[i+2];
for(i=8;i>a;i--)
flo_buf[i] = flo_buf[i-1];
flo_buf[a+1]='.';
}
}
if (dc == '-'){
for(i=0;i<7;i++)
flo_buf[i+1] = flo_buf[i+2];
for(k=0;kk;i--){
flo_buf[i] = flo_buf[i-1];
}
}
flo_buf[0]=0x30;
flo_buf[1]='.';
for(k=0;ka;i--)
flo_buf[i+a] = flo_buf[(i-1)+a];
flo_buf[2+a]='.';
}
flo_buf[si]=0x0;i
}
音声合成LSI ATP3011F4-PU I2Cの通信方法 |
-
音声合成LSIはRS232C、SPI、I2Cと多彩な通信方法で制御できます。
基本的にはRS232Cでの制御が一番簡単そうです。
今回はI2C通信方法でデータを読み取りました。
音声合成LSIのデーターを見ますとID:0x2E
となっていますがそのままのIDでは通信出来ませんでした??ナゼダ。。
Web検索で調べたところ0x5Cになっている物があると書いてある。
ID:を0x5Cに変更して試したところ一発で声が出ました。
|
//-----------------------------------------------------------------------------
// 音声合成LSI ATP3011F4-PU プログラム
//-----------------------------------------------------------------------------
void main(oid)
{
Vois_Write(0,0,0,0,0); //Data1,data2,data3,data4,呼び出し番号
}
//-------------------------------------------------------------------------
// I2C CPU toATP3011F4-PU IC Data Writ Max 128Byt, Onsei end ma-ku ">"
// (注意) IP Address が[0x2E]となっているがBitずれで[0x5C]に設定しないと
// 認識しない。
//-------------------------------------------------------------------------
char
TP3011F4_Vois_Write(const char *s)
{
char *q, ret;
q=s;
QuickStop(); // generate stop stata on bus
//
IIWrite(0x5C,IISTART|IIACK);
Wait(10);
while(*s){
IIWrite(*s,IIACK);
s = ++q;
}
IIWrite(0x0d,IIACK);
//IIWrite(0x0d,IIACK);
do{
//CPU to 8564IC Read code Addres 1Byt Set
Wait(10); // poringu time 12mS
PORTC |= (1<<_SCL);
IIWrite(0x5D,IISTART|IIACK);
TRISC |= (1<<_SDA);
ret = IIRead(IIACK);
}while(ret == '>') // onsei end ma-ku ">"
//Wait(50);
return ret;
}
//-------------------------------------------------------------------------
// IOnsei senntaku
// 音声を番号で選択する。
//-------------------------------------------------------------------------
void
Vois_Write(const char data_1, const char data_2, const char data_3,
const int data_0, const char sel)
{
char s;
int nisen;
switch(sel){
case 0://メインタイトル
sprintf(Read_data,"%s","to-o/ku 'ue--za-senn'sa ba--jonn.");
break;
case 1://1)オールデータデスプレイ
sprintf(Read_data,"%s","'subete/no de-ta-wo hio-uji sima/su.");
break;
case 2://2)時年月日を設定
sprintf(Read_data,"%s","jikoku 'nenn-ga-'pino 'se_tute-.");
break;
case 3://3)温度湿度を測定
sprintf(Read_data,"%s","o'ndo si'tudo;no soku/tei.");
break;
case 4://4)結露不快指数の測定
sprintf(Read_data,"%s","si'tudo fu'kai/sisu no sokutei.");
break;
case 5://5)天気予報
sprintf(Read_data,"%s","a_shitanote'nki-yo/fo/o.");
break;
case 6://6)標高LCD表示の選択
sprintf(Read_data,"%s","hyo-'ko eru-si-de-no 'se_tute-.");
break;
//--------------------------------------------
case 30://不快度は100人ちゅう--人です
sprintf(Read_data,"fu'kai'kann/wa ninn'cyu- ni'nn-de_su.",data_2);
以下省略
}
TP3011F4_Vois_Write(Read_data);
}
Real Time Clock Module RTC-8564JE/NB I2Cの通信方法 |
-
セイコーのリアルタイムクロックIC(RTC-8564NB)を使ったクロックモジュールです
I2Cインターフェース(2線式)でPICやH8などと通信可能です。簡単に正確
な時刻を得られます。時間を計時するアプリケーションに最適、
IC内に高精度クリスタルが内蔵されています。
読み取ったデーターをアスキーに変換して表示します。
INT(割り込み)用のLED付。ここのプログラムではINT(割り込み)を使用しています。
|
//-----------------------------------------------------------------------------
// RTC-8564NB RTC-8564NB プログラム
//-----------------------------------------------------------------------------
unsigned char Read_data[70];
void main(oid)
{
TimeD_Write(0,8); //書き込み
IC8564_read(); //読み出し
}
//-------------------------------------------------------------------------
// 8564IC Time Data input Binary to BCD conversion
// Alarm timer movement flag set.
//-------------------------------------------------------------------------
void
TimeD_Write(unsigned char lops, unsigned char lope)
{
unsigned char lp, fg;
//Print min,sec,hou,day,week,mon/cen,yen
//cen.yen=10 Add ac=(2-8)Time : ab=(9-14)Timer
for(lp=lops; lp < lope; lp++)
Read_data[lp] = (Read_data[lp] / 10)<<4|(Read_data[lp] % 10);
IC8564_Write(lops,lope);
}
//-------------------------------------------------------------------------
// I2C CPU to 8564IC Data Writ 10Byt con1,con2,min,sec,hou,day,week,
// mon/cen,yen,Mi/Ala,Ho/Ala/Dy/Ala
//-------------------------------------------------------------------------
void IC8564_Write(unsigned char lops, unsigned char lope)
{
unsigned char address;
Read_data[0] = 0; //cont 1 Test,0,Stop,0,Test,0,0,0
Read_data[1] = 0x13; //cont 2 0,X,0,TI/TP=1,AF,TF,AIE=1,TIE=1
QuickStop(); // generate stop stata on bus
// C individual treatment address to R/W・8564 Note address
IIWrite(0xA2,IISTART|IIACK);
IIWrite(lops,IIACK); // Note top address
//CPU to 8564IC Data Writ 10Byt con1,con2,min,sec,hou,day,week,
//mon/cen,yen,Mi/Ala,Ho/Ala/Dy/Ala
for (address = lops;address < lope; address++){
IIWrite(Read_data[address],IIACK);
Wait(20);
}
}
//-------------------------------------------------------------------------
// I2C CPU to 8564 Data Read 7Byt min,sec,hou,day,week,mon/cen,yen
//-------------------------------------------------------------------------
void IC8564_read(void)
{
unsigned char address;
QuickStop();
// C individual treatment address to R/W・8564 Note address
IIWrite(0xA2,IISTART|IIACK);
IIWrite(0x00,IIACK); // Note top address
//CPU to 8564IC Read code Addres 1Byt Set
PORTC |= (1<<_SCL);
IIWrite(0xA3,IISTART|IIACK);
//CPU to 8564 Data Read 7Byt min,sec,hou,day,week,mon/cen,yen
for (address = 0; address < 9; address++){
TRISC |= (1<<_SDA);
Read_data[address] = IIRead(IIACK);
Wait(5);
}
}
■■無線通信中!!■■
 |
- 只今通信中
- データー通信をハイパーターミナルプログラムで受信中です。
アンテナは送受信ともに10cmぐらいでテスト、それでも10m位はなれても快調にデーターが送られています。
今回RS232C通信の受信部を新しく造りました。 データは1分間隔で送信します。
|
|
|
■■気圧計、低気圧を表示■■
 |
- 気圧計
- 気象庁の発表するデーターと比較すると誤差はあるようですが、まあまあの値を表示しているようです。
低気圧接近状態を測定している様子。
測定日/2012年4月3日 当日は、春一番が吹いた
|
|
|
■■PCでデーターをグラフ表示■■
 |
- Web通信温度湿度グラフ
- 温度・湿度のデーターをグラフ表示してみました。まだ制作途中ですので気圧データーはありません。
データー収集も出来ます。(上)Web送信プログラム(下)Web受信プログラム
|
|
|
制作・企画
平成25年度 3月編集
おしゃべり お天気センサーの製作
企画制作:SAVMASA企画
(制作した結果発生した損害に対しては全て自己責任でお願いします。)
著作権はSAVMASA企画またはその記事の筆者に属します。(著作権について)
申しわけ有りませんが全ての質問対応は出来かねます。
当サイトに掲載されている記事や画像などの無断転載を禁止します。