Community project
Controle e Monitoramento de Bomba
This project implements a control and monitoring system for a three-phase pump motor (10 CV at 220 V) using an Arduino Uno to track the contactor status and thermal relay state. The system displays real-time operational status on a 0.96" OLED display, showing whether the pump is running, stopped, or in thermal fault condition, while monitoring dry contacts from the motor protection circuit.
The guide provides a complete wiring diagram, parts list, and assembly instructions for integrating the Arduino with industrial-grade components including a Schneider contactor, thermal relay, and isolated power supplies. Builders will receive the firmware code, a reference ladder logic diagram, and a calculation guide to ensure proper installation before energizing the 220 V three-phase supply.
Wiring diagram

Gather all the parts
Assemble it in 6 steps
1. Revisão obrigatória antes de comprar ou energizar
Projeto preliminar para profissional habilitado NR-10: confirmar placa do motor, ligação 220 V, frequência, corrente de curto, aterramento, seletividade e permissão da concessionária para partida direta. Parar é apenas parada operacional; adequação NR-12 e emergência dependem de análise de risco.
- 220 V trifásico pode matar e causar incêndio. Montar somente desenergizado, bloqueado e com ausência de tensão verificada. Não montar força em protoboard.
2. Instalar alimentação e força em quadro local
Levar três fases e PE por 120 m até o quadro junto à bomba. Proposta inicial: fases e PE de cobre 16 mm²; verificar capacidade de condução, agrupamento, temperatura, instalação e partida. Força: Q1 → K1 → RT → motor. Usar terminais compatíveis, torque do fabricante e invólucro fechado. PE nunca passa pelos contatos. Q1 e proteção de comando FC devem ser selecionados pelo responsável técnico, não há calibre definitivo sem curto-circuito e coordenação.
3. Montar comando 24 Vcc com selo
FC alimenta a fonte isolada entre duas fases 220 V. +24 V → PARAR NF → RT 95-96 NF → [PARTIR NA em paralelo com K1 13-14 NA] → A1. A2 → 0 V. Ajustar RT em rearme manual pela corrente de placa, inicialmente 25 A calculados. Após falta de energia, motor não deve religar sozinho.
4. Ligar tela e contatos secos
Arduino e OLED ficam juntos em compartimento de baixa tensão: OLED VCC → 5 V, GND → GND, SDA → A4 (dados), SCL → A5 (relógio). K1 21 → D2 e 22 → GND; RT 97 → D3 e 98 → GND. Estes contatos são exclusivos e secos: jamais recebem 24 V ou 220 V. Verificar adequação dos contatos à baixa corrente. Manter fios curtos, separados da força. Fonte USB isolada alimenta a placa pela porta USB (linha 5 V do desenho representa o cabo USB). Não ligar fonte USB e computador simultaneamente.
- Tela não é dispositivo de proteção. Fio rompido no contato NF pode indicar ligado indevidamente; contato NA rompido pode ocultar falha.
5. Ensaiar antes de liberar a bomba
Profissional deve testar selo, botão parar, disparo do térmico, rearme manual e falta de alimentação; conferir sentido de giro e condições hidráulicas sem funcionamento a seco. Tela mostra posição do contator, não comprova rotação ou vazão. Não há proteção de nível, pressão ou falta de água neste escopo. Capacitor foi apenas calculado no memorial e NÃO deve ser ligado neste circuito.
6. Memorial de cálculo e ladder de referência
# Partida direta — bomba 10 CV / 220 V trifásico Projeto preliminar: não é autorização de montagem ou laudo NR-10/NR-12. ## Ladder físico, não programa de CLP ``` +24 --[/ S0 PARAR]--[/ RT 95-96]--+--[S1 PARTIR]--+--(K1 A1) | | +--[K1 13-14]---+ 0 V ------------------------------------------------- K1 A2 ``` [ ] = normalmente aberto; [/] = normalmente fechado. Força: rede → Q1 tripolar → K1 → RT → motor acoplado à bomba. Fonte 24 V e quadro de comando junto da bomba, evitando laço de comando de 240 m. OLED apenas monitora contatos secos; Arduino nunca aciona o contator. ## Potência e corrente 1 CV = 735,49875 W. P mecânica = 7,355 kW. P elétrica = 7,355 / 0,91 = 8,082 kW. I = 8082 / (sqrt(3) × 220 × 0,85) = 24,95 A. K1 LC1D32BD: 32 A AC-3, 7,5 kW em 220/230 V, bobina 24 Vcc. RT LRD32: 23–32 A, ajuste inicial 25 A, prevalecendo placa e fabricante. Q1: proteção contra curto e seccionamento; selecionar conjunto coordenado pelas tabelas do fabricante, corrente presumida de curto e condições locais. Não fixar disjuntor por múltiplo arbitrário da corrente. ## Queda em regime Hipóteses: 120 m de ida (não somar retorno na fórmula trifásica), cobre a quente, resistividade 0,0225 ohm·mm²/m, X = 0,08 ohm/km estimado. Queda não inclui rede a montante, conexões nem impedância do transformador. Delta V = sqrt(3) I L (R cos phi + X sen phi), L=0,120 km e R=22,5/S ohm/km. | Seção fases | Queda | Percentual de 220 V | |---|---:|---:| | 6 mm² | 16,75 V | 7,61% | | 10 mm² | 10,14 V | 4,61% | | 16 mm² | 6,42 V | 2,92% | Proposta inicial: 3 fases 16 mm² + PE 16 mm² em cobre. Validar ampacidade, proteção, método de instalação e orçamento de queda da instalação inteira pela NBR 5410. Os 2,92% não garantem atendimento global. Não se pode determinar a queda real de partida sem corrente e fator de potência de rotor bloqueado e impedância da alimentação. Partida direta pode exigir 6–8 vezes In; confirmar dados reais e aceitação da concessionária. Não multiplicar simplesmente a queda em regime: fator de potência muda. ## Capacitor para fator de potência (não capacitor de partida) Meta adotada 0,95. Qc = P [tan(acos 0,85) − tan(acos 0,95)] = 2,352 kvar. Em 60 Hz e ligação delta a 220 V: C = Qc/(3 × 2pi × f × V²) = 42,98 µF por ramo (três ramos). Em 50 Hz: 51,57 µF por ramo. Banco comercial de 2,5 kvar ENTREGUES EM 220 V daria aproximadamente FP 0,955 em plena carga. Verificar tensão nominal: 2,5 kvar a 380/440 V não entrega 2,5 kvar a 220 V; Q varia com V². CAPACITOR NÃO INSTALADO nesta lista ou esquema. Valor calculado não autoriza ligação em paralelo com o motor: risco de autoexcitação e sobretensão. Para futura instalação são necessários projeto separado, proteção específica, manobra adequada a capacitores, descarga, análise de harmônicas e corrente a vazio; manter corrente do motor no térmico sem compensação. Não ligar capacitor permanentemente aos terminais do motor. Não é necessário capacitor para partir este motor trifásico. ## Limites da indicação Ligado = contato auxiliar indica K1 energizado, não confirmação de rotação/vazão. Falha = RT disparou. Não detecta toda falha elétrica, falta de água ou defeito mecânico. D2 lê NF (aberto indica ligado); D3 lê NA (fechado indica térmico disparado). Falha térmica tem prioridade. Fiação rompida não é diagnosticada; não usar para segurança. ## Referências de terminais Schneider FA110040 (A1+, A2−; 13-14 NA, 21-22 NF). Schneider FA107663 e FA119404 (95-96 NF, 97-98 NA). Schneider BRU99865-01 (terminais de força LC1D32BD). Schneider: 3 safety measures for motors with individual power factor correction, 2017-12-06 (autoexcitação e proteção específica).
Review all connections
1. Connections between "tela" and "Arduino"
2. Connections between "usb" and "Arduino"
3. Connections between "k1" and "Arduino"
4. Connections between "rt" and "Arduino"
5. Connections between "q1" and "Arduino"
6. Connections between "motor" and "Arduino"
7. Connections between "fonte" and "Arduino"
8. Connections between "fc" and "Arduino"
9. Connections between "s0" and "Arduino"
10. Connections between "s1" and "Arduino"
Deploy the firmware
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 tela(128,64,&Wire,-1);
const uint8_t CONTATOR=2, TERMICO=3;
uint8_t candidato=255, anterior=255;
unsigned long desde=0;
bool pronta=false;
void mostrar(uint8_t estado){
tela.clearDisplay(); tela.setTextColor(SSD1306_WHITE); tela.setTextSize(1);
tela.setCursor(0,0); tela.print(F("BOMBA 220V / 10CV"));
tela.setCursor(0,18); tela.setTextSize(2);
if(estado&2) tela.print(F("FALHA"));
else if(estado&1) tela.print(F("LIGADO"));
else tela.print(F("DESLIGADO"));
tela.setTextSize(1); tela.setCursor(0,43);
tela.print((estado&2)?F("Termico desarmado"):F("Estado do contator"));
tela.setCursor(0,55); tela.print(F("Sem medir vazao")); tela.display();
}
void setup(){
pinMode(CONTATOR,INPUT_PULLUP); pinMode(TERMICO,INPUT_PULLUP);
Serial.begin(9600); Wire.begin(); Wire.setClock(100000);
pronta=tela.begin(SSD1306_SWITCHCAPVCC,0x3C);
if(!pronta) Serial.println(F("Falha na tela; comando independente"));
}
void loop(){
// Contato NF abre com contator energizado. Termico NA fecha em falha.
uint8_t estado=(digitalRead(CONTATOR)==HIGH?1:0)|(digitalRead(TERMICO)==LOW?2:0);
if(estado!=candidato){candidato=estado;desde=millis();}
if(candidato!=anterior && millis()-desde>=100){
anterior=candidato;
if(pronta) mostrar(anterior);
Serial.println((anterior&2)?F("FALHA TERMICA"):(anterior&1)?F("CONTATOR LIGADO"):F("DESLIGADO"));
}
}Remix this project
Make it yours in one click
Open a full copy of this project in your own Schematik workspace — diagram, code, parts, and assembly steps included. Swap the sensor, add features, or redesign the whole thing with AI. The author's original stays untouched.




