基于Arduino设计一个简单的农业自动装置

设计一个简单的农业自动装置

1)每隔1秒钟,采集土壤湿度传感器和温湿度传感器数据。

2} 在串口显示当前土壤湿度、当前温度、当前湿度显示。设计好显示格式。

3)根据数据判断。是否要浇水?

 判定条件土壤湿度数据低于80或温度高于50湿度高于60。

   浇水时:1·、舵机旋转135度。代表水管阀门打开。

                2、蜂鸣器鸣叫。代表正在浇水状态。

不浇水时:1·、舵机旋转0度。代表水管阀门关闭。

                2、蜂鸣器关闭。代表正在不浇水状态。

/内部中断--定时中断实验/
#include <FlexiTimer2.h> //调用中断库
const int led_pin = 7; //设定LED使用13管腿

void flash() { //中断服务程序
static boolean output = HIGH;
digitalWrite(led_pin, output);
output = !output;
}

void setup(){
pinMode(led_pin, OUTPUT);
FlexiTimer2::set(500, flash); //中断设定: 500毫秒调用flash中断服务程序
FlexiTimer2::start(); //中断开始
}
void loop(){
}

/*舵机实验 */
#include <Servo.h>//调用舵机库。
Servo servo1; // 定义舵机名 1

void setup()
{
servo1.attach(8); //定义舵机控制口
Serial.begin(9600); //设置波特率
Serial.println("Ready");
}
void loop()
{

 servo1.write(150); //如果数据后带 a,则表示是 servo1 的数据,比如串口发送 85a
 Serial.println(servo1.read());

}

/半数字温湿度传感器实验/
#include <dht11.h>//调用温湿度传感器库
dht11 DHT11; //命名库的别买
#define DHT11PIN 7 //定义传感器用7号腿
void setup()
{
Serial.begin(9600);//定义串口数据速率
}

void loop()
{
int chk = DHT11.read(DHT11PIN); //读取传感器数据。(是混合数据。无法分辨温度和湿度。)

Serial.print("温度: "); //从串口发送字符串
Serial.println((float)DHT11.temperature, 2); //从串口发送温度数据并换行。
Serial.print("湿度: "); //从串口发送字符串
Serial.println((float)DHT11.humidity, 2); //从串口发送湿度并换行。
Serial.println("一排星号");
delay (2000);//延时一秒钟。
}

/土壤湿度,蜂鸣器实验/
int so=A1; //设定土壤湿度传感器用模拟腿1(用模拟腿的时候这一步可以不设定。)
int buzzer = 3; //设定蜂鸣器用数字3

void setup() {
Serial.begin(9600); // 设置波特率
pinMode(buzzer, OUTPUT);}//设定蜂鸣器为输出

void loop() {
int a=analogRead(so);//读取土壤湿度传感器数据
if (a>80){
digitalWrite(buzzer, LOW); //发声音
delay(100);
digitalWrite(buzzer, HIGH);
}

Serial.println("一排星号");
Serial.print("土壤湿度: "); // 通过串口向计算机输出信息
Serial.println(a);
delay(1000); // 加一些延时,输出速度过快会可能会卡住串口监视器
digitalWrite(buzzer, HIGH);
}

安装了Dht11 FlexiTimer2这两个拓展库
应该是需要上面几个程序的简单组合,但本人尝试了好多次仍有错误
希望能给出一个正确的组合
#include <FlexiTimer2.h> //调用中断库
#include <Servo.h>//调用舵机库。
Servo servo1; // 定义舵机名 1
int a;//湿度
int b;//温度
int so=A1; //设定土壤湿度传感器用模拟腿1(用模拟腿的时候这一步可以不设定。)
int so2=A2; //设定土壤温度传感器用模拟腿1(用模拟腿的时候这一步可以不设定。)
int buzzer = A3; //设定蜂鸣器用数字3

void flash() { //中断服务程序
  a=analogRead(so);//读取土壤湿度传感器数据
  b=analogRead(so2);//读取土壤湿度传感器数据
  String str="temp is " + String(a) +" wet is " +String(b);
  Serial.println(str);
}

void setup(){

FlexiTimer2::set(500, flash); //中断设定: 500毫秒调用flash中断服务程序
FlexiTimer2::start(); //中断开始

pinMode(buzzer, OUTPUT);//设定蜂鸣器为输出
pinMode(so, INPUT);//设定蜂鸣器为输出
pinMode(so2, INPUT);//设定蜂鸣器为输出
servo1.attach(8); //定义舵机控制口

Serial.begin(9600); //设置波特率
Serial.println("Ready");
}

void loop(){
    if(a<80 || b>50){
      servo1.write(150); //舵机旋转135
      digitalWrite(buzzer, LOW); //发声音(有源蜂鸣器,注意接法)
    }
    else{
      servo1.write(0); //舵机旋转0
      digitalWrite(buzzer, HIGH);//关声音(有源蜂鸣器)
    }

}