这可能是最简单的stm32项目了,整个bom只有ds18b20温度传感器、stm32蓝丸板和一个最平常的4.7k电阻器,外加一款面包板和几根杜邦线。也许有人说这简直就是浪费stm32资源,我说这是入门砖,了解了基本原理后面就是缤纷世界。
ds18b20智能型防水温度传感器 ds18b20是一款智能型防水温度传感器,用于测量-55 to 125°c之间液体温度。由于每个ds18b20包含一个独立ip序列号,多个ds18b20可共用同一条1-wire总线。
ds18b20可以分别在93.75ms和750ms内完成9位和12位的数字量,信息读出或写入仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的ds18b20供电,而无需额外电源。
ds18b20传感器带有电缆和防水功能,可用来方便的测量潮湿环境,即使远距离测量也不会导致信号衰减,测量精度可达±0.5°c。ds18b20集成有12 bits adc,可通过一个简单的数字引脚与任何mcu接口。
ds18b20传感器的不足之处是采用的dallas 1-wire协议有些复杂,需要较多代码才能通信。使用中,还要采用一个4.7k电阻器从vcc对数据进行上拉。
ds18b20与stm32f103c接口 ds18b20与stm32f103c蓝丸板的接口电路很简单,传感器由stm32蓝丸的3.3v引脚供电,gnd引脚与蓝丸gnd连接。数字引脚经过4.7k电阻器上拉后,连接于蓝丸板的pa8引脚。
ds18b20数字温度计提供9-12位(可编程设备温度读数)。由于ds18b20是单线通信,与stm32f103c mcu连接只有一条线,读写以及温度转换所需能量也可以从数据线本身获得。
ds18b20 -stm32代码 让stm32蓝丸板读取ds18b20感测的温度信息,可以各种方法上传如下代码,例如使用usb-ttl转换器模块以串口上传。
int dspin = pa8;
void setup() {
// put your setup code here, to run once:
serial.begin(115200);
}
void loop()
{
// put your main code here, to run repeatedly:
double temp = tempread();
temp = temp * 0.0625; // conversion accuracy is 0.0625 / lsb
serial.print(temperature: );
serial.print(temp);
serial.println( °c);
serial.println();
delay(500);
}
boolean ds18b20_init()
{
pinmode(dspin, output);
digitalwrite(dspin, high);
delaymicroseconds(5);
digitalwrite(dspin, low);
delaymicroseconds(750);//480-960
digitalwrite(dspin, high);
pinmode(dspin, input);
int t = 0;
while (digitalread(dspin))
{
t++;
if (t > 60) return false;
delaymicroseconds(1);
}
t = 480 - t;
pinmode(dspin, output);
delaymicroseconds(t);
digitalwrite(dspin, high);
return true;
}
void ds18b20_write(byte data)
{
pinmode(dspin, output);
for (int i = 0; i >= 1;
delaymicroseconds(50);
digitalwrite(dspin, high);
}
}
byte ds18b20_read()
{
pinmode(dspin, output);
digitalwrite(dspin, high);
delaymicroseconds(2);
byte data = 0;
for (int i = 0; i >= 1;
if (digitalread(dspin)) data |= 0x80;
delaymicroseconds(55);
pinmode(dspin, output);
digitalwrite(dspin, high);
}
return data;
}
int tempread()
{
if (!ds18b20_init()) return 0;
ds18b20_write (0xcc); // send skip rom command
ds18b20_write (0x44); // send reading start conversion command
if (!ds18b20_init()) return 0;
ds18b20_write (0xcc); // send skip rom command
ds18b20_write (0xbe); // read the register, a total of nine bytes, the first two bytes are the conversion value
int temp = ds18b20_read (); // low byte
temp |= ds18b20_read () << 8; // high byte
return temp;
}
上述代码上传后,serial monitor就开始显示被测环境的的温度数值。
2019年度深圳市软件业务收入百家企业名单出炉,法本再入榜单
iPhone销量在中国仍高速增长 四季度营收或创纪录
步进电机运动规律及速度控制方法
可控硅过零触发调压器原理电路
全球首个1角硬币大小的太赫兹激光收发器具备X射线视觉效果
让STM32蓝丸板读取DS18B20感测的温度信息
如何使用分立元件构建双向开关?
统一通信基础设施对于远程工作有什么影响
奥拓电子推出全新的XR虚拟 SW-RGBW LED天幕屏
V2C MXene组件促进实用锂硫电池的硫释放动力学和锂离子筛分
数显糖度计的应用有哪些
亚马逊2023年净利润304亿美元
训练神经网络的五大算法
提高电动式喇叭音质的方法
接地电阻柜:电网系统的守护者
广州安捷伦电源66319b开机报错维修
什么是1G/2G/2.5G/3G? GSM? GPRS?
华为跑分事件获新进展 华为与3DMark达成共识将在未来开启性能模式
Vishay电容器荣获2021年度AspenCore全球电子成就奖
长江存储与第二届全国大学生集成电路创新创业大赛达成合作