参考设计

收藏 

评论 

【毕设】基于阿里云IOT平台的智慧工厂设计-智能插排子项目

石榴姐 发布

## 项目要求 基于阿里云阿里云,实现从网页或者手机端或者是室内主机,控制工厂内的各种设备,包括不限于将室内的温湿度烟雾浓度上报到网页,同时获取室内用电器的电压电流功率等信息。需要注意的是,主机只有一个,从机可以多个,而且可以分布在几十米内的各种地方。 本工程讲解的是智能插排的设计,用于实现向网页端上报用电器的电压电流等信息,可以用在电动机上,进而实现上传电动机的电压电流功率等信息。 控制网页:zhgc.hdxy.xyz 插排界面在这 ![image.png] ## 题目分析 针对智能插排,选择了立创商城的HLW8032芯片,该芯片为国产,而且外围元器件少,同时数据手册十分详细。便于进行开发。 数据解析为了和蓝牙模块不产生冲突,使用Arduino的软串口功能,速度为4800mps,经测试十分稳定。 插排从大三开始绘制,已经改进到第四版,前三版为阻容降压,分压分流测电压电流,导致精度低,后采用互感器方案,使灵敏度和精度发生了质的飞跃。 程序,这咋字体自动变成黑色的了。。好吧,那这里当作分界线了!~~~~ 关于程序,屏幕显示使用SSD1306库文件,屏幕事先画好,再去写。 数据解析是通过软串口进行解析,保存到数组里,完成数据校验再去解析数据 关于显示屏幕:使用I2C0.96寸OLED屏幕,需要注意的是改屏幕和SPI的0.96寸屏幕,尺寸有一点不一样!这直接导致我画的外壳尺寸直接,巨丑! 关于外壳:使用立创EDA专业版,我靠,十分好画,基本1个小时就做出来外壳了,非常棒!!! 关于面板:面板是在立创商城打烊,根据3D外壳进行绘制,耗时30分钟,后期客服微信跟进十分细心负责。 设计流程: ## 1.1   芯片选型 HLW8032 是一款高精度的电能计量 IC,它采用 CMOS 制造工艺,主要用于单相应用。它能够测量线电压和电流,并能计算有功功率,视在功率和功率因素。该芯片使用UART通讯方式,免去校正,程序更加容易编写,且官方给了参考的非隔离采样电路。该芯片可测量有用功功率、电压、电流等。其测量误差稳定在0.5%以内,各项指标满足设计要求。 主控芯片采用Arduino,该芯片程序易编写,有软串口头文件,主频最大20MHZ,具有I2C,SPI,UART/USART接口,32KB程序存储器,输入电压1.8-5.5V,23个IO口。 串口芯片依旧采用CH340C,该芯片不用外接晶振,同时当供电电压为5V时,V3引脚要外接退耦电容,供电为3.3V时候,V3连接3.3V。 隔离芯片使用ORPC-817D光耦,该芯片响应时间4微秒,输入电流50毫安,用于隔离信号。 | ![image.png] | | --- | | 图 6‑1 | 串口复用使用RS2228XN芯片,如图 6‑1 该芯片为模拟开关,工作电压为0-6V,带宽550MHZ开启最快时间为20纳秒,关闭最短时间为15纳秒,符合要求。蓝牙工作会占用串口,此时下载程序会报错。使用该模拟开关芯片,可以在蓝牙模块工作时,断开蓝牙数据流,将计算机下载数据接通,从而完成下载。将模拟开关控制端将其连接到CH340的DLS引脚,该引脚在有下载信号时会被拉低,下载完成会被拉高,从而可以控制开关切换。将模拟开关OE使能端拉低,使其进入工作状态,当S接入高电平时,HSD1接通,S接入低电平时HSD2接通。 ## 电路设计 插排电流分为功率测量模组、降压模组、主控芯片、插排电源控制电路、模拟开关与2.4G ### 功率测量模组 HLW8032采用UART通信,速率为4800bps,时间间隔为50MS,其数据格式如图所示: ![image.png]


电量计算: PF寄存器输出脉冲,当PF寄存器发生溢出将取反Data Updata REG的第7位,PF寄存器内数据清零,脉冲信号数量为: ![image.png]

K为数据更新寄存器取反次数,n是当前数据寄存器的数值,因此一度电所对应脉冲数量为: ![image.png]

当PFcnt的个数为1度电的脉冲数量时,则表示已经累计统计一度电,则当前电量为: ![image.png] 本项目使用互感器,需要进行校准,校准使用标准已知负载即可,下图在代码块“***重要的串口解析,软串口接收数据校验后,进行计算,2.96与2.70是反向计算得到的***”里会用到 ![image.png] 提示:总体设计方案框图





数据流 ![image.png] ## 原理图设计说明 提示:说明作品中模块的设计原理图,需要配上原理图,最好是有实物图一起,每个模块都需要说明,如不需要设计的,请说明获取来源。






电流互感器: ![image.png] 可以看到CN1输入的交流电,直接通过互感器输出,电线粗一点。电压互感器(黑色) ![image.png] ![image.png] 测量芯片,测量芯片的外围电路,PCB上都在一块放置。 ![image.png]
![image.png] 插排开关控制,使用了槽型光耦隔离,驱动mos从而控制继电器,D1二极管,为了保护mos,继电器断开真的会产生反向电动势。 下面是原理图pcb实物三件套展示 ![image.png] ![image.png] ![image.png] ## PCB设计说明 提示:这里写PCB的一些设计说明,如:PCB的布局、布线、线宽、间距等设计注意事项






PCB交流电走线要求粗一点,电流大小可以参考下表: ![image.png] 交流电最好开槽,实际上不开槽对整个电路没有显著影响,测试可以正常使用。 ## 软件说明 提示:软件可以使用代码块来进行嵌套放置,无需全部软件部分说明,只需说明重要部分即可


``` 代码块: 引入一些头文件,并且声明一些变量 #include #include #include #include Adafruit_SSD1306 display(128, 64, &Wire, 10); #define ENCODER_A_PIN 3 #define ENCODER_B_PIN 5 #define SWITCH_PIN    9 #include //实例化软串口 SoftwareSerial mySerial(2, 10); // RX, TX #include #include long int RXcode[22]; long Voltage_parameter_reg = 0; //电压参数寄存器 long Voltage_reg = 0; //电压寄存器 long Current_parameter_reg = 0; //电流参数寄存器 long Current_reg = 0; //电流寄存器 long Power_parameter_reg = 0; //功率参数寄存器 long Power_reg = 0; //功率寄存器 long Data_update_register = 0; //数据更新寄存器 long Pf_pulse_data = 0; //PF脉冲数据 int check = 0; int sw = 0; float Voltage = 60.0; float Current = 60.0; float Power = 60.0; float KWH = 60.0; unsigned char keyValue = 0; 因为使用EC11所以定义按键的结构体 typedef struct { unsigned char index; unsigned char up; unsigned char down; unsigned char right; void (*operation)(void); } KEY_TABLE; *定义菜单结构 unsigned char funIndex = 0; void (*current)(void); void menu00(); void menu11(); void menu12(); void menu13(); void menu21(); void menu22(); void menu23(); void menu31(); void menu32(); void menu33(); void URAT(); void SWPOW(); 定义跳转逻辑关系 //定义按键操作数据 KEY_TABLE table[10] = { {0, 1, 1, 1, (*menu00)}, {1, 3, 2, 4, (*menu11)}, {2, 1, 3, 5, (*menu12)}, {3, 2, 1, 6, (*menu13)}, {4, 4, 4, 1, (*menu21)}, {5, 9, 9, 7, (*menu22)}, {6, 6, 6, 3, (*menu23)}, {7, 8, 8, 5, (*menu31)}, {8, 7, 7, 2, (*menu32)}, {9, 5, 5, 2, (*menu33)}, }; 编写其中一个菜单* //一级菜单1 void menu11(void)//用电检测 { display.clearDisplay();//清屏 display.setTextSize(2); //设置字体大小 display.setCursor(18, 1);//设置显示位置 display.println("-Menu11-"); display.drawBitmap(0, 20, jt, 16, 16, 1); //箭头 display.drawBitmap(28, 20, str11, 16, 16, 1); //用 display.drawBitmap(44, 20, str12, 16, 16, 1); //电 display.drawBitmap(70, 20, str13, 16, 16, 1); //检 display.drawBitmap(86, 20, str14, 16, 16, 1); //测 display.drawBitmap(28, 40, str21, 16, 16, 1); //开 display.drawBitmap(44, 40, str22, 16, 16, 1); //关 display.drawBitmap(70, 40, str23, 16, 16, 1); //控 display.drawBitmap(86, 40, str24, 16, 16, 1); //制 display.display(); // 开显示 } 重要的串口解析,软串口接收数据校验后,进行计算,2.96与2.70是反向计算得到的 if (mySerial.read() == (check & 0x000000FF)) //校验 { Voltage = (float((RXcode[0] * 65536 + RXcode[1] * 256 + RXcode[2])) / float((RXcode[3] * 65536 + RXcode[4] * 256 + RXcode[5]))) * 2.96 ; Current = (float((RXcode[6] * 65536 + RXcode[7] * 256 + RXcode[8])) / float((RXcode[9] * 65536 + RXcode[10] * 256 + RXcode[11]))) * 1.0; Power = (float((RXcode[12] * 65536 + RXcode[13] * 256 + RXcode[14])) / float((RXcode[15] * 65536 + RXcode[16] * 256 + RXcode[17]))) * 2.70; KWH = ((RXcode[19] * 256 + RXcode[20]) * ((RXcode[12] * 65536 + RXcode[13] * 256 + RXcode[14]) * 2.96 * 1.0)) / (3600 * 1000000000); } 主循环 void setup() { pinMode(4, OUTPUT); mySerial.begin(4800); // Serial.begin(4800); pinMode(ENCODER_A_PIN, INPUT); pinMode(ENCODER_B_PIN, INPUT); pinMode(SWITCH_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(3), ec11, FALLING); // Serial.begin(9600); // MsTimer2::set(500, screen); // MsTimer2::start(); display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.setTextColor(WHITE);//开像素点发光 display.clearDisplay();//清屏 vc menu00(); // delay(5000); } void loop() { if (digitalRead(SWITCH_PIN) == 0) { delay(100); if (digitalRead(SWITCH_PIN) == 0) keyValue = 2; } if (keyValue != 0) { switch (keyValue)//获取按键对应序号 { case 2: funIndex = table[funIndex].right; break; case 3: funIndex = table[funIndex].down; break; case 4: funIndex = table[funIndex].up; break; } current = table[funIndex].operation;//根据需要获取对应需要执行的函数 (*current)();//执行获取到的函数 } keyValue = 0; } ``` 关于屏幕可以参考这篇博客[https://blog.csdn.net/TonyIOT/article/details/104013813](https://blog.csdn.net/TonyIOT/article/details/104013813)






关于软串口:[https://www.arduino.cn/forum.php?mod=viewthread&tid=47262&highlight=软串口](https://www.arduino.cn/forum.php?mod=viewthread&tid=47262&highlight=%E8%BD%AF%E4%B8%B2%E5%8F%A3)






关于HLW8032资料:[https://item.szlcsc.com/139306.html](https://item.szlcsc.com/139306.html)






关于自定义封装:[https://docs.lceda.cn/cn/PCBLib/PCBLib-Create/index.html](https://docs.lceda.cn/cn/PCBLib/PCBLib-Create/index.html)

## 实物展示说明 提示:作品的实物图片,图片可以加上说明。

在这讲讲外壳面板吧

![image.png]






这个是画的外壳,就是可能有小伙伴不知道开槽和基准线啥关系,可以这样想,基准线就是模型的最下面的那根线,开的槽会绕轴旋转90度。 ![image.png] ![image.png] ![image.png]

![image.png]

![image.png]

面板就是导出顶层丝印DXF文件,找好大小,屏幕画错了,呜呜呜

![image.png]

## 注意事项 提示:这里说明作品在制作中需要注意的一些注意事项(没有可以不写)

本工程是毕业设计的一个子项目节点,黄框里面的。






网址: zhgc.hdxy.xyz [毕业设计展示网页](zhgc.hdxy.xyz)

![image.png]

交流电危险!给大家看看我设计屏幕时候的思路

![image.png]

## 演示视频 视频链接同步到B站 [https://www.bilibili.com/video/BV18T4y1i7D5/](https://www.bilibili.com/video/BV18T4y1i7D5/) 附件也可以下载视频 ## 其它附件上传 考虑许久本着开源的精神,分享源代码给大家,烧录就可以使用。



参考设计图片
相关器件
器件 类型 描述 数据手册
AC0805JR-07470RL 贴片电阻 阻值(欧姆):470 精度:±5% 功率:1/8W 温度系数:±100ppm/°C 点击下载
AP2300 MOS(场效应管) 漏源电压(Vdss):20V 连续漏极电流(Id)(25°C 时):5.2A(Tc) 栅源极阈值电压:1.5V @ 250uA 漏源导通电阻:35mΩ @ 5.2A,2.5V 最大功率耗散(Ta=25°C):1.25W(Tc) 类型:N沟道 N沟道 点击下载
ORPC-817D 光耦 输入类型:- 通道数目:1 隔离电压:5000Vrms 产品类型:晶体管输出 点击下载
PTFR0805B470KN9 贴片高精密、低温漂电阻 阻值(欧姆):470K 精度:±0.1% 功率:130mW 温度系数:- 点击下载
HLW8032 电量计芯片 HLW8012的升级版串口输出所有数据 点击下载
ZMCT103C 互感器 黑色 精密电流互感器,5A/5mA。 点击下载
1206W4F100KT5E 贴片电阻 阻值(欧姆):1 精度:±1% 功率:1/4W 温度系数:±800ppm/°C 点击下载
1206W4F510JT5E 贴片电阻 阻值(欧姆):51 精度:±1% 功率:1/4W 温度系数:±200ppm/°C 点击下载
0805W8F1001T5E 贴片电阻 阻值(欧姆):1K 精度:±1% 功率:1/8W 温度系数:±100ppm/°C 点击下载
CC0805KRX7R9BB333 贴片电容 精度:±10% 容值:33nF 额定电压:50V 温漂系数(介质材料):X7R 材质:X7R 点击下载
CL21A106KOQNNNE 贴片电容 精度:±10% 容值:10uF 额定电压:16V 温漂系数(介质材料):X5R 材质:X5R 点击下载
CC0805ZRY5V9BB104 贴片电容 精度:-20%,+80% 容值:100nF 额定电压:50V 温漂系数(介质材料):Y5V 材质:Y5V 点击下载
25121WF1503T4E 贴片电阻 阻值(欧姆):150K 精度:±1% 功率:1W 温度系数:±100ppm/°C 点击下载
ZMPT107-1 互感器 精密电压互感器,2mA/2mA,用于隔离精确测量交流电压,通过开关通断进行峰值调制后可测隔离的直流模拟电压 点击下载
0402CG220J500NT 贴片电容 精度:±5% 容值:22pF 额定电压:50V 温漂系数(介质材料):C0G 材质:C0G 点击下载
XIHCELNANF-16MHZ 直插晶体谐振器(无源) 频率公差:±30ppm 负载电容值:20pF 主频:16MHz 等效串联电阻(ESR):30 Ohm(Max) - 点击下载
ATMEGA328P-AU ATMEL(爱特梅尔)/AVR 工作电压:1.8V ~ 5.5V CPU位数:8-Bit CPU内核:AVR 主频(MAX):20MHz ROM类型:FLASH ATmega Series 20 MHz 32 KB Flash 2 KB SRAM 8-Bit Microcontroller - TQFP-32 点击下载
NF-04 无线模块 低成本NF-04台产芯片 功率加强版 最佳通讯距离240米,2.4G无线通讯模块 点击下载
群聊设计,与管理员及时沟通

欢迎加入EEWorld参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld1”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeword1”及时沟通。

相关项目
电路图 更多>
下载中心 更多>
大学堂 更多>
论坛推荐 更多>
Datasheet 更多>