×

采用Toit和ESP32打造的温控风扇

消耗积分:2 | 格式:zip | 大小:0.55 MB | 2022-11-02

李秀兰

分享资料个

描述

背景

夏天到了!夏天来了……特别是在我的卧室里。问题是,在阳光明媚的一天后该睡觉的时候,我卧室的温度在 30°C 以上,但当我早上醒来时,却是冰冷的。解决方法:温控风扇!这个想法是有一个风扇,可以在晚上最大限度地提高空气流通,并随着温度的下降逐渐降低速度。此外,最好有一个显示当前温度和温度历史的显示器。

托伊特

与其浪费宝贵的时间设置外围设备和通信,我们将在这个上选择 Toit。这为构建增加了独特的响应能力。借助 Toit 平台,开发人员可以将 ESP32 视为普通计算机,使用系统内置的 OTA 功能并行安装多个应用程序。由于 Toit 使用高级语言,因此可以轻松测试功能和应用程序,而 Toit 平台可确保设备无论如何都能正常运行。

开始使用 Toit

首先,您需要获得一个 Toit 帐户并使用 Toit 配置您的 ESP32:在toit.io上单击“立即开始”获得一个免费的 Toit 帐户。

poYBAGNhz52ALAXOAAJilaiwCy4129.png
 

登录后,转到文档并按照快速入门指南在您的计算机上安装 Toit

请注意,您可以使用 Web 用户界面轻松配置 ESP32

注意:配置 ESP32 后,它会上线并且不需要连接到您的计算机,除非您想通过 USB 为其供电。所有通信都通过 Toit 云进行。

现在你已经准备好连接一些硬件了!

连接硬件

在下面,您将看到所有连接的 Fritzing 电路。请注意,L298H 板上的 5VEN 跳线应闭合。这意味着该板将由 6V 电池组供电。另外,在直流电机的端子之间加一个 0.1 uF 的电容。这减少了由电机引起的电噪声。

poYBAGNhz6uAJzuLAAQhPOBE_8g238.jpg
 

使用了以下 ESP32 GPIO 引脚:

  • GPIO 16 - L298H 电机驱动板上的 IN1 引脚
  • GPIO 17 - L298H 电机驱动板上的 IN2 引脚
  • GPIO 19 - L298H 电机驱动板上的 ENA(启用)引脚
  • GPIO 21 - BME280 传感器板和 OLED 显示屏上的 SDA
  • GPIO 22 - BME280 传感器板和 OLED 显示屏上的 SCL

L298H 上的 IN1(输入 1)和 IN2(输入 2)控制电机旋转方向如下:

pYYBAGNhz6-ASlpiAABdlEAeBRQ354.png
 

ENA(启用)启动和停止电机。如果将 PWM 信号应用于此输入,则电机以相应的速度旋转。请注意,如果 PWM 设置得非常低,电机将不会启动,并且您可能会听到它发出滴答声,因为输入电机的功率不足以使其旋转。对于此设置,PWM > 0.16 足以启动发动机。

BME280 传感器和 ESP32 通过 I2C 进行通信,由于 Toit 为该传感器提供了驱动程序,因此使用它非常简单:只需将其连接到相应的 GPIO 即可。OLED 显示屏也是如此:只需将 SDA 和 CLK 连接到相应的 GPIO,就可以了。但是,市面上有大量基于 SSD1306 的 OLED 显示器,它们可能有不同的功率要求。此构建中使用的电路板需要 5V 至 Vin。3.3V 是不够的。在此处阅读更多信息:https ://learn.adafruit.com/monochrome-oled-breakouts/power-requirements

托特守则

首先,我们需要安装 OLED 显示屏和 BME280 传感器所需的软件包。在命令提示符下,在 Toit 代码所在的文件夹中,运行以下命令:

$ toit pkg init --app
$ toit pkg install pixel_display
$ toit pkg install ssd1306

这个项目的实际代码相对简单。整个代码可在GitHub 上获得以下摘录用于说明具体功能。

BME280 传感器和 OLED 显示器共享相同的 I2C 总线,分别使用两个不同的地址:0x77 和 0x3d。请注意,您的硬件可能使用不同的地址,如果是这样,则必须相应地更改代码。

scl := gpio.Pin 22
sda := gpio.Pin 21
bus := i2c.Bus
  --sda=sda
  --scl=scl

oled := SSD1306 (bus.device 0x3d)
thp_device := bus.device 0x77

用于风扇速度控制的引脚 (GPIO 19) 必须设置为 PWM:

pwm := gpio.Pwm
  --frequency=50
chan1 := pwm.start
  gpio.Pin 19

此外,控制风扇方向的引脚(GPIO 16 和 17)应设置为输出引脚:

//set up fan direction control pins
in1 := gpio.Pin.out 16
in2 := gpio.Pin.out 17
//Set direction of fan
in1.set 0
in2.set 1

为了实现可变风扇速度,我们将合适的温度区间(例如 25°C 到 30°C)映射到 PWM 占空比区间 [0.0...1.0]:

input_start := 25.0
input_end := 30.0
output_start := 0.0
output_end := 1.0

df = (temp - input_start) / (input_end - input_start) * (output_end - output_start) + output_start

此外,为了获得一个漂亮的温度历史直方图,我们将合适的温度区间 [20...35] 映射到某个直方图高度,然后将温度读数添加到直方图:

//Mapping of temp to histogram range
histo_input_start := 20.0
histo_input_end := 35.0
histo_output_start := 5.0
histo_output_end := 50.0

histo_data = (temp - histo_input_start) / (histo_input_end - histo_input_start) * (histo_output_end - histo_output_start) + histo_output_start

要在 ESP32 上安装应用程序,您只需部署 yaml 文件:

$ toit device -d nameofmydevice deploy tempfan.yaml

Yaml 文件

Toit 使用 .yaml 文件来安排何时应在 ESP32 上执行 Toit 代码。在这个项目中,当我们安装它时,应用程序应该会立即连续运行,如果 ESP32 重启也是如此。我们将应用程序命名为“ Fan Control ”并指向包含 Toit 代码的文件:

name: "Fan Control"
entrypoint: tempfan.toit
triggers:
  on_install: true
  on_boot: true

要访问整个代码,请访问GitHub

 

 

 


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

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !