基于OpenHarmony的智慧牧场方案:室内管理系统篇

描述

前文回顾

《智慧牧场之生物姿态检测篇》

《智慧牧场之生物心率检测篇》

《生物运动轨迹跟踪篇》

1. 背景知识

1.1 室内管理系统的意义

在智慧牧场解决方案中,随着科技的发展,物联网、无线通信、大数据计算等技术的不断发展,在越来越多行业中得到应用,智能化生产的概念也深入人心。为提升养殖业的投入产出比、减少料肉/奶比、提升生产效率、改善养殖环境的生态环境、减低禽畜疫病滋生的可能性,打造一体化、数字式、自动化的管理模式。而室内管理系统,是其中的重中之重,也最为复杂。

 

1.2 室内管理系统涵盖内容

以养牛为例,利用光照、温、湿度、日照等传感器实时采集分析畜牛棚室内光照强度、空气和氨气、日照等环境参数,并自动调节开启或关闭所需设备(比如:包括天窗,水幕,风扇、水泵、污水处理等)。实时检测气态浓度、H2S浓度、CO2浓度、光照强度、气压、灰尘、环境噪声、环境温度、奶牛体温及录像图像,由模型分析,遥控或自动控制湿帘风机、喷淋滴灌、供暖照明、排风扇、开窗机等通风换气设备等设备。为了保证高产量、高质量、生态、安全的奶牛安全,确保室内环境最适合家畜生长并提高奶牛福利。

使用机器人和流水线饲喂奶牛,记录奶牛饮食数据,同时给每一头牛戴上智能项圈和计步手环,对牛只的身体状况和运动数据实时监控。同时监控用水用料的数据,动态调整投喂策略,包括投喂量和投喂频率(包括:饲喂机和自动饮水器)。

智能养牛的室内管理系统采用奶厅智能检测系统,自动识别奶牛身份,自动上传班次挤奶情况。同时可以根据温度自动控制风机、喷淋、和光照设备,保证每一头牛在极度舒适的情绪下产奶。

使用室内空气温控技术,实现从牧场产奶到零售终端全程冷链和无漏点式温度监控。

与此同时,在牛棚内设置摄像机等监测设备,对大棚内7-24小时连续监测,实现了奶牛养殖的智能化生产与科学管理。

 

2. 解决方案概要

该方案尝试用OpenHarmony实现光照强度检测、温湿度检测、水位控制和图传部分。

电子发烧友

电子发烧友

 

电子发烧友

电子发烧友

电子发烧友

3.  硬件设计3. 硬件设计

3.1 光照检测传感器 BH1750

电子发烧友

典型的电路应用如下:

电子发烧友

I2C总线时序图如下:

电子发烧友

 

3.2 湿度和温度传感器 SHT20

电子发烧友

典型的电路应用如下:

电子发烧友

时序图如下:

电子发烧友

 

4. 软件设计

4.1 光照强度部分:

/***************************************************************
* 函数名称: Start_BH1750
* 说    明: 启动BH1750
* 参    数: 无
* 返 回 值: 无
***************************************************************/
void Start_BH1750(void)
{
    WifiIotI2cData bh1750_i2c_data = {0};
    uint8_t send_data[1] = {0x10};
    bh1750_i2c_data.sendBuf = send_data;
    bh1750_i2c_data.sendLen = 1;
    I2cWrite(WIFI_IOT_I2C_IDX_1, (BH1750_Addr << 1) | 0x00, &bh1750_i2c_data);
}

4.2 温湿度部分:

/***************************************************************
* 函数名称: Init_SHT30
* 说    明: 初始化SHT30,设置测量周期
* 参    数: 无
* 返 回 值: 无
***************************************************************/
void Init_SHT30(void)
{
    WifiIotI2cData sht30_i2c_data = {0};
    uint8_t send_data[2] = {0x22, 0x36};
    sht30_i2c_data.sendBuf = send_data;
    sht30_i2c_data.sendLen = 2;
    I2cWrite(WIFI_IOT_I2C_IDX_1, (SHT30_Addr << 1) | 0x00, &sht30_i2c_data);
}

4.3 水位控制部分:

static float GetVoltage(void)
{
    unsigned int ret;
    unsigned short data;


    ret = AdcRead(WIFI_IOT_ADC_CHANNEL_2, &data, WIFI_IOT_ADC_EQU_MODEL_8, WIFI_IOT_ADC_CUR_BAIS_DEFAULT, 0xff);
    if (ret != WIFI_IOT_SUCCESS)
    {
        printf("ADC Read Fail
");
    }


    return (float)data * 1.8 * 4 / 4096.0;
}

4.4 图传部分:

#include "esp_camera.h"
#include 


#define CAMERA_MODEL_AI_THINKER


#include "camera_pins.h"


const char* ssid = "**";
const char* password = "123456789";


void startCameraServer();


void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();


  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  //init with high specs to pre-allocate larger buffers
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }


#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif


  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }


  sensor_t * s = esp_camera_sensor_get();
  //initial sensors are flipped vertically and colors are a bit saturated
  if (s->id.PID == OV3660_PID) {
    s->set_vflip(s, 1);//flip it back
    s->set_brightness(s, 1);//up the blightness just a bit
    s->set_saturation(s, -2);//lower the saturation
  }
  //drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);


#if defined(CAMERA_MODEL_M5STACK_WIDE)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif


  WiFi.begin(ssid, password);


  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");


  startCameraServer();


  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}


void loop() {
  // put your main code here, to run repeatedly:
  delay(10000);
}

 

电子发烧友

本文完

 

更多热点文章阅读

  • 玩嗨OpenHarmony:基于OpenHarmony的智能助老服务机器人
  • 玩嗨OpenHarmony:基于OpenHarmony的智慧农业环境监控系统
  • OpenHarmony 3.2 Beta多媒体系列:音视频播放gstreamer
  • 基于OpenHarmony的智慧牧场方案:生物运动轨迹跟踪篇
  • 基于OpenHarmony的智能门禁系统,让出行更便捷
     

提示:本文由电子发烧友社区发布,转载请注明以上来源。如需社区合作及入群交流,请添加微信EEFans0806,或者发邮箱liuyong@huaqiu.com。


原文标题:基于OpenHarmony的智慧牧场方案:室内管理系统篇

文章出处:【微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分