RaspberryPi和Arduino控制温室温度

树莓派给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

green-house

ENDxml