Artigo Monioramento de Motores Elétricos-2
Artigo Monioramento de Motores Elétricos-2
Artigo Monioramento de Motores Elétricos-2
Bruno César de Carvalho, Everton Dias, Filipe Bernardo Lima, Marco Tulio
Martins de Melo, Mauricelio Perdigão Muniz, Thalison Henrique Silva de Sá.
Resumo
Um sistema de monitoramento de motores elétricos foi concebido utilizando o Arduino, permitindo o
acompanhamento contínuo do desempenho e da condição dos motores. Sensores de corrente, tensão,
temperatura, umidade e vibração são integrados ao Arduino para capturar dados em tempo real. Essas
informações são processadas pelo Arduino, que executa um programa capaz de identificar e gerar um
alerta sobre possíveis anomalias, fortalecendo a prática de manutenção preditiva. Essa abordagem não
só eleva a eficiência operacional, mas também reduz substancialmente os riscos associados a falhas
imprevistas nos motores elétricos.
Prótotipo Python
Para a montagem do protótipo foi utilizado: A linguagem Python é uma linguagem de
- 1 caixa de plástico programação de alto nível, interpretada, de
- 1 tábua de madeira propósito geral e de código aberto, conhecida
- 1 micro motor circulador de ar 1/25 bivolt pela sua simplicidade e legibilidade. Criada por
MM-20B Elgin Guido van Rossum e lançada pela primeira vez
- 1 módulo sensor Dht11 em 1991, Python tornou-se uma das linguagens
- 1 sensor Ds18b20 mais populares devido à sua facilidade de
- 1 sensor Sw-420 aprendizado, sintaxe clara e vasta gama de
- 1 módulo relé SLA-05VDC-SL-C bibliotecas e frameworks disponíveis.
- 1 módulo Pzem-004t O Python é popularmente utilizado no
- 1 placa Uno R3 desenvolvimento de software devido à sua
facilidade de aprendizado, sintaxe clara e vasta
Figura 1 – Placa Uno R3. gama de bibliotecas e devido à sua capacidade
de lidar com uma variedade de tarefas, desde
tarefas simples até projetos complexos. Essas
características tornam o Python uma excelente
Conclusão
Motor monofásico de indução, tipo campo distorcido com mancais de bucha sintetizada auto-
compensadora e lubrificação permanente.
Frequência: 60Hz. Corrente nominal: 0.66A (110V) / 0.33A (220V). Consumo: 55W.
Grau de proteção: IP44. Classe de isolação: 130 °C. Diâmetro da hélice: 10″.
#include <SoftwareSerial.h>
#include <PZEM004Tv30.h>
#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define PZEM_RX_PIN 10
#define PZEM_TX_PIN 11
#define DHTPIN 13
OneWire oneWire(Temp_motor);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
pzem.setAddress(0x01);
dht.begin();
sensors.begin();
pinMode(motorPin, OUTPUT);
sensors.requestTemperatures();
// Exibir os resultados
Serial.print("H:");
Serial.print(umidade);
Serial.print(",T:");
Serial.print(temp_ambi);
Serial.print(",C:");
Serial.print(current);
Serial.print(",V:");
Serial.print(voltage);
Serial.print(",T:");
Serial.print(Temp_motor1);
Serial.print(vibracao_V);
Serial.print(",P:");
Serial.print(power);
Serial.print(",E:");
Serial.print(energy);
Serial.print(",F:");
Serial.println(pf_pzem);
//Serial.print(",F:");
//Serial.println(frequency);
if (command == '1') {
import serial
import tkinter as tk
from tkinter import font
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import os
def update_data():
try:
arduino_data = ser.readline().decode('utf-8', errors='replace').strip()
'''print(f"Arduino Data: {arduino_data}")'''
if arduino_data:
data_parts = arduino_data.split(',')
if len(data_parts) == 9: # Ajustar conforme o número total de valores enviados pelo Arduino
umidade = float(data_parts[0].split(':')[1])
temp_ambiente_part = data_parts[1].split(':')[1].rstrip('°C')
except UnicodeDecodeError as e:
print(f"Erro de decodificação: {e}")
root.after(1000, update_data)
def send_command(command):
ser.write(command.encode('utf-8'))
try:
max_corrente = float(max_corrente_value.get())
max_tensao = float(max_tensao_value.get())
max_temp_ambiente = float(max_temp_ambiente_value.get())
max_umidade = float(max_umidade_value.get())
max_temp_motor = float(max_temp_motor_value.get())
max_vibracao = float(max_vibracao_value.get())
min_fator_potencia = float(min_fator_potencia_value.get())
min_tensao = float(min_tensao_value.get()) # Atualiza o valor de min_tensao
except ValueError:
# Caso haja um erro de conversão, não altera os valores
pass
def open_limits_window():
# Função chamada quando o botão "Configurar Limites" é pressionado
global limits_window
plt.tight_layout()
plt.show()
def save_data_to_csv():
with open('sensor_data.csv', 'w') as file:
file.write("Time, umidade, temp_ambiente, Corrente , Tensao, temp_motor, vibracao\n")
for i in range(len(time_points)):
file.write(f"{time_points[i]}, {umidade_values[i]}, {temp_ambiente_values[i]},
{corrente_values[i]}, {tensao_values[i]}, {temp_motor_values[i]}, {vibracao_values[i]}\n")
def delete_all_data():
global time_points, umidade_values, temp_ambiente_values, corrente_values, tensao_values,
temp_motor_values, vibracao_values
time_points = []
umidade_values = []
temp_ambiente_values = []
corrente_values = []
tensao_values = []
temp_motor_values = []
vibracao_values = []
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.geometry(f"{window_width}x{window_height}+{int((screen_width -
window_width)/2)}+{int((screen_height - window_height)/2)}")
label_font = font.Font(size=18)
update_data()
root.mainloop()
root.mainloop()