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

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

创新互联致力于互联网品牌建设与网络营销,包括成都网站制作、网站建设、SEO优化、网络推广、整站优化营销策划推广、电子商务、移动互联网营销等。创新互联为不同类型的客户提供良好的互联网应用定制及解决方案,创新互联核心团队10多年专注互联网开发,积累了丰富的网站经验,为广大企业客户提供一站式企业网站建设服务,在网站建设行业内树立了良好口碑。

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

https://harmonyos.

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

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

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

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

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

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

https://harmonyos.

分享名称:用鸿蒙开发板制作一个空压机储气罐自动排水装置
链接地址:http://www.shufengxianlan.com/qtweb/news46/515796.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联