Relés
Relés eletromecânicos são componentes simples formados por
um eletroímã e diversos contatos. O conceito de sinal discreto dos primeiros
computadores usava relé para implementar as funções booleanas.
De composição simples, os relés de contato são formados
basicamente por 4 partes: eletroímã, mola, armadura e contatos.
fonte: http://www.pearltrees.com
Os
circuitos que compõe os reés são formados por circuitos independentes e
isolados, sem contato em seu estado de repouso. Um switch controla a potência
sobre o eletroimã que quando ligado atrai a armadura abrindo ou fechando (depende
de sua configuração N/A ou N/F) o circuito para ativar uma carga. Com o
eletroimã desenergizado, a mola puxa a armadurae o circuito não se completa.
Por
meio do relé é possível controlar diversas variáveis do processo de
chaveamento:
·
Tensão e corrente necessárias para ativar armadura;
·
Número de armaduras;
·
Número de contatos da armadura;
·
Se o contato está Normalmente Aberto (NA) ou Normalmente
Fechado (NF).
Funcionamento
Quando uma chave ou interruptor é acionado, uma pequena
quantidade de energia elétrica transforma a bobina em um eletroímã que move a
armadura, permitindo a passagem de uma tensão muito maior do que a usada
somente para chaveamento. Essa capacidade suportada pelo mecanismo, e o valor
de trabalho da bobina, está geralmente descrito na face do componente.
fonte: http://www.tallertecno.com
fonte: http://engenheirando.com/eletronica/reles/
Acionamento com Arduino Uno
O acioamento de relés com o Microcontrolador Arduino é muito fácil, onde deve ser alterado os estados das portas digitais do Modulo Relé: IN1 e IN2.
fonte: blog.filipeflop.com
fonte: blog.filipeflop.com
Controlando o acionamento e desacionamento de uma lâmpada:
O controle do relé é feito pela saída 3 da placa Arduino, alternando entre acionar e desacionar a carga (lâmpada).
fonte: próprio autor
/*
Projeto Arduino controlando uma lampada via relé
by: TonY EmersoN MariM
--------------------------------------------
--=<| www.mecatronizar.blogspot.com.br |>=--
--------------------------------------------
*/
//Porta ligada ao pino IN1 do modulo
int rele1 = 3;
void setup()
{
//Define pinos para o rele como saida
pinMode(rele1, OUTPUT);
}
void loop()
{
digitalWrite(rele1, LOW); //Liga rele 1
delay(2000);
digitalWrite(rele1, HIGH); //Desliga rele 1
delay(2000);
}
O código tem um tempo pré-estabelecido de dois segundos que o estado do relé comuta, até o desligamento do usuário.
Acionamento e controle de um motor monofásico (via serial e C#)
Também é possível acionar outro dispositivo com os relés e implementar junto um controle de supervisão por meio de um aplicativo construído no Visual Studio, conforme os códigos abaixo:
Inserido todos os componentes para elaboração do Form, as funções devem ser aplicadas:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Motor_AppArduino
{
public partial class Form1 : Form
{
int Data = 0;
public Form1()
{
InitializeComponent();
textBox3.Text = "Motor Desligado!";
pictureBox1.Visible = true;
timer1.Enabled = true;
}
private void button1_Click(object sender, EventArgs e)
{
byte[] mensagem = new byte[1];
mensagem[0] = 0x4C; //L
try
{
serialPort.Write(mensagem, 0, mensagem.Length);
rtHistorico.AppendText("Ligado:");
rtHistorico.AppendText(mensagem[0].ToString());
rtHistorico.AppendText("\n");
}
catch (Exception erro)
{
rtHistorico.AppendText(erro.Message);
rtHistorico.AppendText("\n");
}
if (textBox1.BackColor == Color.Red && textBox2.BackColor == Color.Red)
{
Data += 1;
textBox2.BackColor = Color.Green;
textBox3.Text = "Motor Ligado: Horário!";
pictureBox2.Visible = false;
pictureBox3.Visible = true;
pictureBox1.Visible = false;
button2.Visible = false;
}
}
private void button2_Click(object sender, EventArgs e)
{
byte[] mensagem = new byte[1];
mensagem[0] = 0x44; //D
try
{
serialPort.Write(mensagem, 0, mensagem.Length);
rtHistorico.AppendText("Ligado:");
rtHistorico.AppendText(mensagem[0].ToString());
rtHistorico.AppendText("\n");
}
catch (Exception erro)
{
rtHistorico.AppendText(erro.Message);
rtHistorico.AppendText("\n");
}
if (textBox2.BackColor == Color.Red && textBox1.BackColor == Color.Red)
{
Data += 2;
textBox1.BackColor = Color.Green;
textBox3.Text = "Motor Ligado: Anti-horário!";
pictureBox1.Visible = false;
pictureBox3.Visible = false;
pictureBox2.Visible = true;
button1.Visible = false;
}
}
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(leituraPorta));
}
public void leituraPorta(object sender, EventArgs e)
{
//leitura da porta
byte[] dados = new byte[1];
int retorno;
try
{
retorno = serialPort.Read(dados, 0, 1);
if (retorno != 0)
{
rtHistorico.AppendText("Recebido:");
rtHistorico.AppendText(dados[0].ToString());
rtHistorico.AppendText("\n");
if (dados[0] == 76)
toolStripStatusLabel1.Text = "Status Atual: Motor ligado";
else if (dados[0] == 68)
toolStripStatusLabel1.Text = "Status Atual: Motor desligado";
else
toolStripStatusLabel1.Text = "Status Atual: Desconhecido";
serialPort.DiscardInBuffer();
serialPort.DiscardOutBuffer();
}
}
catch (Exception erro)
{
rtHistorico.AppendText(erro.Message);
rtHistorico.AppendText("\n");
}
}
private void sairToolStripMenuItem_Click(object sender, EventArgs e)
{
Data = 0;
textBox1.BackColor = Color.Red;
textBox2.BackColor = Color.Red;
DialogResult atencao;
MessageBoxButtons bot = MessageBoxButtons.OKCancel;
MessageBoxIcon icon = MessageBoxIcon.Warning;
atencao = MessageBox.Show("Deseja realmente sair?", "ATENÇÃO!", bot, icon);
switch (atencao)
{
case DialogResult.OK:
Application.Exit();
break;
case DialogResult.Cancel:
break;
}
}
private void sobreToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Aplicativo de Comunicação Serial com Acionamento de Motor Monofásico");
}
private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void btAbrirFechar_Click(object sender, EventArgs e)
{
if (btAbrirFechar.Text == "Abrir")
{
try
{
if (txPorta.Text != "")
{
serialPort.PortName = txPorta.Text;
serialPort.Open();
btAbrirFechar.Text = "Fechar";
txPorta.Enabled = false;
gbMotor.Enabled = true;
toolStripStatusLabel1.Text = "Status Atual: Comunicação Aberta";
rtHistorico.AppendText("Porta Aberta");
rtHistorico.AppendText("\n");
}
}
catch (Exception erro)
{
rtHistorico.AppendText(erro.Message);
rtHistorico.AppendText("\n");
}
}
else if (btAbrirFechar.Text == "Fechar")
{
try
{
serialPort.Close();
btAbrirFechar.Text = "Abrir";
txPorta.Clear();
txPorta.Enabled = true;
gbMotor.Enabled = false;
toolStripStatusLabel1.Text = "Status Atual: Comunicação Fechada";
rtHistorico.AppendText("Porta Fechada");
rtHistorico.AppendText("\n");
}
catch (Exception erro)
{
rtHistorico.AppendText(erro.Message);
rtHistorico.AppendText("\n");
}
}
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
byte[] mensagem = new byte[1];
mensagem[0] = 0x50; //P
try
{
serialPort.Write(mensagem, 0, mensagem.Length);
rtHistorico.AppendText("Parado:");
rtHistorico.AppendText(mensagem[0].ToString());
rtHistorico.AppendText("\n");
}
catch (Exception erro)
{
rtHistorico.AppendText(erro.Message);
rtHistorico.AppendText("\n");
}
if (textBox1.BackColor == Color.Red && textBox2.BackColor == Color.Green)
{
Data -= 1;
textBox2.BackColor = Color.Red;
textBox3.Text = "Motor Desligado!";
pictureBox2.Visible = false;
pictureBox1.Visible = true;
pictureBox3.Visible = false;
button1.Visible = true;
button2.Visible = true;
}
else if (textBox1.BackColor == Color.Green && textBox2.BackColor == Color.Red)
{
Data -= 2;
textBox1.BackColor = Color.Red;
textBox3.Text = "Motor Desligado!";
pictureBox1.Visible = true;
pictureBox2.Visible = false;
pictureBox3.Visible = false;
button1.Visible = true;
button2.Visible = true;
}
}
}
}
Como sugestão o aplicativo pode ficar com essa forma depois de compilado:
fonte: próprio autor
Depois disso deve ser gravado no Arduino o código para que o funcionamento ocorra de forma correta.
/*
Projeto Arduino liga e desliga motor universal
via serial aplicativo C#
by: TonY EmersoN MariM
----------------------------------------
--=<| www.mecatronizar.blogspot.com.br |>=--
----------------------------------------
*/
int RELE1 = 5;//Porta ligada ao pino IN1 do modulo relé
int RELE2 = 7;//Porta ligada ao pino IN2 do modulo relé
int CHAVE = 9;//Porta ligada ao pino IN3 do modulo relé
char dado;// variável que recebe os dados
void setup(){
Serial.begin(9600);
pinMode(RELE1, OUTPUT);//Definem os pinos do relé como saída
pinMode(RELE2, OUTPUT);
pinMode(CHAVE, OUTPUT);
digitalWrite(RELE1,HIGH);//Definem os estado iniciais dos relés
digitalWrite(RELE2,HIGH);
digitalWrite(CHAVE,HIGH);
}
void loop(){
if(Serial.available()){//define comunicação serial da placa
dado = Serial.read();
switch(dado){ //Faz acionamento dos relés segundo os dados recolhidos
case 'L':
digitalWrite(RELE1, HIGH);
delay(100);
digitalWrite(CHAVE, LOW);
delay(100);
digitalWrite(RELE2, LOW);
delay(1000);
Serial.println("L");
break;
case 'D':
digitalWrite(RELE2, HIGH);
delay(100);
digitalWrite(CHAVE, LOW);
delay(100);
digitalWrite(RELE1, LOW);
delay(1000);
Serial.println("D");
break;
case'P':
digitalWrite(RELE1, HIGH);
digitalWrite(RELE2, HIGH);
digitalWrite(CHAVE, HIGH);
Serial.println("P");
break;
}
}
}
Na montagem do circuito com o motor foi utilizado um motor universal de um processador de alimentos. O importante é que para conseguir que o motor execute movimentos de rotações em dois sentidos, horário e anti-horário, a solda que liga as escovas com o enrolamento deve ser desfeito e sair dois pares de variações diferentes.
fonte: próprio autor
É no momento em que os relés que estão recebendo os sinais da escova que ocorrem as comutações do sentido de rotação e para quando o sinal (tensão) que vem da rede passa de fechado para aberto que o motor para de ser acionado.
O vídeo abaixo demonstra o funcionamento de todo o projeto.
Nesse projeto deixo um agradecimento ao meu amigo Gilmar Léo, pela ajuda com o motor.
Caso necessite, o projeto completo pode ser baixado por esse LINK, se necessário entre em contato, para dúvidas, elogios e críticas.
Bons estudos!
ATENÇÃO: O relé trabalha com oque chama-se normalmente de lógica inversa, então é necessário que para ser acionado ele receba o sinal baixo (LOW, 0). O recurso de trabalhos realizados com lógica inversa é necessário para que a segurança do acionamento do dispositivo seja garantida, em um ambiente de aterramento prejudicado, ou interferências eletromagnéticas pode fazer com que seja captado um ruído e o sinal seja entendido como sinal alto e o dispositivo atuado, causando funcionamento desnecessário e até mesmo acidentes.
Nenhum comentário:
Postar um comentário