阿信 发表于 2024-7-26 18:06:03

STM32项目分享:智慧农业(机智云)系统

本帖最后由 阿信 于 2024-7-26 18:07 编辑

目录
一、前言
二、项目简介
1.功能详解
2.主要器件
三、原理图设计
四、PCB硬件设计
1.PCB图
2.PCB板打样焊接图
五、程序设计
六、实验效果
七、资料内容
项目分享


一、前言

项目成品图片:




哔哩哔哩视频链接:https://www.bilibili.com/video/BV1Rw4m117jv/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2二、项目简介1.功能详解STM32基于机智云的智能温室大棚系统。功能如下:
温湿度采集:使用DHT11温湿度传感器采集环境温湿度土壤湿度采集:通过土壤湿度模块采集土壤湿度光照强度采集:通过光敏电阻采集环境光照强度二氧化碳浓度采集:通过CO2气敏传感器检测二氧化碳浓度土壤温度采集:通过DS18B20传感器采集土壤温度风扇控制:可自动模式下根据环境温度触发或手动模式下APP开闭水泵控制:可自动模式下根据土壤湿度触发或手动模式下APP开闭LED照明灯控制:可自动模式下根据环境光强触发或手动模式下按键开闭通风口:通过步进电机模拟通风口OLED显示:将检测到的环境数据显示在oled屏幕上。蜂鸣器报警:危险情况下本地蜂鸣器触发报警APP功能:使用机智云APP,包括功能有控制并显示风扇、水泵、通风口和补光灯状态,选择工作模式为手动或自动模式,显示当前环境温湿度、土壤温湿度以及光照强度和二氧化碳浓度信息2.主要器件STM32F103C8T6最小系统板DHT11温湿度传感器OLED显示屏(4针I2C协议)WiFi模块(ESP8266-01s)土壤湿度传感器二氧化碳传感器DS18B20温度传感器28BYJ51步进电机5V风扇模块5V水泵模块蜂鸣器LED灯三、原理图设计
四、PCB硬件设计1.PCB图

2.PCB板打样焊接图



五、程序设计


int main(void)
{
      ADCX_Init();
      Timer2_Init(9,14398);
      Uart2_Init(9600);
      Uart1_Init(115200);
      Uart3_Init();
      IWDG_Init();      //初始化看门狗
      LDR_Init();
      YL69_Init();
      OLED_Init();
      DHT11_Init();
      LED_Init();
      Buzzer_Init();
      Relay_Init();
      MOTOR_Init();
      Key_Init();
      Sensorthreshold.CO2Value = FLASH_R(FLASH_START_ADDR);      //从指定页的地址读FLASH
      Sensorthreshold.luxValue = FLASH_R(FLASH_START_ADDR+2);      //从指定页的地址读FLASH
      Sensorthreshold.tempValue = FLASH_R(FLASH_START_ADDR+4);      //从指定页的地址读FLASH
      Sensorthreshold.humiValue = FLASH_R(FLASH_START_ADDR+6);      //从指定页的地址读FLASH
      Sensorthreshold.soilTempValue = FLASH_R(FLASH_START_ADDR+8);      //从指定页的地址读FLASH
      Sensorthreshold.soilHumiValue = FLASH_R(FLASH_START_ADDR+10);      //从指定页的地址读FLASH
      GENERAL_TIM_Init();
      userInit();                //完成机智云初始赋值
      gizwitsInit();      //开辟一个环形缓冲区
      while (1)
      {
                IWDG_ReloadCounter(); //重新加载计数值 喂狗
                SensorScan();      //获取传感器数据
                switch (menu)
                {
                        case display_page1:
            SensorDataDisplay1();      //显示传感器1数据
            OLED_Menu1();      //显示主页面1固定信息
            if (KeyNum == KEY_2)      //是否按下按键2
            {
                              KeyNum = 0;
                              OLED_Clear();      //清屏
                              menu = display_page2;      //menu = 主页面2
                        }
                        MotorOperation();
                        break;
                        case display_page2:               
                        SensorDataDisplay2();      //显示传感器2数据               
                        OLED_Menu2();      //显示主页面2固定信息
                        if (KeyNum == KEY_2)      //是否按下按键2
                        {
                              KeyNum = 0;
                              OLED_Clear();      //清屏
                              menu = display_page1;      //menu = 主页面1
                        }
                        MotorOperation();
                        break;
                        case settingsPage:
                        //从主页面跳转至设置页面时进行一次清屏
                        if (OLED_Clear_Flag)
                        {
                              OLED_Clear_Flag = 0;      //清除清屏标志位
                              OLED_Clear();      //清屏
                        }
                        ThresholdModification(SetSelection());      //调节传感器阈值
                        OLED_Option(SetSelection());      //获取按键次数,从而判断“>”显示位置
                        //按键次数小于等于4时,显示设置页面1
                        if (SetSelection() <= 4)               
                        {
                              settingsThresholdDisplay1();      //显示传感器阈值1数据      
                              OLED_settingsPage1();      //显示阈值设置界面1固定信息
                        }
                        else      //否则显示设置页面2
                        {
                              settingsThresholdDisplay2();      //显示传感器阈值2数据      
                              OLED_settingsPage2();      //显示阈值设置界面2固定信息
                        }
                        if (KeyNum == KEY_2)      //判断用户是否按下退出按键
                        {
                              KeyNum = 0;
                              OLED_Clear();      //清屏
                              menu = display_page1;      //回到主页面1
                              //存储修改的传感器阈值至flash内
                              FLASH_W(FLASH_START_ADDR, Sensorthreshold.CO2Value, Sensorthreshold.luxValue,
                              Sensorthreshold.tempValue, Sensorthreshold.humiValue,
                              Sensorthreshold.soilTempValue, Sensorthreshold.soilHumiValue);
                              }
                              break;
                        default: break;
                }
                userHandle();      //更新机智云数据点变量存储的值
                gizwitsHandle((dataPoint_t *)¤tDataPoint);      //数据上传至机智云                                       
      }
}

六、实验效果







页: [1]
查看完整版本: STM32项目分享:智慧农业(机智云)系统