RaspberryPi和Arduino控制温室温度

树莓派给Aruduino供电,通过PL2303芯片USB转TTL串口通信。检测温室的温度,如果低于19度,就加热。通过串口控制Arduino,Arduino控制继电器打开陶瓷加热灯的开关加热。

Arduino的代码如下:

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);
}

如果没有明确的要加热,就不加热。通过串口指定需要加热。

接线图如下:

USB转串口PL2303接线:
VCC5V,接Arduino的VIN,给Arduino供电。
GND,接Arduino的GND,供电和通信用。
RX,接Arduino的TX,通信用。
TX,接Arduino的RX,通信用。

温度传感器DHT11接线:
VCC5V,接PI的2引脚(VCC5V)。
GND,接PI的6引脚(Ground)。
DATA,接PI的12引脚(GPIO18,GPIO_GEN1)。

继电器接线:
+,接Arduino的5V,Arduino给继电器供电。
-,接Arduino的GND,接地。
S,信号,接Arduino的3号数字引脚。

采集到温度小于预期时,通过串口给Arduino发送H指令。
代码参考:https://github.com/winlinvip/raspi-tools/blob/master/greenhouse.py

最后的图:

RaspberryPi和Arduino控制温室温度_第1张图片

END

你可能感兴趣的:(RaspberryPi和Arduino控制温室温度)