198845 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

何でもヲ屋ジ

何でもヲ屋ジ

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

キーワードサーチ

▼キーワード検索

プロフィール

オドリー南の島

オドリー南の島

フリーページ

2009年09月03日
XML
カテゴリ:マイクロチップ
反省点
(1)アナログポートに接続する温度センサは精度が低いので注意。I2Cなどのシリアル接続がよさげ。
(2)5Vの三端子レギュレータは、電池駆動の場合、高くとも低ドロップを使って、供給電圧を下げる。3.3Vの電池2個で駆動できるようにするとよい。
(3)発熱するレギュレータの近くにセンサを配置しない。ちなみに湿度センサは写真中のブルーの素子です。

使い方が難しいHS-15P湿度センサですが、1Khzの正弦波をトランジスタ1個で発生させて使っています。回路自体はLCDの下に隠れて見えません。
ということで、温度、湿度計をバッチ形式で胸につけられるようにするつもりでしたが、
小型であってもLCDを採用した関係で重くて、ちょっと無理。

シリアル接続の温度センサ、軽いLCD、消費電力の少ないCPUを使って、もう一度、回路から設計しなおします。


課題
(1)USB直結型のarduinoで、デバック用にシリアルプリントする方法を教えてください。

サンプルスケッチを一応紹介します。 <>は、小文字にしてください。
電圧から温度を求める式は、実装した素子にあわせて定数を変更しています。

#include <math.h>
#include <LiquidCrystal.h>

int ledPin = 13; // LED connected to digital pin 13

int ledonetmp = 9 ;
int ledonetemp = 10 ;
int ledtentmp = 11 ;
int ledtentemp = 12 ;

int analogPinin =0 ;
int analogPinout =1 ;
int analogPintemp =2 ;

int tentmp = -99 ;
int tentemp = -99;
int ten =0 ;
char tenchartmp = '?';
char tenchartemp = '?';

int onetmp = -99;
int onetemp = -99;
int one = 0;
char onechartmp = '?';
char onechartemp = '?';


static unsigned long tmp;
int temp;
long wtime = 0 ;

LiquidCrystal lcd(2,3, 4, 5, 6, 7, 8);


unsigned int measurement(unsigned short channel)
{
unsigned int ad, max, min, cnt;
//
analogReference(INTERNAL) ;
ad = 0;
max = 0;
min = 1024;
for (cnt = 0; cnt < 1000; cnt++) {
ad = analogRead(channel);
max = ad > max ? ad : max;
min = ad < min ? ad : min;
analogReference(EXTERNAL) ;
}
return (max - min);
}


unsigned int tempm(unsigned short channel)
{

delay(100);
unsigned int cnt;
unsigned long ad;
//
ad = 0;
for (cnt = 0; cnt < 100; cnt++) {
ad = analogRead(channel) + ad ;
// Serial.println(analogRead(channel));
delay(5);
}


ad = ad /100;
Serial.print(ad);
Serial.print(" ");
return (ad);
}


void setup() // run once, when the sketch starts
{
analogReference(EXTERNAL) ;
Serial.begin(9600); // シリアル通信の初期化
lcd.print("Designed by Odrie");
lcd.setCursor(0, 1) ;
lcd.print(" Minaminoshima");
pinMode(ledonetmp, OUTPUT);
pinMode(ledonetemp, OUTPUT);
pinMode(ledtentmp, OUTPUT);
pinMode(ledtentemp, OUTPUT);
}

void loop() // run over and over again
{
delay(1000);
int val1 = 0;
int val2 = 0;
val1 = measurement(analogPinin); // アナログピンを読み取る
val2 = measurement(analogPinout);
// val2 = val1 / val2 ;
//lcd.clear();
//lcd.setCursor(0, 0) ;
// lcd.print(val1 ); // デバグ用に送信
// lcd.print(" ");
// lcd.setCursor(0, 1) ;
// lcd.print(val2 );

tmp = val2;
tmp *= 1000;
tmp /= val1;

Serial.print(" ");
Serial.print(tmp );
Serial.print(" ");
if (tmp <= 17) {
Serial.print("90%");
}
else if (tmp <= 35) {
Serial.print("80%");
}
else if (tmp <= 90) {
Serial.print("70%");
}
else if (tmp <= 230) {
Serial.print("60%");
}
else if (tmp <= 600) {
Serial.print("50%");
}
else if (tmp <= 2200) {
Serial.print("40%");
}
else if (tmp <= 9000) {
Serial.print("30%");
}
else if (tmp <= 80000) {
Serial.print("20%");
}
else Serial.print("10%");

tmp = val2;
tmp *= 1000000;
tmp /= val1;
int Td = 30;


Serial.print(tmp);
Serial.print(" ");
//Td = ((( 0.958 / 1024.0 ) * tempm(analogPintemp)) - 0.424 ) / 0.00625 ;
Td = ((( 2.42 / 1024.0 ) * tempm(analogPintemp)) - 0.433 ) / 0.00625 ;

temp =Td;

Serial.print(Td);
Serial.print(" ");
tmp = tmp*5.1552*exp(-0.0644*Td);
tmp=pow(10,(log10(tmp)-18.48)/(-7.8282) );

Serial.println(tmp);

wtime=millis() / 60000;
Serial.println(wtime);

if (wtime > one ) {
one = wtime ;
onetmp = tmp;
onetemp = temp;
}

if ( onetmp < tmp ) {
onechartmp = '+' ;
digitalWrite(ledonetmp, HIGH);
}
else if ( onetmp > tmp ) {
onechartmp = '-' ;
digitalWrite(ledonetmp, LOW);
}
else {
digitalWrite(ledonetmp, LOW);
onechartmp = '=' ;
}

if ( onetemp < temp ) {
onechartemp = '+' ;
digitalWrite(ledonetemp, HIGH);
}
else if ( onetemp > temp ) {
onechartemp = '-' ;
digitalWrite(ledonetemp, LOW);
}
else {
onechartemp = '=' ;
digitalWrite(ledonetemp, LOW);
}

// *******

wtime=millis() / 600000;
if (wtime > ten ) {
ten = wtime ;
tentmp = tmp;
tentemp = temp;
}


if ( tentmp < tmp ) {
tenchartmp = '+' ;
digitalWrite(ledtentmp, HIGH);
}
else if ( tentmp > tmp ) {
tenchartmp = '-' ;
digitalWrite(ledtentmp, LOW);
}
else {
tenchartmp = '=' ;
digitalWrite(ledtentmp, LOW);
}

if ( tentemp < temp ) {
tenchartemp = '+' ;
digitalWrite(ledtentemp, HIGH);
}
else if ( tentemp > temp ) {
tenchartemp = '-' ;
digitalWrite(ledtentemp, LOW);
}
else {
digitalWrite(ledtentemp, LOW);
tenchartemp = '=' ;
}


delay(1000);

lcd.clear();
lcd.setCursor(0, 0) ;
lcd.print("Humidity: ");
lcd.print(tmp);
lcd.print("% ");
lcd.print(onechartmp);
lcd.print(tenchartmp);
lcd.setCursor(0, 1) ;
lcd.print("Tempe. : ");
lcd.print(Td);
lcd.print("c ");
lcd.print(onechartemp);
lcd.print(tenchartemp);

}





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2009年09月03日 22時47分54秒
コメント(0) | コメントを書く
[マイクロチップ] カテゴリの最新記事


バックナンバー

・2024年06月
・2024年05月
・2024年04月
・2024年03月
・2024年02月

カテゴリ

カレンダー

お気に入りブログ

コメント新着

burarigo@ Re:品不足で、普段食わないものを買って食べて、(03/18) そうなりそうです。冷凍庫に眠っていた菓…
mokomokono@ はじめまして オドリー南の島さんみたいにはっきり意見…
angelsatomi@ Re:マドンナ madonna の miles away の 和訳(07/18) はぁ~ あの歌詞ってそんな内容だったん…

ニューストピックス


© Rakuten Group, Inc.