ヒーターの上で苗を育てているところ。
ヒーター自身の温度はコントロールできるけど、
苗の土の温度はコントロールできないので気温などの変化で大きく変わってしまいます。
ってことで、土の温度でヒーターの温度管理をすることに。
使用したのは
マイコンはarduino UNO R3
温度センサーは防水温度センサーDS18B20(アマゾン)
表示用液晶AQM1602_I2C (秋月、販売コード108896)
ドライバー内蔵リレーモジュール(秋月、113573)
その他、AC100のON /OFFリレー、ボタンスイッチなど汎用部品が必要です。

動作確認後、、、完成写真を取ろうとした時に、
落として液晶パネルが壊れてしまいました。
もう暖かくなってヒーターも必要ない時期、
修理するか、気に食わない部分があるので作り直すか???
それ以前に設定温度はプログラムの書き換えで対応すれば液晶パネルもボタンをいらないじゃん。
次の苗を育てる時までに決めましょ!
以下使用したプログラム
基本的には温度センサーのライブラリーにあるサンプルプログラムと液晶パネルは秋月が公開しているサンプルプログラムの寄せ集めです。
一部サブルーチンは省略しています、その部分はサンプルプロフラムを参照してください。
# include <OneWire.h>
# include <DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
# define ONE_WIRE_BUS 2
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
#include <Wire.h>
#define LCD_ADRS 0x3E
#define Relay_out 4 // Relay drive
#define Black_in 7 // Black Button switch
#define Red_in 8 // Red Button switch
char Umoji[] ="RealTemp C ";
char Dmoji[] ="Set Temp C ";
float Rtmp;
float Stmp = 30.0;
void setup(void)
{
// Start up the Temperature IC Control library
sensors.begin();
// display init
Wire.begin();
init_LCD();
//IO init
pinMode(Relay_out, OUTPUT);
pinMode(Black_in, INPUT);
pinMode(Red_in, INPUT);
digitalWrite(Relay_out,LOW); //relay OFF
}
void loop(void)
{
// ボタン情報を取り込んで設定温度を更新する
if (!digitalRead(Red_in)) Stmp += 1.0;
if (!digitalRead(Black_in)) Stmp -= 1.0;
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
sensors.requestTemperatures(); // Send the command to get temperatures
Rtmp = sensors.getTempCByIndex(0);
//液晶パネル上段に表示
dtostrf(Rtmp,-1,1,&Umoji[9]); // 浮動小数点データを文字列に変換
writeCommand(0x02); // Retern Home
for(int i = 0; i < 16; i++) {
writeData(Umoji[i]);
}
//液晶パネル下段に表示
dtostrf(Stmp,-1,1,&Dmoji[9]);
writeCommand(0x40+0x80); // SET下段ADRESS
for(int i = 0; i < 16; i++) {
writeData(Dmoji[i]);
}
// 設定温度と実測温度を比較して実測温度が低ければリーレーをONする
if (Stmp > Rtmp)
digitalWrite(Relay_out,HIGH);
else
digitalWrite(Relay_out,LOW);
delay(500);
}
最近のコメント