在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

聚豐項(xiàng)目 > 基于AB32的自動(dòng)澆水系統(tǒng)

基于AB32的自動(dòng)澆水系統(tǒng)

平時(shí)因?yàn)槌霾畈荒芙o盆栽澆水,所以我做了一個(gè)自動(dòng)澆水的系統(tǒng),開(kāi)發(fā)板采集土壤的濕度并且分析,當(dāng)土壤濕度太高,開(kāi)發(fā)板控制繼電器打開(kāi)水泵澆水并且蜂鳴器會(huì)發(fā)出警報(bào)。OLED屏幕會(huì)顯示,室內(nèi)的濕度以及溫度作為參考。

jf_1689824308.7499 jf_1689824308.7499

分享
1 喜歡這個(gè)項(xiàng)目
團(tuán)隊(duì)介紹

jf_1689824308.7499 jf_1689824308.7499

團(tuán)隊(duì)成員

譚周強(qiáng) 主要編程

分享
項(xiàng)目簡(jiǎn)介
平時(shí)因?yàn)槌霾畈荒芙o盆栽澆水,所以我做了一個(gè)自動(dòng)澆水的系統(tǒng),開(kāi)發(fā)板采集土壤的濕度并且分析,當(dāng)土壤濕度太高,開(kāi)發(fā)板控制繼電器打開(kāi)水泵澆水并且蜂鳴器會(huì)發(fā)出警報(bào)。OLED屏幕會(huì)顯示,室內(nèi)的濕度以及溫度作為參考。
硬件說(shuō)明

開(kāi)發(fā)板使用的是中科藍(lán)訊的AB32,本系統(tǒng)分為3個(gè)部分。

OLED顯示部分,顯示溫濕度采集的值。

土壤濕度采集部分,采集土壤的濕度,對(duì)數(shù)據(jù)做出判斷,發(fā)出控制指令。

繼電器控制部分,開(kāi)發(fā)板發(fā)出信號(hào),控制繼電器打開(kāi)水泵澆水,并且蜂鳴器會(huì)發(fā)出警告。

1638030426065.jpg.jpg

軟件說(shuō)明

開(kāi)發(fā)平臺(tái)使用的是RT_studio,它講很多模塊都集成,界面看著也很舒服。

運(yùn)用了RT_Thre,事件發(fā)送,線(xiàn)程。

主函數(shù)程序部分:

#include

先初始化OLED屏幕,然后調(diào)用溫濕度傳感器線(xiàn)程初始化,oled屏幕線(xiàn)程初始化,adc線(xiàn)程初始化,蜂鳴器和繼電器線(xiàn)程初始化。

ADC程序部分:

static void adc_thread_entry(void *parameter)
{
  (void)parameter;
  while(1)
  {
      rt_thread_mdelay(1000);
    if(adc_vol_sample()>800){
    rt_event_send(adc_event, 1);                       
    rt_thread_mdelay(100);                           
    }else {
        rt_event_send(adc_event, 2);                       
        rt_thread_mdelay(100);                           
    }
  }
}

int adc_thread_init(void)
{
    adc_event = rt_event_create("adc",                            // 事件名稱(chēng)
                                RT_IPC_FLAG_FIFO);                // 先進(jìn)先出模式
    if(adc_event == RT_NULL)
      return -1;

    adc_thread = rt_thread_create("adc",                          // 線(xiàn)程名稱(chēng)
                                  adc_thread_entry,               // 線(xiàn)程入口函數(shù)
                                  RT_NULL,                        // 入口函數(shù)入口參數(shù)
                                  512,                            // 線(xiàn)程堆棧大小
                                  8,                              // 線(xiàn)程優(yōu)先級(jí)
                                  20);                            // 時(shí)間片
    if(adc_thread == RT_NULL)
      return -1;
    return rt_thread_startup(adc_thread);                         // 啟動(dòng)線(xiàn)程
}


采集土壤濕度,當(dāng)土壤濕度大于800的時(shí)候發(fā)送adc事件1,當(dāng)小于800的時(shí)候發(fā)送事件2.

繼電器控制部分程序:

static void buzz_thread_entry()
{
  rt_err_t result = RT_EOK;
  rt_uint32_t eventVal = 0;
  buzz_init();                                               // LED引腳初始化
  while(1)
  {
      result = rt_event_recv(adc_event,
                                 1|2,// 接收4個(gè)按鍵事件
                                 RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,// 任意一個(gè)事件發(fā)生,完成后清除事件標(biāo)志
                                 500,                  // 等待時(shí)間
                                 &eventVal);                          // 事件值
      if(result == RT_EOK)
      {
          if(eventVal==1)
          {
              Buzz(1);
          }
          if(eventVal==2)
          {
              Buzz(0);
          }
      }
  }
}

int buzz_thread_init(void)
{
  buzz_thread = rt_thread_create("buzz",             // 線(xiàn)程名稱(chēng)
                                buzz_thread_entry,           // 線(xiàn)程入口函數(shù)
                                RT_NULL,                      // 入口函數(shù)傳入?yún)?shù)
                                256,                            // 線(xiàn)程堆棧大小
                                10,                             // 線(xiàn)程優(yōu)先級(jí)
                                20);                          // 線(xiàn)程時(shí)間片

  if(buzz_thread == RT_NULL) return -1;

  return rt_thread_startup(buzz_thread);
}

接收adc發(fā)送來(lái)的事件進(jìn)行判斷。

溫濕度傳感器部分程序:

int rt_hw_dht11_port(void)
{
    struct rt_sensor_config cfg;

    cfg.intf.user_data = (void *)DHT11_DATA_PIN;
    rt_hw_dht11_init("dht11", &cfg);

    return RT_EOK;
}


static void read_temp_entry(void *parameter)
{
    rt_device_t dev = RT_NULL;
    struct rt_sensor_data sensor_data;
    rt_size_t res;
    rt_uint8_t get_data_freq = 1; /* 1Hz */

    dev = rt_device_find("temp_dht11");
    if (dev == RT_NULL)
    {
        return;
    }

    if (rt_device_open(dev, RT_DEVICE_FLAG_RDWR) != RT_EOK)
    {
        rt_kprintf("open device failed!\n");
        return;
    }

    rt_device_control(dev, RT_SENSOR_CTRL_SET_ODR, (void *)(&get_data_freq));

    while (1)
    {
        res = rt_device_read(dev, 0, &sensor_data, 1);

        if (res != 1)
        {
            rt_kprintf("read data failed! result is %d\n", res);
            rt_device_close(dev);
            return;
        }
        else
        {
            if (sensor_data.data.temp >= 0)
            {
               temp = (sensor_data.data.temp & 0xffff) >> 0;      // get temp
               humi = (sensor_data.data.temp & 0xffff0000) >> 16; // get humi
               //rt_kprintf("temp:%d, humi:%d\n" ,temp, humi);
            }
        }

        rt_thread_delay(1000);
    }
}


void dht11_read_temp_sample(void)
{
    rt_thread_t dht11_thread;

    dht11_thread = rt_thread_create("dht_tem",
                                     read_temp_entry,
                                     RT_NULL,
                                     1024,
                                     RT_THREAD_PRIORITY_MAX / 2,
                                     20);
    if (dht11_thread != RT_NULL)
    {
        rt_thread_startup(dht11_thread);
    }
}


使用的是 DHT11的軟件包對(duì)溫濕度進(jìn)行采集,將溫度以及濕度保存。


oled屏幕部分程序:

static void oled_display_entry(void *parameter)
{
    char text[200];
    while(1)
    {
        rt_memset(text, 0, sizeof(text));
        rt_sprintf(text, "%d", temp);
        ssd1306_SetCursor(60, 6);//添加代碼,設(shè)置顯示光標(biāo)位置
        ssd1306_WriteString(text, Font_11x18, White);//添加代碼,設(shè)置顯示內(nèi)容
       // ssd1306_UpdateScreen();////添加代碼,更新顯示屏信息

       rt_memset(text, 0, sizeof(text));
       rt_sprintf(text, "%d", humi);
       ssd1306_SetCursor(60, 40);//添加代碼,設(shè)置顯示光標(biāo)位置
       ssd1306_WriteString(text, Font_11x18, White);//添加代碼,設(shè)置顯示內(nèi)容
       ssd1306_UpdateScreen();////添加代碼,更新顯示屏信息
       rt_thread_mdelay(100);
    }

}

void oled_display_thread_create()
{
    rt_thread_t oled_display_thread;
    oled_display_thread = rt_thread_create("oled_display",
                                      oled_display_entry,
                                      RT_NULL,
                                      1024,
                                      20,
                                      40);
    if (oled_display_thread != RT_NULL)
    {
        rt_thread_startup(oled_display_thread);
    }

}

將采集的溫濕度數(shù)據(jù)顯示在屏幕中,使用的是ssd1306 軟件包。



項(xiàng)目地址:譚周強(qiáng)/AB32項(xiàng)目 - Gitee.com

評(píng)論區(qū)(0 )
主站蜘蛛池模板: 四虎必出精品亚洲高清| 亚洲bt天堂| 超级乱淫片67194免费看| fenfencao在线观看免费视频| 国产性色视频| 国产va在线| 午夜干b| 人人操天天射| 337p欧洲亚洲大胆艺术| 开心丁香婷婷深爱五月| 日本视频不卡| 神马三级我不卡| 亚洲日本视频| 99 久久99久久精品免观看| 亚洲 欧美 综合| 日韩一卡 二卡 三卡 四卡 免费视频| 一级毛片一片毛| 四只虎免费永久观看| 正在播放久久| 美女扒开尿口给男人看大全| 一区二区三区国模大胆| 五月激激| 老师别揉我胸啊嗯上课呢视频| 日本黄在线| 久久大伊人| 久久好色| 综合网视频| 国色天香网在线| 亚洲色图狠狠干| 色播在线| 国产乱码免费卡1卡二卡3卡四| 美女爱爱网站| 中日韩一级片| 国产理论在线观看| 色噜噜狠狠大色综合| 天堂在线观看免费视频| 激情五月综合网| 成色网| 久久www免费人成看片色多多| 久久久国产精品免费| 亚洲欧美日韩特级毛片|