0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于小凌派開發(fā)板的煙霧檢測傳感器設計

電子發(fā)燒友開源社區(qū) ? 來源:HarmonyOS官方合作社區(qū) ? 作者:HarmonyOS官方合作社 ? 2022-04-29 08:42 ? 次閱讀

煙霧檢測傳感器使用的是MQ-2煙霧傳感器。MQ-2型煙霧傳感器屬于二氧化錫半導體氣敏材料,屬于表面離子式N型半導體。處于200~300攝氏度時,二氧化錫吸附空氣中的氧,形成氧的負離子吸附,使半導體中的電子密度減少,從而使其電阻值增加。當與煙霧接觸時,如果晶粒間界處的勢壘收到煙霧的調至而變化,就會引起表面導電率的變化。利用這一點就可以獲得這種煙霧存在的信息,煙霧的濃度越大,導電率越大,輸出電阻越低,則輸出的模擬信號就越大。


使用MQ-2煙霧傳感器來檢測周圍環(huán)境煙霧濃度,再通過小凌派開發(fā)板采集信號。因為采集的信號是電壓值所以通過adc轉換成數(shù)字信號。這里有個需要注意的地方RK2206的ADC默認參考電壓是內部2.4v所以初始化ADC時通過配置soc_con29 寄存器改成外部3.3v參考電壓。

參考代碼:

typedef union{  uint32_t value;  struct  {    uint16_t gRF_saradc_ana_reg_low: 4;    uint16_t grf_saradc_vol_sel: 1;    uint16_t grf_saradc_ana_reg_high: 11;    struct    {      uint16_t grf_saradc_ana_reg_low: 4;      uint16_t grf_saradc_vol_sel: 1;      uint16_t grf_saradc_ana_reg_high: 11;    } rw;  };} GRF_SOC_CON29;static uint32_t iss_adc_dev_init(iss_mq2_dev_s *adc){  if (PinctrlInit(adc->adc) != 0)  {    printf("adc pin %d init faiLED
", adc->adc.gpio);  }  if (LzSaradcInit() != 0)  {    printf("saradc %d init failed
", adc->port);  }  volatile GRF_SOC_CON29 *soc = (GRF_SOC_CON29*)&GRF->SOC_CON29;  soc->rw.grf_saradc_vol_sel = 1;  soc->grf_saradc_vol_sel  = 0;  soc->rw.grf_saradc_vol_sel = 0;    adc->init = 1;  return 0;}

(左右移動查看全部內容)

讀取ADC電壓:

static float iss_get_voltage(void){  unsigned int ret;  unsigned int data;
  ret = LzSaradcReadValue(m_iss_mq2, &data);  if (ret != 0)  {    printf("ADC Read Fail
");  }  return (float)data * 3.3 / 1024;}

(左右移動查看全部內容)

計算ppm值:
阻值R與空氣中被測氣體的濃度C的計算關系式
log R = mlog C + n (m,n均為常數(shù))

傳感器的電阻計算:
Rs = (Vc/VRL-1) X RL
Vc為回路電壓,VRL是傳感器4腳6腳輸出電壓,RL是負載

#define CAL_PPM      20       //校準環(huán)境中PPM值#define RL         1       //RL阻值float e53_iss_get_mq2_ppm(void){  float voltage, rs, ppm;
  voltage = iss_get_voltage();  rs = (5 - voltage) / voltage * RL; //計算rs  ppm = 613.9f * pow(rs / m_r0, -2.074f); //計算ppm  return ppm;}

(左右移動查看全部內容)

ppm值校準:

void e53_iss_mq2_ppm_calibration(void){  float voltage = iss_get_voltage();  float rs = (5 - voltage) / voltage * RL;    m_r0 = rs / pow(CAL_PPM / 613.9f, 1 / -2.074f);  printf("R0 =%f
", m_r0);}

(左右移動查看全部內容)

因為使用的是無源蜂鳴器,所以通過pwm驅動蜂鳴器報警。

pwm初始化:

static uint32_t iss_pwm_dev_init(iss_pwm_dev_s *p){  if (PwmIoInit(p->pwmio) != 0)  {    printf("Pwm pin %d init failed
", p->pwmio.pwm.gpio);  }  if (LzPwmInit(p->port) != 0)  {    printf("Pwm %d init failed
", p->port);  }    p->init = 1;  return 0;}

(左右移動查看全部內容)

pwm 啟動:

static uint32_t iss_pwm_start(iss_pwm_dev_s *pwm){  if (pwm->init == 0)  {    printf("PWM not init
");    return 1;  }  else if (LzPwmstart(pwm->port, pwm->duty * pwm->cycle / 100, pwm->cycle) != 0)  {    printf("PWM Start Fail
");    return 1;  }  pwm->onoff = 1;  return 0;}

(左右移動查看全部內容)

pwm停止:

static uint32_t iss_pwm_stop(iss_pwm_dev_s *pwm){  if (pwm->init == 0)  {    printf("PWM not init
");    return 1;  }  else if (pwm->onoff == 0)  {    return 0;  }  else if (LzPwmStop(pwm->port) != 0)  {    printf("PWM Stop Fail
");    return 1;  }  pwm->onoff = 0;  return 0;}

(左右移動查看全部內容)

蜂鳴器報警控制,需要報警時啟動pwm,不需要報警時停止pwm:

void e53_iss_beep_status_set(e53_iss_status_e status){  if (status == ON)  {    iss_pwm_start(&m_iss_beep);  }  if (status == OFF)  {    iss_pwm_stop(&m_iss_beep);  }}

(左右移動查看全部內容)

整個模塊初始化:

uint32_t e53_iss_init(){uint32_t ret = 1;
  ret = iss_led_dev_init(&m_iss_led);  if (ret != 0)  {    printf(“l(fā)ed init err
”);  }  ret = iss_pwm_dev_init(&m_iss_beep);  if (ret != 0)  {     printf(“pwm init err
”);  }  ret = iss_adc_dev_init(&m_iss_mq2);  if (ret != 0)  {     printf(“adc init err
”);  }  return ret;}

(左右移動查看全部內容)

創(chuàng)建一個任務處理函數(shù)
這里需要注意的是ppm校準需要提前測試,再把值寫死到代碼里。

還有需要注意的是mq2傳感器需要預熱,即提前通電大約半分鐘到一分鐘左右。用手放在傳感器外殼感覺微微發(fā)熱即可。如果不預熱就開始測量其測量值會偏差很大,而且會隨著加熱而變化。

void e53_iss_thread(void *args){  float ppm = 0;  uint32_t id  = 0;  uint8_t index = 0;
  e53_iss_init();  printf("%s
", __FUNCTION__);  /*傳感器校準*/  LOS_Msleep(2000); // 開機2s后進行校準  // e53_iss_mq2_ppm_calibration(); // 校準傳感器校準后不需要重復調用  while (1)  {    ppm = e53_iss_get_mq2_ppm();    printf("ppm:%.1f 
", ppm);    /*判斷是否達到報警閾值*/    if (ppm > e53_iss_get_mq2_alarm_value())    {      e53_iss_beep_status_set(ON);      printf("over %u ppm alarm
", e53_iss_get_mq2_alarm_value());    }    else    {      e53_iss_led_status_set(OFF);      e53_iss_beep_status_set(OFF);    }LOS_Msleep(1000);  }}

(左右移動查看全部內容)

最后創(chuàng)建一個任務調用上面處理函數(shù)即可。

燒寫程序后通過串口打印結果

ppm:55.6ppm:60.9

(左右移動查看全部內容)

當檢測到煙霧超過設定值時蜂鳴器報警響起。低于設置值時蜂鳴器停止報警。這樣基于小凌派的煙霧報警功能就實現(xiàn)了。

原文標題:基于小凌派 RK2206 鴻蒙開發(fā)板實現(xiàn)煙霧報警功能

文章出處:【微信公眾號:HarmonyOS官方合作社區(qū)】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2545

    文章

    50445

    瀏覽量

    751042
  • 開發(fā)板
    +關注

    關注

    25

    文章

    4896

    瀏覽量

    97058
  • 煙霧檢測
    +關注

    關注

    0

    文章

    14

    瀏覽量

    8214
  • RK2206
    +關注

    關注

    0

    文章

    34

    瀏覽量

    1756
  • 小凌派
    +關注

    關注

    0

    文章

    27

    瀏覽量

    1187

原文標題:基于小凌派 RK2206 鴻蒙開發(fā)板實現(xiàn)煙霧報警功能

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    輕量系統(tǒng)開發(fā)套件介紹:睿智捷 | 小-RK2206 開發(fā)板套件

    睿智捷 | 小-RK2206 開發(fā)板套件是由福州市睿智捷電子有限公司出品,主控為瑞芯微
    發(fā)表于 04-21 13:39

    基于小開發(fā)板實現(xiàn)煙霧報警功能

    ,則輸出的模擬信號就越大。 使用MQ-2煙霧傳感器檢測周圍環(huán)境煙霧濃度,再通過小
    發(fā)表于 04-26 09:27

    【小RK2206開發(fā)板試用體驗】第3章 應用開發(fā)

    開發(fā)環(huán)境:開發(fā)系統(tǒng):Ubuntu 20.04開發(fā)板:小-RK2206開發(fā)板OpenHarmo
    發(fā)表于 05-08 14:07

    【小RK2206開發(fā)板試用體驗】鴻蒙應用開發(fā)和鴻蒙線程創(chuàng)建

    開發(fā)系統(tǒng):Ubuntu 20.04開發(fā)板:小-RK2206開發(fā)板OpenHARMony版本:3.0.0-LTS1應用實例簡介小
    發(fā)表于 05-25 01:32

    基于開發(fā)板的FastDeploy適配

    )目前,我已將FastDeploy適配到開發(fā)板上,可用于目標檢測、人臉檢測、人臉識別、人臉對齊、圖像分割、OCR等領域,這將大大提高
    發(fā)表于 02-16 09:43

    【ELF 1開發(fā)板試用】+傳感器檢測

    ELF 1開發(fā)板通過幾種傳感器的測試,如溫濕度、六軸傳感器等,而在配備功能擴展板的情況下,還能進行光照強度的檢測。 溫濕度檢測 ELF1
    發(fā)表于 11-29 11:59

    【ELF 1開發(fā)板試用】板載資源測試4:體驗溫濕度傳感器

    ,對比數(shù)據(jù),進一步理解傳感器檢測技術。2、從測試過程中理解了ELF 1開發(fā)板命令行操作方式。3、從測試過程中進一步熟悉了ELF 1開發(fā)板板載資源??傊?,飛
    發(fā)表于 12-18 11:09

    基于OpenHarmony系統(tǒng)和小RK2206開發(fā)板的避障小車

    這是一款基于OpenHarmony系統(tǒng)和小-RK2206開發(fā)板的避障小車。同時,小車上搭載了超聲波測距模塊、舵機模塊、紅外尋跡模塊、直流電機模塊。
    的頭像 發(fā)表于 04-21 07:58 ?4821次閱讀

    基于小煙霧報警功能的實現(xiàn)

    煙霧檢測傳感器使用的是MQ-2煙霧傳感器。MQ-2型煙霧傳感
    的頭像 發(fā)表于 04-26 16:16 ?1942次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>煙霧</b>報警功能的實現(xiàn)

    基于小RK2206開發(fā)板所制作的簡易示波器

    基于OpenHarmony + 小RK2206開發(fā)板制作的簡易示波器,實時采集波形,實時計算并實時顯示對應的波形。OpenHarmony實時性較高,穩(wěn)定性好,瑞芯微RK2206芯片接口豐富
    的頭像 發(fā)表于 05-06 17:09 ?1728次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b>RK2206<b class='flag-5'>開發(fā)板</b>所制作的簡易示波器

    利用小開發(fā)板自帶的wifi功能來進行tcp通信的教程

    基于小RK2206開發(fā)板wifi-tcp通信實驗 在開發(fā)過程中想要與開發(fā)板進行通信一般使用串口通信,當
    的頭像 發(fā)表于 05-13 15:05 ?2642次閱讀
    利用小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b>自帶的wifi功能來進行tcp通信的教程

    使用小開發(fā)板wifi進行tcp通信的步驟

    開發(fā)過程中想要與開發(fā)板進行通信一般使用串口通信,當開發(fā)板使用串口與pc通信還需要專門的串口轉換工具才行,而小
    的頭像 發(fā)表于 05-16 09:35 ?2175次閱讀

    用小開發(fā)板wifi進行udp通信的教程

    開發(fā)板與pc通信有很多形式,之前已經介紹過通過tcp通信,不過有些場合使用udp會更合適,因為udp沒有了tcp的握手與連接步驟,傳輸效率會高的多。例如通過wifi傳輸開發(fā)板采集到傳感器數(shù)據(jù)在PC端
    的頭像 發(fā)表于 05-31 16:43 ?3309次閱讀
    用小<b class='flag-5'>凌</b><b class='flag-5'>派</b><b class='flag-5'>開發(fā)板</b>wifi進行udp通信的教程

    基于小RK2206開發(fā)板wifi-udp通信實驗

    開發(fā)板與pc通信有很多形式,之前已經介紹過通過tcp通信,不過有些場合使用udp會更合適,因為udp沒有了tcp的握手與連接步驟,傳輸效率會高的多。例如通過wifi傳輸開發(fā)板采集到傳感器數(shù)據(jù)在PC端
    的頭像 發(fā)表于 06-01 10:33 ?801次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b>RK2206<b class='flag-5'>開發(fā)板</b>wifi-udp通信實驗

    基于小RK2206開發(fā)板wifi-tcp通信實驗

    基于小RK2206開發(fā)板wifi-tcp通信實驗在開發(fā)過程中想要與開發(fā)板進行通信一般使用串口通信,當
    的頭像 發(fā)表于 06-14 11:10 ?1208次閱讀
    基于小<b class='flag-5'>凌</b><b class='flag-5'>派</b>RK2206<b class='flag-5'>開發(fā)板</b>wifi-tcp通信實驗