0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

全工位氢氧根离子监测站

迪文智能屏 2024-03-29 08:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

——来自迪文开发者论坛

本期为大家推送迪文开发者论坛获奖开源案例——全工位氢氧根离子监测站工程师采用7英寸串口屏,通过RS485RS232接口与外设通讯,实现水中氢氧根离子含量检测。可应用于电厂污水、纺织污水、池塘污水检测等场景,降低人工采集成本,测试精准度高。


UI素材展示

00973eae-ed61-11ee-9118-92fbcf53809c.png

00ab18de-ed61-11ee-9118-92fbcf53809c.png

UI开发示例

00b697a4-ed61-11ee-9118-92fbcf53809c.png

C51代码设计 机械臂核心操作代码:

#ifndef __BASE_H__#define __BASE_H__#include "sys.h"
#define BASE_SHAKE_CNT_DEF 12#define BASE_CLEAN_TIME_DEF 3
u8 base_shake(u16 cnt,u16 quit_code);u8 base_clean(u16 clean_time, u16 quit_code);u8 base_air_dry(u16 quit_code);u8 base_select_sample(u8 pos,u8 is_clean,u16 quit_code);
#include "base.h"#include "motor.h"#include "test.h"#include "params.h"
u8 base_shake_x_or_y(u8 is_x,u16 cnt,u16 quit_code){ #define SHAKE_STEP 300 #define SHAKE_DELAY 400 s16 cur_step = 0;u8res=0; if(cur_motor_pos==MOTOR_POS_CLEAN) return0; while(cnt--) { if(cur_step==0) cur_step = SHAKE_STEP; else if(cur_step>0) cur_step = SHAKE_STEP*-2; else cur_step = SHAKE_STEP*2; if(is_x) { motor_set_dir((cur_step<0?MOTOR_DIR_FORWARD:MOTOR_DIR_BACKWARD),MOTOR_DIR_SKIP,MOTOR_DIR_SKIP);                        motor_move((cur_step<0?-cur_step:cur_step),0,0);                }else                {                        motor_set_dir(MOTOR_DIR_SKIP,(cur_step<0?MOTOR_DIR_FORWARD:MOTOR_DIR_BACKWARD),MOTOR_DIR_SKIP);                        motor_move(0,(cur_step<0?-cur_step:cur_step),0);                                        }                sys_delay_ms(SHAKE_DELAY);                if(func_code_scan()==quit_code)                {                        res = 1;                        break;                }                }             if(cur_step!=0)        {                if(is_x)                {                        motor_set_dir((cur_step<0?MOTOR_DIR_BACKWARD:MOTOR_DIR_FORWARD),MOTOR_DIR_SKIP,MOTOR_DIR_SKIP);                        motor_move(SHAKE_STEP,0,0);                }else                {                        motor_set_dir(MOTOR_DIR_SKIP,(cur_step<0?MOTOR_DIR_BACKWARD:MOTOR_DIR_FORWARD),MOTOR_DIR_SKIP);                        motor_move(0,SHAKE_STEP,0);                                        }                sys_delay_ms(SHAKE_DELAY);        }        return res;}
u8 base_shake(u16 cnt,u16 quit_code){ if(base_shake_x_or_y(1,cnt,quit_code)) return 1; if(base_shake_x_or_y(0,cnt,quit_code)) return2; return 0;}
u8 base_clean(u16 clean_time, u16 quit_code){ #define FULL_TIME (sys_params.full_time) #define EMPTY_TIME (FULL_TIME+25) #define BASE_UNIT 200 u8 res = 0;u8time;motor_select_sample(MOTOR_POS_CLEAN); WASTE_PUMP_OFF(); WATER_PUMP_ON(); time = FULL_TIME; while(time--) { sys_delay_ms(BASE_UNIT); if(func_code_scan()==quit_code) { res = 1; break; }} if(clean_time) { WASTE_PUMP_ON(); while(clean_time--) { sys_delay_ms(1000); if(func_code_scan()==quit_code) { res = 1; break; } } } WASTE_PUMP_ON(); WATER_PUMP_OFF(); time = EMPTY_TIME; while(time--) { sys_delay_ms(BASE_UNIT); if(func_code_scan()==quit_code) res = 3; } WASTE_PUMP_OFF(); if(res==0) { test_update_sta(WORK_STA_AIR_DRY); res = base_air_dry(quit_code); } return res;}
u8 base_air_dry(u16 quit_code){ #define AIR_DRY_TIME (sys_params.air_dry_time) u8 res = 0;u8sec; AIR_PUMP_ON(); sec = AIR_DRY_TIME; while(sec--) { sys_delay_ms(1000); if(func_code_scan()==quit_code) { res = 1; break; } } AIR_PUMP_OFF(); return res;}
u8 base_select_sample(u8 pos,u8 is_clean,u16 quit_code){ if(is_clean) { test_update_sta(WORK_STA_CLEAN); if(is_testing) { work_sta = WORK_STA_TEST_STEP_1; if(test_upload_data()) return 1; } if(base_clean(BASE_CLEAN_TIME_DEF, quit_code)) return 1; } if(is_testing) { work_sta = WORK_STA_TEST_STEP_2; if(test_upload_data()) return 1;} test_update_sta(WORK_STA_MOVE); motor_select_sample(pos); if(func_code_scan()==quit_code) return2; test_update_sta(WORK_STA_SHAKE); if(base_shake(BASE_SHAKE_CNT_DEF,quit_code)) return 3; if(func_code_scan()==quit_code) return4; return 0;}

测试相关的代码:

bitis_complete_tip=0;u16 complete_tip_time = 0;u8 cur_bottle_no = 0;u8 cur_completed_num = 0;u8 total_sample_num = NUM_OF_GROUP_DEF;u8 cur_work_sta = WORK_STA_IDLE;u8 last_result[LAST_RESULT_MAX_LEN] = {"--------\0\0"};u8 is_testing = 0;u8is_normal_completed=0;u8test_make(u16quit_code);
//开始测试void test_start(u16 quit_code){u16val; is_testing = 1; is_complete_tip = 0; cur_work_sta = WORK_STA_CLEAN; cur_completed_num = 0; cur_bottle_no = start_bottle_no; score = SCORE_UNKNOW; val = 1; sys_write_vp(MAIN_WIN_START_BTN_VP,(u8*)&val,1); main_win_update(); is_normal_completed = !test_make(quit_code); if(is_normal_completed) { test_update_sta(WORK_STA_CLEAN); base_clean(BASE_CLEAN_TIME_DEF, quit_code); } motor_select_sample(MOTOR_POS_PROTECT); cur_work_sta = (is_normal_completed?WORK_STA_ALL_COMPLETED:WORK_STA_IDLE); cur_bottle_no = 0; val = 0; sys_write_vp(MAIN_WIN_START_BTN_VP,(u8*)&val,1); main_win_update(); if(is_normal_completed) { is_complete_tip = 1; complete_tip_time = COMPLETE_TIP_MAX_TIME; sys_goto_win(WIN_ID_MAIN); sys_delay_ms(100); sys_click_pos(2,13); } is_testing = 0; is_stable = 0; check_stable_tick = 0; val = 0; sys_write_vp(BTN_VAL_ADDR,(u8*)&val,1); work_sta = WORK_STA_TEST_STEP_COMPLETED; test_upload_data();}
//测试流程u8 test_make(u16 quit_code){ u8 pos; u8 offset; float sum = 0; float max = -999999; float min = 999999; u8 index = 0; u8 end_pos; end_pos = total_sample_num+start_bottle_no-1; for(pos=(start_bottle_no-1);pos{ if(base_select_sample(pos,!(is_group&&(index%num_of_group)),quit_code))return1; cur_work_sta = WORK_STA_ANALYSIS; main_win_update(); if(is_testing) { work_sta = WORK_STA_TEST_STEP_3; if(test_upload_data()) return 1; } check_stable_tick = 1; is_stable = 0; stable_val = 999999; while(1) { if(is_stable) break; if(func_code_scan()==quit_code) return 2;} score = SCORE_UNKNOW; memset(last_result,0,LAST_RESULT_MAX_LEN); sprintf(last_result,"%.3f",cur_ph); if(is_group&&(invalid_num_of_group { offset = index%num_of_group; if(offset>=invalid_num_of_group) { sum += cur_val;//对有效点累加求和 if(cur_val>max) max = cur_val; if(cur_val min = cur_val; } if((offset+1)==num_of_group) { sum /= (num_of_group-invalid_num_of_group); score = ((max-min) sum = 0; max = -999999; min = 999999; } } cur_completed_num++; if(is_testing) { work_sta = WORK_STA_TEST_STEP_4; if(test_upload_data()) return 1; } cur_bottle_no++; if(cur_bottle_no>end_pos) cur_bottle_no = 0; main_win_update(); index++;} return 0;}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 检测
    +关注

    关注

    5

    文章

    4991

    浏览量

    94452
  • 监测
    +关注

    关注

    2

    文章

    4533

    浏览量

    47746
  • 迪文屏
    +关注

    关注

    3

    文章

    94

    浏览量

    6107
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    德希科技微型水质监测站

    水环境监测是水资源保护与污染防控的重要基础。传统站房式监测站占地广、建设慢、运维成本高、点位难以灵活调整,难以支撑全域网格化监测。微型水质监测站以集成化、低功耗、易部署设计,为河流、湖
    的头像 发表于 03-19 11:36 243次阅读
    德希科技微型水质<b class='flag-5'>监测站</b>

    从单一到综合:多功能自动气象监测站

    监测站
    pingao141378
    发布于 :2025年12月18日 10:44:14

    光伏总辐射监测站:开启绿色能源“智慧眼”​

    光伏总辐射监测站:开启绿色能源“智慧眼”​柏峰【BF-GFQX】一、探秘光伏总辐射监测站​ 在全球积极践行绿色发展理念、大力推进清洁能源转型的时代浪潮中,光伏发电凭借其清洁、可再生、取之不尽用之不竭等显著优势,
    的头像 发表于 11-03 09:30 3208次阅读
    光伏总辐射<b class='flag-5'>监测站</b>:开启绿色能源“智慧眼”​

    GNSS位移监测站:地质安全的“毫米级哨兵”

    GNSS位移监测站:地质安全的“毫米级哨兵”柏峰【BF-GNSS】在地质灾害预警、大型工程安全监测、地壳形变研究等领域,GNSS位移监测站凭借全天候、高精度、自动化的特性,实现对地表及结构体微小位移的实时捕捉,
    的头像 发表于 10-23 15:48 654次阅读
    GNSS位移<b class='flag-5'>监测站</b>:地质安全的“毫米级哨兵”

    分布式光伏环境监测站的技术架构与应用实践

    分布式光伏环境监测站的技术架构与应用实践 柏峰【BF-GFQX】一、系统技术架构解析 分布式光伏环境监测站采用“感知层-传输层-应用层”三层架构设计,实现环境数据的链路智能化处理。
    的头像 发表于 10-13 10:05 855次阅读
    分布式光伏环境<b class='flag-5'>监测站</b>的技术架构与应用实践

    太阳辐射综合监测站:解码阳光

    太阳辐射综合监测站:解码阳光 柏峰【BF-GFQX】在新能源开发与气候变化研究领域,太阳辐射综合监测站是解码阳光的“能量观测站”。它以高精度、多维度的监测能力,捕捉太阳辐射的细微变化,
    的头像 发表于 09-24 11:30 823次阅读
    太阳辐射综合<b class='flag-5'>监测站</b>:解码阳光

    降雨量监测站:气象水文监测的“基础感知单元”

    降雨量监测站:气象水文监测的“基础感知单元”柏峰【BF-YL】在气象观测与水文监测网络中,降雨量监测站是获取基础雨量数据的“核心感知单元”。它通过专业传感设备实时采集降雨量
    的头像 发表于 09-23 10:26 752次阅读
    降雨量<b class='flag-5'>监测站</b>:气象水文<b class='flag-5'>监测</b>的“基础感知单元”

    雷达水文监测站:智慧水文监测的技术革新与应用实践

    雷达水文监测站:智慧水文监测的技术革新与应用实践 柏峰【BF-LDSW】在全球气候变化与极端水文事件频发的背景下,传统水文监测手段面临着监测范围有限、实时性不足、恶劣环境适应性差等诸多
    的头像 发表于 09-16 10:13 1130次阅读
    雷达水文<b class='flag-5'>监测站</b>:智慧水文<b class='flag-5'>监测</b>的技术革新与应用实践

    阵列式雷达流量监测站-案例分享

    阵列式雷达流量监测站是一种利用阵列雷达技术进行非接触式流量监测的设备,广泛应用于水文监测、城市排水、智慧水务、环境监测等领域。它通过发射和接收电磁波,测量河流、渠道、管道、明渠等场景中
    的头像 发表于 09-11 16:31 1575次阅读
    阵列式雷达流量<b class='flag-5'>监测站</b>-案例分享

    北斗生态环境监测站:读懂自然的 “语言”

    北斗生态环境监测站:读懂自然的 “语言”柏峰【BF-BDQX】当生态监测遇上北斗技术,一场关于 “精准守护自然” 的变革正悄然发生 ——北斗生态环境监测站以北斗定位导航系统为核心
    的头像 发表于 09-04 10:59 718次阅读
    北斗生态环境<b class='flag-5'>监测站</b>:读懂自然的 “语言”

    大气负氧离子监测站技术方案

    大气负氧离子监测站技术方案 柏峰【BF-FLZ】大气负氧离子监测站旨在实现对环境中负氧离子浓度的精准、实时、长期
    的头像 发表于 08-19 09:32 1054次阅读
    大气负氧<b class='flag-5'>离子</b><b class='flag-5'>监测站</b>技术方案

    扼流圈 GNSS 位移监测站如何守护工程安全?

    扼流圈 GNSS 位移监测站如何守护工程安全?柏峰【BF-GNSS】在地质灾害预警、大型工程监测领域,毫米级的位移变化可能隐藏着巨大风险。传统的人工巡检不仅效率低下,更难以捕捉细微的形变信号。
    的头像 发表于 08-08 15:25 1026次阅读
    扼流圈 GNSS 位移<b class='flag-5'>监测站</b>如何守护工程安全?

    GNSS位移监测站边坡位移地质灾害监测预警方案

    GNSS位移监测站边坡位移地质灾害监测预警方案 柏峰 【BF-GNSS】关于地质灾害监测预警系统,有以下几个重要的方面来分析:
    的头像 发表于 07-31 09:11 1060次阅读
    GNSS位移<b class='flag-5'>监测站</b>边坡位移地质灾害<b class='flag-5'>监测</b>预警方案

    自动雨量监测站:捕捉雨情的 “智慧眼睛”

    自动雨量监测站:捕捉雨情的 “智慧眼睛” 柏峰【BF-YL】在气象万千的大自然中,降雨作为一种常见却又对人类生活、生产有着重大影响的天气现象,其监测数据的精准获取至关重要。
    的头像 发表于 07-18 16:34 756次阅读
    自动雨量<b class='flag-5'>监测站</b>:捕捉雨情的 “智慧眼睛”

    雨量监测站

    监测站
    斯塔克物联科技
    发布于 :2025年07月09日 10:20:17