一、继电器的基础知识
参考: Easy EDA #学习笔记03# |3C-GO继电器驱动电路Realay
二、电路连接
D13-----------INT(继电器)
D6-----------DO(土壤湿度传感器)
A5----------- AO(土壤湿度传感器)
GND-----------GND
VCC-----------VCC
Arduino Nano 与 继电器 土壤湿度传感器、3V水泵连接的电路图如下:
三、参考程序
/********************************************************
* 传感器-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)
/********************************************************************************
* 名称:
* 功能:
* 日期:
* 作者: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("水泵-关闭");
}
}
划重点 2025升级款
《开源!ESP32土壤环境监测+自动浇灌一体化方案图形化编程(附完整项目文件)》