嵌入式系统无处不在:汽车、家用电器、城市空间的气候监测系统、农业综合企业等等。然而,嵌入式系统最重要的用途之一是关于安全性。
原因很简单:只要使用适合您想要监控的传感器并拥有工作所需的资源(能源、连接性等),嵌入式系统就像每天 24 小时、每天 7 天工作的监护人。周,以及他们在他们的角色中很少会犯错的人。
因此,嵌入式系统在关键安全系统中特别有用,例如监控和火灾警报。
因此,在本文中,您将学习如何制作一个嵌入式系统来监控环境中的易燃气体,并通过 Telegram 在环境中有可检测到的易燃气体时向您发出警告。
因此,在世界任何地方,您都可以了解有关可燃气体的任何危险情况,这对于远程监控和火灾时的快速行动非常有用。
详细地,您将了解到:
什么是电报?
Telegram是俄罗斯的即时通讯应用程序/服务,目前是 WhatsApp 的主要竞争对手,拥有 Android、iOS 和后期(或几乎)Windows Phone 版本。
它的主要区别是开源的(涉及应用程序),允许创建机器人,与自毁消息(有过期日期)的秘密聊天以及从一开始就在计算机上使用的非常轻巧高效的 Web 界面(直到几年前,WhatsApp 上还不存在的东西)。
该项目的威廉希尔官方网站 原理图见图1。
在硬件方面,该项目使用了以下组件:
概括来说,该项目的原理图威廉希尔官方网站 主要分为三个部分:ESP32 Devkit 1、分压器和 MQ-2 传感器(监测可燃气体和烟雾)。下面详细查看这些部分的详细信息。
ESP32 Devkit 1 包含一个完整的开发板,包含用于嵌入式设备的良好处理和内存、wi-fi 连接、蓝牙连接(经典和 BLE)、大量可用于开发的 GPIO 和多个通信接口(I²C、UART 、SPI 等)。
此外,ESP32 有两个处理器,是物联网项目的双核解决方案。一般来说,就计算资源和通信接口的数量而言,它是众所周知的 NodeMCU (ESP8266) 的一个(伟大的)进化。
此外,它的成本非常诱人,是涉及物联网概念并需要良好处理能力、内存和连接性的原型和产品的最佳替代品之一。
不幸的是,ESP32 Devkit 1 没有适合原型板的完美形状,这需要较少的常规操作即可与原型板一起使用,如图 1 中的项目原理图所示,其中只有一侧连接到原型板。
即便如此,ESP32 Devkit 1 对于想要以极具竞争力的成本进行紧凑型项目的专业人士和爱好者/制造商来说都是一个非常有趣的选择。
如图 1 所示,MQ-2 传感器(可燃气体和烟雾)的数字信号 (D0) 和 ESP32 之间有一个分压器。
这是必要的,因为传感器的工作电压为 5V,而 ESP32 Devkit 1 的最大电压为 3.3V。因此,需要将数字传感器输出信号的电压调整到 ESP32 Devkit 1 允许的电平。
分压器可用于此任务。分压器使传递给 ESP32 Devkit 1 的电压为传感器提供的电压的一半,足以让 ESP32 在其工作电压范围内区分高逻辑电平和低逻辑电平。这样就可以在ESP32 Devkit 1上正常使用传感器了。
MQ-2 是一种能够检测空气中可燃气体和烟雾的传感器,检测到的气体浓度可以在 300 到 10, 000 ppm(百万分之几)的范围内。
除烟雾外,该传感器还能够检测以下易燃气体:LPG(液化石油气)、甲烷、丙烷、丁烷、氢气、酒精、天然气和其他具有易燃潜力的气体。
MQ-2 以独立传感器的形式和模块的形式出售,这就是我们在本文中使用的形式。模块形式的传感器如图2所示。
MQ-2 模块有 4 个端子,分别是:
在这个项目中,我们将使用 MQ-2 模块的数字输出。当在空气中检测到易燃气体或烟雾时,该输出变为高电平 (5V),如果没有这些,则保持低电平 (0V)。
导致数字输出变高的烟雾和/或可燃气体的量/浓度由位于 MQ-2 模块后面的电位计调节。该电位器如图 3 所示。
一般而言,建议锅略高于最小值,以减少误检测烟雾和/或可燃气体的机会。
ESP32 Devkit 1 可以在 Arduino IDE 中进行编程,因此使用它进行项目的开发与使用任何常见的 Arduino 非常相似。
这有助于新项目的开发以及将在其他硬件/平台上制作的其他项目移植/转移到 ESP32 Devkit 1。
Instalação da biblioteca para usar o Telegram no ESP32
您必须安装 UniversalTelegramBot 库,该库允许您在 ESP32 上使用 Telegram。
这个库可以通过 Arduino IDE 在库管理器(草图>包含库>管理库)中简单快速地安装。
在搜索字段中插入其名称 (UniversalTelegramBot) 并安装其最新版本。
创建电报机器人
ESP32 将使用 Telegram 机器人提醒您从 Telegram 检测到的易燃/烟雾气体。
因此,需要创建一个 Telegram 机器人。要创建 Telegram 机器人,请按照以下步骤操作:
接下来,我将向您展示如何获取您的聊天 ID。
获取 Telegram 帐户的聊天 ID
您的个人 Telegram 帐户的 ChatId 是您帐户的唯一代码/密钥,因此它将允许 Telegram 机器人仅向您发送消息(就像您在 Telegram 上的联系人一样)。
要获取此 ChatId,请按照以下步骤操作:
接下来,我将向您展示完整的项目代码。
项目源代码
至此,一切准备就绪,可以实施项目了!
该项目的源代码可以在下面找到。
使用此源代码编写 ESP32 Devkit 1 的方法与编写任何其他常见的 Arduino 非常相似:将其复制并粘贴到您的 Arduino IDE 中,将 ssid_wifi 和 password_wifi 变量的内容分别更改为 wi-fi 的名称和密码ESP32 Devkit 1 应该连接的网络,编译和上传/调度 ESP32 Devkit 1。
另外,不要忘记在 BOT_TELEGRAM_TOKEN 中替换您的 Telegram 机器人令牌(使用 @BotFather 获得),并在 auth_id 中替换您的个人 Telegram 帐户的 ChatId(使用 @chatid_echo_bot 获得)。
仔细阅读源代码注释,充分理解。
#include
#include
#include
/* Definição do sensor de gás */
#define GPIO_SENSOR_GAS 34
/* Definição do token de seu Bot Telegram
(valor obtido no @BotFather) */
#define BOT_TELEGRAM_TOKEN " "
#define TEMPO_ESPERA_SENSOR 100 //ms
/* Wifi */
/* Coloque aqui o SSID (nome da rede wifi) que o
ESP32 deve se conectar
*/
char ssid_wifi[] = " ";
/* Coloque aqui o password (senha da rede wifi) que o
ESP32 deve se conectar
*/
char password_wifi[] = " ";
/* Variáveis e objetos para usar o wifi e Bot Telegram */
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TELEGRAM_TOKEN, client);
/* Coloque aqui o auth_id de sua conta telegram
(auth_id da conta que o bot deve alertar sobre o gás
*/
String auth_id = " ";
/* Protótipos */
void init_wifi(void);
void conecta_wifi(void);
void verifica_conexao_wifi(void);
void configura_gpio_sensor_gas(void);
/* Função: inicializa wi-fi
* Parametros: nenhum
* Retorno: nenhum
*/
void init_wifi(void)
{
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
Serial.println("------WI-FI -----");
Serial.print("Conectando-se a rede: ");
Serial.println(ssid_wifi);
Serial.println("Aguarde...");
conecta_wifi();
}
/* Função: conecta-se a rede wi-fi
* Parametros: nenhum
* Retorno: nenhum
*/
void conecta_wifi(void)
{
/* Se ja estiver conectado, nada é feito. */
if (WiFi.status() == WL_CONNECTED)
return;
/* refaz a conexão */
WiFi.begin(ssid_wifi, password_wifi);
while (WiFi.status() != WL_CONNECTED)
{
delay(100);
Serial.print(".");
}
Serial.println();
Serial.print("Conectado com sucesso a rede wi-fi ");
Serial.println(ssid_wifi);
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
/* Função: verifica se a conexao wi-fi está ativa
* (e, em caso negativo, refaz a conexao)
* Parametros: nenhum
* Retorno: nenhum
*/
void verifica_conexao_wifi(void)
{
conecta_wifi();
}
/* Função: configura GPIO para leitura do sensor de gás
* Parametros: nenhum
* Retorno: nenhum
*/
void configura_gpio_sensor_gas(void)
{
pinMode(GPIO_SENSOR_GAS, INPUT);
}
void setup()
{
Serial.begin(115200);
/* Configura GPIO para leitura do sensor de gás */
configura_gpio_sensor_gas();
/* Inicialização e conexao wifi */
init_wifi();
conecta_wifi();
}
void loop()
{
/* Verifica se conexão wifi está ok.
Caso não estiver, refaz a conexão. */
verifica_conexao_wifi();
/* Verifica se há detecção de gás */
if (digitalRead(GPIO_SENSOR_GAS) == HIGH)
{
/* Avisa, por Telegram, a detecção do gás */
bot.sendMessage(auth_id, "ALERTA: Gas detectado!", "");
Serial.println("Gas detectado! Avisando usuario pelo Telegram...");
/* Aguarda detecção de gás acabar
(para notificar via Telegram só uma vez) */
while(digitalRead(GPIO_SENSOR_GAS) == HIGH)
{
delay(1);
}
/* Espera alguns ms para evitar que, se ocorrer
oscilações da saída digital do sensor, sejam
erroneamente detectadas como alertas. */
delay(TEMPO_ESPERA_SENSOR);
}
}
现在,我将向您介绍这个项目的完整功能。
该项目的工作原理如下:一旦连接并连接到 wifi,它将已经作为 Telegram 机器人运行。
当它检测到可燃气体和/或烟雾时,它会通过 Telegram 直接向您发送消息,如图 4 所示。
这样,只需将项目连接到可以访问已编程并准备就绪的 wifi 网络的位置!
现在,我将在PCBGOGO 印刷威廉希尔官方网站 板上提供电子项目来构建这个项目。
从电子原理图中,开发了一块印刷威廉希尔官方网站 板,用于在厨房中建造一个项目。印刷威廉希尔官方网站 板在下面的 3D 视图中显示。
该项目很简单,由PCBGOGO和Robô Lúdico Brazil共同开发。现在,我将在下图中提供该项目的电子原理图。
电子原理图开发的布局设计如下图所示。
在此之后,这是 2D 视图中的结果。
将电子元件焊接到PCBGOGO 印刷威廉希尔官方网站 板上后,您可以将设备安装在外壳中,并将其安装在炉子旁边。
系统将监控警报信息并将其发送到您的 Telegram。
感谢PCBGOGO PCB Factory提供用于组装项目的电子板。
此外,我感谢巴西 Playful Robot School提供所有知识来开发这个项目。
电子板和源代码的文件附在这个项目中。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !