一、继电器的基础知识 

参考: Easy EDA #学习笔记03# |3C-GO继电器驱动电路Realay

arduino uno开发板 altiumdesigner arduino UNO开发板智能灌溉接线图_看门狗

二、电路连接

D13-----------INT(继电器)

D6-----------DO(土壤湿度传感器)

A5----------- AO(土壤湿度传感器)

GND-----------GND

VCC-----------VCC

Arduino Nano 与 继电器 土壤湿度传感器、3V水泵连接的电路图如下:

arduino uno开发板 altiumdesigner arduino UNO开发板智能灌溉接线图_arduino_02

 

arduino uno开发板 altiumdesigner arduino UNO开发板智能灌溉接线图_#include_03

三、参考程序

/********************************************************
 * 传感器-8
 * 有水   LOW     0
 * 无水   HIGH    1
 * 
 * 继电器-13
 * 低电平触发  LOW   0
 *
 *********************************************************/

int sensorpin = 8;//传感器引脚 有水为0;无水为1
int pumpin    = 13;//水泵引脚 低电平触发 digitalWrite(8,LOW);
int var;

void setup() {
  Serial.begin(9600);
  
  pinMode(8,INPUT);
  pinMode(13,OUTPUT);
}

void loop() {

  var = digitalRead(8);
 
  //如果传感器检测值为1表示没水;0表示有水
  if(var==HIGH)
  {
    digitalWrite(pumpin,LOW);//水泵打开
   delay(3000);//浇水的时间是3秒
    digitalWrite(pumpin,HIGH);//水泵关闭
    }
    else
    {
    digitalWrite(pumpin,HIGH);//水泵关闭

   
    }

    Serial.print("var=");
    Serial.println(var);
    int var2=digitalRead(pumpin);
    Serial.print("var2=");
    Serial.println(var2);

    delay(10000);
    //delay(3600000);//一小时扫描一次

}

实例代码2 

int sensorpin = 6;//传感器引脚 有水为0;无水为1
float pumpin = 13;//水泵引脚 低电平触发 digitalWrite(8,LOW);
int var;
int var3;

int sensorpin2 = A5;
 
void setup() {
    Serial.begin(9600);  
    pinMode(sensorpin,INPUT);
    pinMode(sensorpin2,INPUT);
    pinMode(pumpin,OUTPUT);
    digitalWrite(pumpin,HIGH);//水泵关闭
}
 
void loop() {
 
    var = digitalRead(sensorpin);     
    int var2=digitalRead(pumpin);
    var3=analogRead(sensorpin2);
     
    Serial.print("var3:");
    Serial.println(var3);
    
  //如果传感器检测值为1表示没水;0表示有水
  if(var==1&&var3>600)
  {
    Serial.print(var); 
    Serial.println("缺水状态!");
    digitalWrite(pumpin,LOW);//水泵打开
    Serial.println("水泵状态-打开");     
    delay(1000);//浇水的时间是10秒   
    digitalWrite(pumpin,HIGH);//水泵关闭
    Serial.println("水泵-关闭");   
 
    }
  else
    {
    digitalWrite(pumpin,HIGH);//水泵关闭
    Serial.print(var); 
    Serial.println("不缺水状态!");
    Serial.println("水泵-关闭");   
    } 
 
   delay(1000);//十秒钟扫描一次;
   //delay(36000000);//10小时扫描一次 
}

休眠模式、看门狗(2020/11/12)

参考资料:Arduino休眠模式和看门狗以及中断详解

/********************************************************************************
 * 名称:
 * 功能:
 * 日期:
 * 作者:Naiva
 * -----------------------
 * 传感器-8
 * 有水   LOW     0
 * 无水   HIGH    1
 * -----------------------
 * 继电器-13
 * 低电平触发  LOW   0
 *
 *******************************************************************************/
 
#include <Servo.h>
#include <avr/sleep.h>//睡眠模式头文件
#include <avr/wdt.h> //启用看门狗头文件
 
int sensorpin = 6;//传感器引脚D6 有水为0;无水为1
float pumpin = 13;//水泵引脚 低电平触发 digitalWrite(8,LOW);
int var;
int var3; 
int sensorpin2 = A5;//传感器引脚A5
void Sensor_();//函数声明

int data = 0;
ISR(WDT_vect)
{
  //看门狗唤醒执行函数
  data++;
}

void setup() {
  Serial.begin(9600);  
  pinMode(sensorpin,INPUT);
  pinMode(sensorpin2,INPUT);
  pinMode(pumpin,OUTPUT);
  digitalWrite(pumpin,HIGH);//水泵关闭

  set_sleep_mode(SLEEP_MODE_PWR_DOWN); //设置休眠模式。
  sleep_enable(); //开启休眠功能。
  //ACSR |=_BV(ACD);//关掉ACD,据说很省电。不知道唤醒以后要不要重新开,怎么开?
  //ADCSRA=0;//关掉ADC,据说很省电。不知道唤醒以后要不要重新开,怎么开?
  //按照官方解释,sleep_enable()最好写在中断(attachInterrupt())前,防止中断在开始休眠前就提前释放而造成休眠后无法唤醒。
  //开始设置看门狗中断,用来唤醒。   
  MCUSR &= ~(1<<WDRF);
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  WDTCSR = 1<<WDP1 | 1<<WDP2;
  WDTCSR |= _BV(WDIE); 
  
}
 
void loop() {
  
  //通电检测一次
  Sensor_();//函数调用
  delay(50);
  
  if (data>=3600)//1小时之后,执行检测,可更改数值改变检测时间
  {
    Sensor_();//函数调用   
    data=0;
  }
  sleep_cpu();//进入休眠状态,从此处开始进入休眠。这里不需要喂狗。目的就是等狗超时后执行唤醒函数。 
}

void Sensor_()
{
    var = digitalRead(sensorpin); //土壤湿度传感器    
    int var2=digitalRead(pumpin);//水泵
    var3=analogRead(sensorpin2);
     
    Serial.print("var3:");
    Serial.println(var3);
    
  //如果传感器检测值为1表示没水;0表示有水
  if(var==1&&var3>600)
  {
    Serial.print(var); 
    Serial.println("缺水状态!");
    digitalWrite(pumpin,LOW);//水泵打开
    Serial.println("水泵状态-打开");     
    delay(1000);//浇水的时间是10秒   
    digitalWrite(pumpin,HIGH);//水泵关闭
    Serial.println("水泵-关闭");  
 
    }
    else
    {
    digitalWrite(pumpin,HIGH);//水泵关闭
    Serial.print(var); 
    Serial.println("不缺水状态!");
    Serial.println("水泵-关闭");
   
    }
 }

 

arduino uno开发板 altiumdesigner arduino UNO开发板智能灌溉接线图_#include_04