作者plzza0dogs (二兵 金 东 河 忠诚)
看板Coffee
标题Re: [器材] 使用Arduino制作烘豆机控制盒-Part2 风扇控制&瓦斯读取
时间Sat Nov 13 20:40:05 2021
主程式
软体的部基本上就是在山姆大提供的.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
-----待续-----
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.248.203.199 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Coffee/M.1636807207.A.D6F.html
※ 编辑: plzza0dogs (111.248.203.199 台湾), 11/13/2021 20:44:26
1F:嘘 celtics1997: 豪棒11/13 21:33
2F:推 mangobearx: 推一下 猛 11/13 21:37
3F:嘘 clutch5566: 很猛 11/13 22:24
※ 编辑: plzza0dogs (111.248.203.199 台湾), 11/13/2021 23:48:16