開(kāi)發(fā)者 張同學(xué) 通過(guò)外接濕度傳感器,利用RVB2601處理濕度傳感器送來(lái)的信號(hào),用RVB2601點(diǎn)亮不同顏色的LED燈及OLED顯示不同數(shù)量的橫線表示花卉土壤的干濕度,完成了創(chuàng)意應(yīng)用開(kāi)發(fā)——花卉澆水指示器。
關(guān)于花卉澆水指示器的實(shí)現(xiàn)過(guò)程,請(qǐng)見(jiàn)本文詳細(xì)介紹。
01項(xiàng)目背景
花兒人見(jiàn)人愛(ài),很多人都喜歡養(yǎng)殖花卉,剛買來(lái)的花兒艷麗多姿,沒(méi)過(guò)幾天,花兒就蔫了。其中澆水是否恰當(dāng),是主要問(wèn)題。
花卉是否缺水?花卉是否應(yīng)該澆水了?花卉的澆水問(wèn)題,對(duì)很多人來(lái)說(shuō)是個(gè)難題。
02作品簡(jiǎn)介
2.1設(shè)置濕度傳感器
當(dāng)花卉土壤過(guò)于干燥時(shí),RVB2601的紅色LED點(diǎn)亮,同時(shí)OLED僅顯示幾根橫線,提醒花卉需要澆水,參見(jiàn)下圖1。

實(shí)測(cè)圖1-紅色燈亮
2.2此傳感器與RVB2601相連
當(dāng)花卉土壤干濕度恰當(dāng)時(shí),RVB2601的綠色LED點(diǎn)亮,同時(shí)OLED顯示恰當(dāng)數(shù)量的橫線,表示花卉不需澆水或通風(fēng)散濕,參見(jiàn)下圖2。

實(shí)測(cè)圖2-綠色燈亮
2.3RVB2601處理濕度傳感器送來(lái)的信號(hào)
當(dāng)花卉土壤過(guò)于潮濕時(shí),RVB2601的藍(lán)色LED點(diǎn)亮,同時(shí)OLED顯示幾乎滿屏的橫線,提醒花卉需要通風(fēng)散濕,參見(jiàn)下圖3。

實(shí)測(cè)圖3-藍(lán)色燈亮
4.4 用RVB2601點(diǎn)亮不同顏色的LED燈及OLED顯示不同數(shù)量的橫線表示花卉土壤的干濕度。
03系統(tǒng)框圖
用“平頭哥RISC-V RVB2601開(kāi)發(fā)板”檢測(cè)土壤濕度的辦法:
-
開(kāi)發(fā)板讀取土壤濕度傳感器的模擬信號(hào),經(jīng)開(kāi)發(fā)板ADC轉(zhuǎn)換后變成數(shù)字信號(hào),然后驅(qū)動(dòng)開(kāi)發(fā)板的LED及OLED;
-
經(jīng)篩選,選取下款濕度傳感器,參見(jiàn)圖4:

圖4濕度傳感器外形圖
濕度傳感器模塊為雙輸出模式:數(shù)字量輸出及模擬量輸出,比較器采用LM393芯片,工作穩(wěn)定,信號(hào)干凈。設(shè)有固定螺栓孔,方便安裝。
電路圖參見(jiàn)圖5:

圖5電路圖
04各部分功能說(shuō)明和解析
4.1 土壤濕度傳感器
參見(jiàn)圖6:

圖6土壤濕度傳感器
4.2 土壤濕度信號(hào)放大處理模塊
參見(jiàn)圖7:

圖7土壤濕度信號(hào)放大處理模塊
4.3濕度處理、顯示模塊
即RVB2601,參見(jiàn)圖8:

圖8RVB2601
05作品源碼和案例中處理的傳感器數(shù)據(jù)
5.1作品源碼
#define _DEFAULT_SOURCE /* needed for usleep() */
#include
#include
#include
#include
#include
#include "aos/cli.h"
#include "app_config.h"
#include "app_init.h"
#include "csi_config.h"
#include "hw_config.h"
#include "csi_config.h"
#include "lvgl.h"
#include "lv_label.h"
#include "oled.h"
#include "board_config.h"
#include "drv/gpio_pin.h"
#include
#include
#include
#include
#define TAG "APP"
/**************************oled*****************************/
extern void oled_draw_point(uint8_t r, uint8_t c, uint8_t t);
extern void Fill_RAM(unsigned char Data);
extern void oled_reflesh();
/**************************************************************/
/*******************************led****************************/
csi_gpio_pin_t MY_PIN_LED_RED;
csi_gpio_pin_t MY_PIN_LED_GREEN;
csi_gpio_pin_t MY_PIN_LED_BLUE;
/*************************************************************/
#define ADC_CHECK_RETURN(ret)
do
{
if (ret != CSI_OK)
return -1;
}
while(0);
static csi_adc_t adc;
int main(void)
{
char j,k;
int ret;
uint32_t data;
int x0,x1,y0,y1;
//uint8_t p1[128][64];
/********************************light led*****************************/
board_yoc_init();
LOGD(TAG, "board_yoc_init() completed!
");
aos_msleep(1000); //by me
oled_init();
//PA4 - BLUE PA7-REDPA25 GREEN
csi_pin_set_mux(PA4, PIN_FUNC_GPIO);
csi_pin_set_mux(PA7, PIN_FUNC_GPIO);
csi_pin_set_mux(PA25, PIN_FUNC_GPIO);
csi_gpio_pin_init(&MY_PIN_LED_BLUE, PA4);
csi_gpio_pin_init(&MY_PIN_LED_RED, PA7);
csi_gpio_pin_init(&MY_PIN_LED_GREEN, PA25);
csi_gpio_pin_dir(&MY_PIN_LED_GREEN, GPIO_DIRECTION_OUTPUT);
csi_gpio_pin_dir(&MY_PIN_LED_RED, GPIO_DIRECTION_OUTPUT);
csi_gpio_pin_dir(&MY_PIN_LED_BLUE, GPIO_DIRECTION_OUTPUT);
csi_gpio_pin_write(&MY_PIN_LED_BLUE, GPIO_PIN_HIGH);
csi_gpio_pin_write(&MY_PIN_LED_RED, GPIO_PIN_HIGH);
csi_gpio_pin_write(&MY_PIN_LED_GREEN, GPIO_PIN_HIGH);
/***************************************************************************/
/***********************************ADC******************************/
csi_pin_set_mux(EXAMPLE_ADC_CHANNEL0_PIN, EXAMPLE_ADC_CHANNEL0_PIN_FUNC);
//editfind in filesfind in files 搜索“EXAMPLE_ADC_CHANNEL0_PIN”可得:
//g:C-SkyCDKCSKYPACKch2601_evbv7.4.3includeoard_config.h有此字段:
//#define EXAMPLE_ADC_CHANNEL0_PIN EXAMPLE_ADC_CH0,再搜索:
//EXAMPLE_ADC_CH0,可得:#define EXAMPLE_ADC_CH0 PA3、P18
//可見(jiàn),本程序的ADC輸入引腳是:PA3
//PA3:J1:9-10腳,參見(jiàn):
//RVB2601開(kāi)發(fā)板用戶手冊(cè):37067137319852441601615475227781dm4cDSePeY-音頻DAC、音頻ADC.pdf P8/19
ret = csi_adc_init(&adc, 0);
ADC_CHECK_RETURN(ret);
csi_adc_continue_mode(&adc, true);
ADC_CHECK_RETURN(ret);
//開(kāi)啟/關(guān)閉ADC連續(xù)采樣模式,false->禁止
//參見(jiàn):ADC · GitBook.pdf
ret = csi_adc_freq_div(&adc, 128);
if(ret == 0){
return -1;
}
/* Configure sampling time */
ret = csi_adc_sampling_time(&adc, 2);
ADC_CHECK_RETURN(ret);
/* Enable channel */
ret = csi_adc_channel_enable(&adc, 0, true);
ADC_CHECK_RETURN(ret);
/* Trigger new conversion */
ret = csi_adc_start(&adc);
ADC_CHECK_RETURN(ret);
// LOGD(TAG, "%s ,ADC INITED!
", aos_get_app_version());
while(1)
{
/* Read result */
data = csi_adc_read(&adc);
printf("get adc result: %d
", data);//在串口調(diào)試助手中顯示
printf("the voltage is: %d mV
", data*3300/4096);
aos_msleep(500);
/***********************************************************end of ADC************************/
/*************************************OLED***********************/
x0=50;
x1=80;
y0=63;
y1=(4096-data)/3.3/20;
for(j=y0;j>y0-y1;j--)
{
Fill_RAM(0x00);
for(k=x0;k2800)
{
csi_gpio_pin_write(&MY_PIN_LED_RED, GPIO_PIN_LOW);
//aos_msleep(2000);
//acsi_gpio_pin_write(&MY_PIN_LED_RED, GPIO_PIN_HIGH);
}
if(data<800)
????????? ??? {
????????? ???? csi_gpio_pin_write(&MY_PIN_LED_BLUE, GPIO_PIN_LOW);
????????? ???? //aos_msleep(2000);
???? ???????? //csi_gpio_pin_write(&MY_PIN_LED_BLUE, GPIO_PIN_HIGH);????
????????? ??? }
????????? ????? ? ?
???????if((data>=800)&&(data<=2800))
????????? ?? {
?????????????? ?csi_gpio_pin_write(&MY_PIN_LED_GREEN, GPIO_PIN_LOW);
????????? ???? //aos_msleep(2000);
????????? ????//csi_gpio_pin_write(&MY_PIN_LED_GREEN, GPIO_PIN_HIGH);??
???? ???? ??? }
????????? /********************************END OF LED***************************/????
?????????
????????? aos_msleep(5000);
????????? Fill_RAM(0x00);
????????? oled_reflesh();
????? }
????
???? csi_adc_uninit(&adc);
???? printf("csi_adc_uninited.
");
???? return 0;
}
5.2傳感器數(shù)據(jù)
實(shí)測(cè)的傳感器數(shù)據(jù)如下:
(1)土壤極端干燥時(shí)的電壓值:2.99V
根據(jù)多次試驗(yàn),當(dāng)電壓值為:2 .26V時(shí),土壤就比較干燥,此時(shí)的Data:2.26*4096/3300=2805。
(2)土壤濕度最適當(dāng)時(shí)的電壓值:1.50V
根據(jù)多次試驗(yàn),當(dāng)電壓值為:0.65-2 .26V時(shí),土壤濕度比較適當(dāng),此時(shí)的Data:0.65*4096/3300到2805即:807~2805。
(3)土壤極端過(guò)濕時(shí)的電壓值:0.56V
根據(jù)多次試驗(yàn),當(dāng)電壓值為:0.65V時(shí),土壤就過(guò)濕,此時(shí)的Data:0.65*4096/3300=807
06視頻演示
https://pan.baidu.com/s/14e7PXorkclUSF74BCm4Bzw
提取碼:jkdf
07項(xiàng)目總結(jié)
花卉的澆水問(wèn)題,對(duì)很多人來(lái)說(shuō)是個(gè)難題。此款“花卉澆水指示器”將澆水問(wèn)題,轉(zhuǎn)化為土壤的干濕度問(wèn)題,用傳感器檢測(cè)的數(shù)值,直觀地指示花兒是否需要澆水,不需依仗經(jīng)驗(yàn),主觀判斷,值得推廣。
審核編輯 :李倩
-
OLED
+關(guān)注
關(guān)注
119文章
6229瀏覽量
225494 -
指示器
+關(guān)注
關(guān)注
0文章
251瀏覽量
38465
原文標(biāo)題:應(yīng)用速遞 | 智能澆花神器 養(yǎng)花種菜好幫手
文章出處:【微信號(hào):芯片開(kāi)放社區(qū),微信公眾號(hào):芯片開(kāi)放社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
淺談架空暫態(tài)特征型遠(yuǎn)傳故障指示器
花卉智能灌溉控制系統(tǒng)功能應(yīng)用
線路故障指示器為什么變成紅色
線路故障指示器如何復(fù)位
線路故障指示器工作原理是什么
線路故障指示器怎么判斷故障點(diǎn)
在現(xiàn)代系統(tǒng)設(shè)計(jì)中啟用LED和LCD指示器應(yīng)用簡(jiǎn)介

使用電源正常狀態(tài)指示器實(shí)現(xiàn)輸出放電功能

L60系列0.230英寸(5.9毫米)防水面板安裝指示器
利用Arduino的數(shù)字水位指示器電路設(shè)計(jì)

VL53L8CX TOF開(kāi)發(fā)(4)----運(yùn)動(dòng)指示器

內(nèi)置超級(jí)電容模塊的故障指示器有哪些特性?

基于機(jī)智云物聯(lián)網(wǎng)的智能花卉栽培系統(tǒng)

評(píng)論