Pythonfools 2022-05-18 19:04 采纳率: 100%
浏览 72
已结题

基于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这两个拓展库
应该是需要上面几个程序的简单组合,但本人尝试了好多次仍有错误
希望能给出一个正确的组合
  • 写回答

1条回答 默认 最新

  • soar3033 2022-05-18 20:22
    关注
    #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);//关声音(有源蜂鸣器)
        }
    
    }
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月27日
  • 已采纳回答 5月19日
  • 创建了问题 5月18日