树莓派给Aruduino供电,经过PL2303芯片USB转TTL串口通讯。检测温室的温度,若是低于19度,就加热。经过串口控制Arduino,Arduino控制继电器打开陶瓷加热灯的开关加热。 git
Arduino的代码以下:github
void setup() {
pinMode(3, OUTPUT);
Serial.begin(115200);
}
char v;
void loop() {
// read from serial,
// when got nothing, delay 1s and retry, write S to serial(Standby).
// when 30s got nothing, close heater, write C to serial(Close).
// when got H means open heater, write H to serial(Heating).
// when got C means close heater, write C to serial(Close).
v = -1;
// got nothing.
for (int i = 0; i < 30; i++) {
if (Serial.available() <= 0) {
Serial.print('S');
delay(1000);
continue;
}
v = Serial.read();
break;
}
// close when retry exceed.
if (v == -1) {
Serial.print('C');
digitalWrite(3, LOW);
return;
}
// got specified command.
if (v == 'H') {
Serial.print('H');
digitalWrite(3, HIGH);
return;
}
Serial.print('C');
digitalWrite(3, LOW);
}
若是没有明确的要加热,就不加热。经过串口指定须要加热。web
接线图以下:svg
USB转串口PL2303接线:
VCC5V,接Arduino的VIN,给Arduino供电。
GND,接Arduino的GND,供电和通讯用。
RX,接Arduino的TX,通讯用。
TX,接Arduino的RX,通讯用。oop
温度传感器DHT11接线:
VCC5V,接PI的2引脚(VCC5V)。
GND,接PI的6引脚(Ground)。
DATA,接PI的12引脚(GPIO18,GPIO_GEN1)。ui
继电器接线:
+,接Arduino的5V,Arduino给继电器供电。
-,接Arduino的GND,接地。
S,信号,接Arduino的3号数字引脚。spa
采集到温度小于预期时,经过串口给Arduino发送H指令。
代码参考:https://github.com/winlinvip/raspi-tools/blob/master/greenhouse.pycode
最后的图:regexp
ENDxml