用鸿蒙开发板制作一个空压机储气罐自动排水装置

开发 前端
文章由鸿蒙社区产出,想要了解更多内容请前往:51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com

[[403297]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

润和的Neptune开发板,是一块具有较高性价比的鸿蒙开发板,也可以应用于工业控制领域。

夏季到了,很多地方的空气比冬季潮湿了许多,于是压缩空气的含水量也大了起来,即使有冷干机,储气罐也常常会在罐底积留一部分水分,不及时排出,会影响工厂气路和气动元件的正常运行。更不用说没有冷干机的供气系统。储气罐在很多工厂还是人工排水,存在排水不及时和费时费工的弊端。这个夏季,我们就用鸿蒙开发板来完成储气罐的自动排水。

说干就干,先做准备:

1. 润和海王星 Neptune HH-SLNPT102 开发板一块。

2. 润和HiSpark_WIFI_IoT_OLED_VER.A显示板一块。

3. 润和HiSpark_WIFI_IoT_EXB_VER.A底板一块。

4. 电磁水阀一个,尺寸和储气罐下部的排水口匹配,管道根据储气罐现场配套。

5. 3.3v继电器一个,按钮两个,杜邦线若干,电源线。

6. 编辑,编译环境,Ubuntu20.04.2 LTS, 烧录 Windows环境SecureCRT

7. 程序框架,hihope/neptune_iot,1.0.1版(2021.04.29)

如图做好连接:

1. Neptune HH-SLNPT102 开发板和HiSpark_WIFI_IoT_OLED_VER.A显示板直接插在底板上。

2. 继电器线圈受PB_10控制,连接底板的D10, 3V3及GND.继电器的输出端控制电磁水阀的通断从而实现自动排水功能。

3. 蓝色按钮接底板的D1和GND,对应开发板的PB_06,每按下一次,电磁水阀关闭时间增加10分钟,最长间隔24小时。

4. 红色按钮接底板的D0和GND,对应开发板的PB_07,每按下一次,电磁水阀开启时间增加1秒钟,单次排水最长时间3分钟。

5. 开发板板载按钮PB_09按下一次,转换一种工作模式,分别是:常开,常闭,间歇排水模式。

主程序代码如下:

  1. #include <stdio.h> 
  2. #include <unistd.h> 
  3.  
  4. #include "ohos_init.h" 
  5. #include "cmsis_os2.h" 
  6. #include "wifiiot_gpio.h" 
  7. #include "wifiiot_gpio_ex.h" 
  8. #include "oled_ssd1306.h" 
  9. #include "wifiiot_gpio_w800.h" 
  10.  
  11.  
  12. int working = 0;  //电磁水阀工作状态 0/开  1/关 
  13. int m = 60;      //间歇工作电磁水阀关闭时间初始值1分钟 
  14. int n = 5;        //间歇工作电磁水阀开启时间初始值5秒 
  15. int times = 0;    //计时,秒为单位 
  16.  
  17. enum State 
  18.     ON = 0, 
  19.     OFF
  20.     SPARK, 
  21. }; 
  22.  
  23. enum State g_State = SPARK;  
  24.  
  25. static void DrainageTask(void *arg) 
  26.     (void)arg; 
  27.     OledInit(); 
  28.  
  29.     OledFillScreen(0x00); 
  30.     OledShowString(0, 1, "Air Comprwssor", 2); //开机显示2秒 
  31.     OledShowString(0, 5, "Auto Drainage", 2);  
  32.     osDelay(2000); 
  33.      
  34.     OledFillScreen(0x00); 
  35.     while (1) 
  36.     { 
  37.         OledShowString(0, 0, "****************", 2); 
  38.         OledShowString(0, 2, "* Auto Drainage*", 2); //OLED固定显示 
  39.         OledShowString(0, 4, "*              *", 2); 
  40.         OledShowString(0, 6, "*              *", 2); 
  41.         osDelay(500); 
  42.         static char line[32] = {0}; 
  43.         static char line1[32] = {0}; 
  44.         
  45.         switch (g_State) 
  46.         { 
  47.         case ON:  //电磁水阀常开工作模式 
  48.             GpioSetOutputVal(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_VALUE0); 
  49.             snprintf(line, sizeof(line), "*              *");  
  50.             snprintf(line1, sizeof(line1), "*  ON   ");  
  51.             break; 
  52.   
  53.         case OFF:  //电磁水阀常闭工作模式 
  54.             GpioSetOutputVal(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_VALUE1); 
  55.             snprintf(line, sizeof(line), "*              *");  
  56.             snprintf(line1, sizeof(line1), "*        OFF");  
  57.             break; 
  58.  
  59.         case SPARK:  //电磁水阀间歇工作模式 
  60.             times++;  
  61.             if (working == 0)   //排水定时控制 
  62.             { 
  63.                 snprintf(line, sizeof(line), "* ON Remaining");          
  64.                 snprintf(line1, sizeof(line1), "*   %d sec", n - times); //秒显示,倒计时 
  65.                 if (times<n) 
  66.                 { 
  67.                     GpioSetOutputVal(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_VALUE0); 
  68.                 } 
  69.  
  70.                 if (times>=n) 
  71.                 { 
  72.                     working = 1; 
  73.                     times = 0; 
  74.                 } 
  75.             } 
  76.             else   //电磁水阀关闭定时控制 
  77.             { 
  78.                 snprintf(line, sizeof(line), "*OFF Remaining");           
  79.                 snprintf(line1, sizeof(line1), "*   %d min", (m - times)/60);  //分钟显示,倒计时 
  80.                 if (times<m) 
  81.                 { 
  82.                     GpioSetOutputVal(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_VALUE1); 
  83.                 } 
  84.                 if (times>=m) 
  85.                 { 
  86.                     working = 0; 
  87.                     times= 0; 
  88.                 } 
  89.             }; 
  90.             break; 
  91.  
  92.         default
  93.             break; 
  94.         }  
  95.         OledShowString(0, 4, line, 2);  //OLED动态显示 
  96.         OledShowString(0, 6, line1, 2); //OLED动态显示 
  97.         osDelay(500);                
  98.     } 
  99.  
  100. static void GpioIsr(char *arg)  //板载按钮中断方式切换工作模式 
  101.     (void)arg; 
  102.     enum State nextState = SPARK; 
  103.     printf(" P9 Press!  \n"); 
  104.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_09, 1); 
  105.  
  106.     switch (g_State) 
  107.     { 
  108.     case ON
  109.         nextState = OFF
  110.         break; 
  111.  
  112.     case OFF
  113.         nextState = SPARK; 
  114.         break; 
  115.  
  116.     case SPARK: 
  117.         nextState = ON
  118.         break; 
  119.  
  120.     default
  121.         break; 
  122.     } 
  123.     g_State = nextState; 
  124.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_09, 0); 
  125.  
  126. static void F1(char *arg)  //外置F1按钮中断方式调整阀关闭时间,最长24小时,步长10分钟 
  127.     (void)arg; 
  128.     printf(" P6 Press!  \n"); 
  129.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_06, 1); 
  130.     if (m>86400) 
  131.     { 
  132.         m = 0 ; 
  133.     } 
  134.     m = m + 600 ; 
  135.     times = 0; 
  136.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_06, 0); 
  137.  
  138. static void F2(char *arg)  //外置F2按钮中断方式调整开启时间,最长3分钟,步长1秒 
  139.     (void)arg; 
  140.     printf(" P7 Press!  \n"); 
  141.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_07, 1); 
  142.  
  143.     if (n>180) 
  144.     { 
  145.         n = 0 ; 
  146.     } 
  147.     n = n + 1 ; 
  148.     times = 0; 
  149.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_07, 0); 
  150.  
  151. static void DrainageDemo(void) 
  152.     osThreadAttr_t attr; 
  153.  
  154.     
  155.     GpioInit(); 
  156.     GpioSetDir(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_DIR_OUTPUT);  //通过继电器控制电磁水阀。  底板的D10 
  157.  
  158.     GpioSetDir(WIFI_IOT_GPIO_PB_09, WIFI_IOT_GPIO_DIR_INPUT);   //开发版板载P9按钮,中断输入。 
  159.     IoSetPull(WIFI_IOT_GPIO_PB_09, WIFI_IOT_GPIO_ATTR_PULLHIGH); 
  160.     GpioRegisterIsrFunc(WIFI_IOT_GPIO_PB_09, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, GpioIsr, NULL); 
  161.      
  162.     GpioSetDir(WIFI_IOT_GPIO_PB_06, WIFI_IOT_GPIO_DIR_INPUT);  //外置P6按钮,中断输入。  底板的D1 
  163.     IoSetPull(WIFI_IOT_GPIO_PB_06, WIFI_IOT_GPIO_ATTR_PULLHIGH); 
  164.     GpioRegisterIsrFunc(WIFI_IOT_GPIO_PB_06, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F1, NULL); 
  165.  
  166.     GpioSetDir(WIFI_IOT_GPIO_PB_07, WIFI_IOT_GPIO_DIR_INPUT);  //外置P7按钮,中断输入。  底板的D0 
  167.     IoSetPull(WIFI_IOT_GPIO_PB_07, WIFI_IOT_GPIO_ATTR_PULLHIGH); 
  168.     GpioRegisterIsrFunc(WIFI_IOT_GPIO_PB_07, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2, NULL); 
  169.  
  170.     attr.name = "DrainageTask"
  171.     attr.attr_bits = 0U; 
  172.     attr.cb_mem = NULL
  173.     attr.cb_size = 0U; 
  174.     attr.stack_mem = NULL
  175.     attr.stack_size = 4096; 
  176.     attr.priority = osPriorityNormal; 
  177.  
  178.     if (osThreadNew(DrainageTask, NULL, &attr) == NULL
  179.     { 
  180.         printf("[DrainageDemo] Falied to create DrainageTask!\n"); 
  181.     } 
  182.  
  183. APP_FEATURE_INIT(DrainageDemo); 

 编译,下载,重启开发板后,显示和控制正常。按下板载PB_09按键,切换到常开模式,再按一次,切换到常闭模式,相应OLED屏做显示。

再按一次PB_09按键,进入间歇工作模式,每次电磁水阀开启一段时间进行排水(开启时间长短由红色按钮F2调整),关闭一段时间(时间长短由蓝色按钮F1调整),周而复始,实现空压机储气罐的自动排除底部积水。每次开启和关闭时间长短,可以根据各自压缩空气系统实际情况来调整。

Neptune开发板由于较高的性价比,在工业领域有广阔的应用空间。比如,本文的储气罐排水控制器还可以与空压机联动,也可以发挥网络功能实现远程监控等,期待广大鸿蒙开发者发掘更多的应用领域。

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2020-12-29 09:59:01

鸿蒙HarmonyOS智能家居

2020-10-30 17:12:05

Hi3861

2020-12-16 10:05:48

鸿蒙开发板Onenet平台

2020-11-17 12:15:36

MQTT开发

2020-12-02 11:55:40

OLED

2021-12-30 16:12:07

鸿蒙HarmonyOS应用

2020-10-27 10:00:26

鸿蒙开发板物联网

2020-11-19 10:25:24

MQTT

2020-12-10 12:12:32

鸿蒙开发板init_lite

2020-10-30 09:48:03

Hi3861开发板get请求

2020-11-26 12:02:07

OneNet平台

2020-12-07 12:34:33

开发板鸿蒙hello world

2021-01-07 11:24:51

鸿蒙HarmonyOS音乐

2020-11-03 09:53:04

体验官方固件程序

2020-11-25 11:55:47

FlappyBird

2021-02-01 13:58:51

鸿蒙HarmonyOS应用开发

2020-12-08 12:36:41

Hi3861 ADC驱动开发

2022-06-28 14:30:29

camera组件照片回传

2020-11-27 11:52:40

OneNet

2021-09-28 10:02:26

鸿蒙HarmonyOS应用
点赞
收藏

51CTO技术栈公众号