嵌入式系统无处不在:汽车、家用电器、城市空间的气候监测系统、农业综合企业等等。然而,嵌入式系统最重要的用途之一是关于安全性。
原因很简单:只要使用适合您想要监控的传感器并拥有工作所需的资源(能源、连接性等),嵌入式系统就像每天 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条评论
快来发表一下你的评论吧 !