基于STM32的智慧农场控制系统设计

🤞🤞大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是智慧农场控制系统。

设计的详细功能见网盘中的文章《17、基于STM32的智慧农场控制系统设计》:

链接:https://pan.baidu.com/s/1uWSZX2zbZwy9sYwwnvyktQ?pwd=5132

提取码:5132

目录

1、系统功能

3、演示视频和实物

4、系统设计框图

5、软件设计流程图

6、原理图

7、主程序

8、总结


1、系统功能

本设计的题目是智慧农场,元器件采用了STM32F103C8T6作为主控,
1)传感器:DHT11来检测农村的温湿度,土壤湿度传感器来检测土壤湿度,光敏传感器用来检测光照强度,hc05蓝牙模块实现远程控制.
2)输出设备:水泵(灌溉),LED(补光),舵机(模拟施肥),风扇,蜂鸣器报警模块
3)OLED显示屏用来显示传感器数据和控制模式。
本系统的控制模式设计了3种:自动模式、手动模式,远程控制,可以随意调节模式,实现智能控制。
1、自动模式:当空气的温度大于设定阈值,打开风扇,土壤湿度小于设定阈值,打开水本灌溉,当空气的湿度大于设定阈值,蜂鸣器报警,当光照强度设定阈值,打开LED,
2、手动模式:利用按键手动控制水泵、排风扇、LED和舵机的开关,同时手机蓝牙APP也可以远程控制,并且可以调节传感器阈值。

3、演示视频和实物

基于STM32的智慧农场控制系统

4、系统设计框图

5、软件设计流程图

6、原理图

7、主程序

#include "sys.h"                //有定制的,可以联系VX:lwfw123456789
#include "delay.h"
#include "led.h"
#include "dht11.h"
#include "Serial.h"
#include "Servo.h"
/***********************************************************************************************
同学好!我们是5132单片机设计,定制单片机设计,实物和说明书均可定制,欢迎大家咨询。VX:lwfw123456789
其他项目演示视频和说明请大家移步哔哩哔哩、CSDN和公众号等。
哔哩哔哩:5132单片机设计
CSDN:    5132单片机设计
公众号:  5132单片机设计
抖音  :  5132单片机设计
小红书:  5132单片机设计
咸鱼:    5132单片机设计
************************************************************************************************/

typedef struct
{
    u8 Temp;
    u8 Humi;
    u8 TuRangShiDu;
    u8 Guang;
} Sensor;

Sensor Sensor1;
uint32_t bufe[5];           //存储传感器采集的数据
uint16_t AD0, AD2;   //存储4路ADC值
uint8_t RxData;      //蓝牙接收到的数据
uint32_t WenYu = 30;   //光照强度阈值上限
uint32_t ShiYu = 70;     //光照强度阈值下限
uint32_t TuShiYu = 40;     //光照强度阈值下限
uint32_t GuangYu = 40;
u8 temp, humi;                //存放温湿度
u8 state, state2, state2_1, state2_2, state3;       //按键状态标志
u8 t = 0;                       //传感器读取时间间隔
uint8_t KeyNum;                      //存储按键值


void shoudong()
{
    if (KeyNum == 2)        //按键
    {
        delay_ms(20);
        if (KeyNum == 2)
        {
            state2++;
            if (state2 > 1)
            {
                state2 = 0;
            }
        }
    }
    if (state2 == 1)
    {
        FengShan_ON();
    }
    if (state2 == 0)
    {
        FengShan_OFF();
    }
    if (KeyNum == 3)        //按键
    {
        delay_ms(20);
        if (KeyNum == 3)
        {
            state2_1++;
            if (state2_1 > 1)
            {
                state2_1 = 0;
            }
        }
    }
    if (state2_1 == 1)
    {
        ShuiBen_ON();
    }
    if (state2_1 == 0)
    {
        ShuiBen_OFF();
    }
    if (KeyNum == 4)        //按键
    {
        delay_ms(20);
        if (KeyNum == 4)
        {
            state2_2++;
            if (state2_2 > 1)
            {
                state2_2 = 0;
            }
        }
    }
    if (state2_2 == 1)
    {
        Servo_SetAngle(90);
    }
    if (state2_2 == 0)
    {
        Servo_SetAngle(9);
    }

    if (Serial_GetRxFlag() == 1)
    {
        RxData = Serial_GetRxData();     //蓝牙接收
        switch (RxData)
        {
        case 1:
            state2++;
            if (state2 > 1)
            {
                state2 = 0;
            }
            break;
        case 2:
            state2_1++;
            if (state2_1 > 1)
            {
                state2_1 = 0;
            }
            break;
        case 3:
            state2_2++;
            if (state2_2 > 1)
            {
                state2_2 = 0;
            }
            break;
        default:
            break;

        }
    }
}
void zhidong()
{
    if (Sensor1.TuRangShiDu < TuShiYu)
    {
        ShuiBen_ON();
    }
    else
    {
        ShuiBen_OFF();
    }

    if (Sensor1.Temp > WenYu)
    {
        FengShan_ON();
    }
    else
    {
        FengShan_OFF();
    }

    if (Sensor1.Humi > ShiYu)
    {
        Buzzer_Turn();
    }
    else
    {
        Buzzer_OFF();
    }
    if (Sensor1.Guang < GuangYu)
    {
        LED_ON();
    }
    else
    {
        LED_OFF();
    }


    if (KeyNum == 2)                          //自动模式下PB0按键控制阈值切换
    {
        delay_ms(20);
        if (KeyNum == 2)
        {
            state3++;
            if (state3 > 3)
            {
                state3 = 0;
            }
        }
    }
    if (state3 == 2)
    {
        if (KeyNum == 3)WenYu++;         //光照强度上限加
        if (KeyNum == 4)WenYu--;            //光照强度上限减
    }
    if (state3 == 3)
    {
        if (KeyNum == 3)ShiYu++;
        if (KeyNum == 4)ShiYu--;
    }
    if (state3 == 0)
    {
        if (KeyNum == 3)TuShiYu++;
        if (KeyNum == 4)TuShiYu--;
    }
    if (state3 == 1)
    {
        if (KeyNum == 3)GuangYu++;
        if (KeyNum == 4)GuangYu--;
    }
}
int main(void)
{
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    delay_init();      //延时函数初始化

    LED_Init();            //初始化与LED连接的硬件接口
    DHT11_Init();
    Buzzer_Init();             //下面为外设初始化
    OLED_Init();
    Key_Init();
    AD_Init();
    Serial_Init();   //串口1初始化
    MyRTC_Init();
    Servo_Init();     //舵机初始化,并设置舵机初始角度

    OLED_ShowChinese(2, 1, 63);
    OLED_ShowChinese(2, 2, 65);
    OLED_ShowString(2, 5, ":");

    OLED_ShowChinese(3, 1, 26);
    OLED_ShowChinese(3, 2, 28);
    OLED_ShowString(3, 5, ":");
    OLED_ShowChinese(3, 5, 27);
    OLED_ShowChinese(3, 6, 28);
    OLED_ShowString(3, 13, ":");

    OLED_ShowChinese(2, 5, 53);
    OLED_ShowChinese(2, 6, 54);
    OLED_ShowString(2, 13, ":");

    OLED_ShowString(1, 1, "XX:XX:XX");
    while (1)
    {
        MyRTC_ReadTime();    //读取时间(每一个页面都有时间显示)
        OLED_ShowNum(1, 1, MyRTC_Time[3], 2);    //时
        OLED_ShowNum(1, 4, MyRTC_Time[4], 2);    //分
        OLED_ShowNum(1, 7, MyRTC_Time[5], 2);   //秒

        OLED_ShowNum(4, 2, TuShiYu, 2);
        OLED_ShowNum(4, 6, GuangYu, 2);
        OLED_ShowNum(4, 10, WenYu, 2);
        OLED_ShowNum(4, 14, ShiYu, 2);

        if (t % 10 == 0)
        {
            DHT11_Read_Data(&Sensor1.Temp, &Sensor1.Humi);  //读取温湿度并显示在OLED上

            OLED_ShowNum(3, 6, Sensor1.Temp, 2);
            OLED_ShowNum(3, 14, Sensor1.Humi, 2);

            AD2 = AD_GetValue(ADC_Channel_2);    //土壤传感器     PA4
            if (AD2 > 4000)AD2 = 4000;
            Sensor1.TuRangShiDu = (u8)(100 - (AD2 / 40));
            OLED_ShowNum(2, 6, Sensor1.TuRangShiDu, 2);
            OLED_ShowString(2, 8, "%");

            AD0 = AD_GetValue(ADC_Channel_0);    //土壤传感器     PA4
            if (AD0 > 4000)AD0 = 4000;
            Sensor1.Guang = (u8)(100 - (AD0 / 40));
            OLED_ShowNum(2, 14, Sensor1.Guang, 2);
            OLED_ShowString(2, 16, "%");
        }
        t++;

        KeyNum = Key_GetNum();
        if (KeyNum == 1)
        {
            delay_ms(20);
            if (KeyNum == 1)
            {
                state++;
                if (state > 1)
                {
                    state = 0;
                }
            }
        }
        if (state == 0)    //自动模式
        {
            OLED_ShowChinese(1, 7, 51);
            OLED_ShowChinese(1, 8, 52);
            zhidong();
        }
        if (state == 1)    //手动模式
        {
            OLED_ShowChinese(1, 7, 18);
            OLED_ShowChinese(1, 8, 52);
            shoudong();
        }
    }
}

8、总结

本设计以 STM32F103C8T6 为主控,用 DHT11、土壤湿度、光敏传感器检测农场温湿度、土壤湿度和光照强度,通过蓝牙 HC05 远程控制。输出设备包括水泵、LED、舵机、风扇等,OLED 屏显示数据与模式,还设蜂鸣器报警。

 

基于STM32单片机智慧农业系统控制设计是利用STM32单片机的高性能、低功耗等优势,实现对农场中各种设备和环境参数的实时监测与控制。 首先,智慧农业系统主要包括物联网传感器网络、数据采集与处理模块、远程控制与监测平台三个部分。通过物联网传感器网络,可以感知农作物生长中的温度、湿度、光照等环境参数以及土壤水分、肥料浓度等土壤条件,通过STM32单片机将采集的数据传输到数据采集与处理模块进行处理。 在数据采集与处理模块中,STM32单片机作为主控处理器,负责采集传感器数据,并通过串口、以太网等方式将数据传输到云端服务器或本地服务器。同时,STM32单片机可以实现对农场中的设备,如喷灌系统、温室控制系统等的远程控制,通过控制相关设备的开关、调节其参数等操作,以实现农作物的自动化管理。 在远程控制与监测平台中,通过云端服务器或本地服务器,可以远程访问农场的各种数据,包括环境参数和设备控制等信息。通过手机APP或电脑端软件,农场管理者可以随时实时监测农场各项指标,并进行远程控制,实现农场的智能化管理。 在这一设计中,STM32单片机根据感测到的环境参数和设备状态进行决策,并将结果反馈给控制设备,通过对设备的控制实现智慧农业系统的自动化管理。基于STM32单片机智慧农业系统控制设计,不仅可以提高农业生产效率,提高农作物的品质,还可以减少能源消耗,降低资源浪费,实现农业的可持续发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

5132单片机设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值