Re: [器材] 使用Arduino制作烘豆机控制盒-Part2 风扇控制&瓦斯读取

楼主: plzza0dogs (披萨猫的狗)   2021-11-13 20:40:05
主程式
软件的部基本上就是在山姆大提供的.ino中再额外多加一些不同功能的区块
https://github.com/Sam3258/TC4-Simulator/blob/master/UnoTC4/UnoTC4.ino
需要安装的Library从程式里面就可以看出端倪
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <MAX6675.h>
#include "SevSeg.h"
PWM风扇控制
第一步影片,讲解了关于可变电阻控制电压,经过Arduino侦测后输出不同的PWM控制灯泡
https://youtu.be/gczUU6O47mg
再看第二个影片,说明了各式风扇控制的方式与程式码,其中的4线PWM就是我们需要的程式
https://youtu.be/UJK2JF8wOu8
将这两个概念结合起来,我们就可以得到一个利用可变电阻(VR)控制PWM风扇的方法了
已经知道,电压读取值为0~1023,PWM讯号为0~255,所以在转换时可以用
读取值*(255/1023)来得到duty cycle,但是这样的数据并不实用,所以我改用另一种方
式将他以每5%为一个调节,0~100%就可以切成20块,1023/20=51 255/20=12.75,但是20
*12=240,所以可以再+1,另外风扇是有最低转速的,不是PWM=0就会停转,所以我们不需
要太在意过低的PWM输出,而且烘豆过程中也不适合风扇完全停转
因此我将算式改为
fan_pwm= 1+(FAN_CTRL_VR/50); //将电压值转换为Dutycycle
fan_pwm= fan_pwm*12;
另外经过测试,风扇最低转速约为960rpm,最高转为5000转
那么风扇的开度就是
fan_percent =fan_pwm*(5/12); //风门开度百分比
if(fan_percent<21) fan_percent=20;
if(fan_percent>99) fan_percent=100;
另外关于计算rpm的部分
while((millis()-fan_time)<500){}
fan_rpm = fan_count*60; //0.5s内的plus讯号*2*60/2 = 分钟转速
因为2个rise讯号是一次波的周期,所以要除以2,每60秒为一分钟,故*60,计算时间是5
00ms,乘以2才是1秒,所以*2*60/2=*60
在这个部分出现了一个奇怪的BUG,这个程式在我另外分开写的小程式内执行没有任何问
题,但当他被丢到主程式中,只要fan_count不经过Serial.xxxxx 就没有值,具体原因不
得而知,不过只要在在他后面加一句串口指令就可以解决了,问题不大,再者,风扇转速
其实没有什么参考价值,纯粹写身体健康的附加功能,没有的话也无所谓。
最后风扇的小程式如下
https://i.imgur.com/WJ0oqVI.jpg
瓦斯Bar值读取
瓦斯读取就简单多了,只是读类比值而已,当然为了避免浮动过大,还是将他进行多值平
均才吐出数值,利用millis(),让瓦斯的数值不断累加,累加1秒后才进行数值平均
https://i.imgur.com/d3oHaYt.jpg
作者: celtics1997 (山东之龙-禁邪赛鸽)   2021-11-13 21:33:00
豪棒
作者: mangobearx ( Mangobear)   2021-11-13 21:37:00
推一下 猛
作者: clutch5566 (56狂粉)   2021-11-13 22:24:00
很猛

Links booklink

Contact Us: admin [ a t ] ucptt.com