Por Filipe Caetano | MagicKey para o PPLWARE Na sequência dos artigos que temos apresentado para a plataforma Arduino, hoje demonstrar como controlar um interruptor. Este interruptor “partilhado” permitirá que a luz seja controlada através de um normal interruptor ou ainda a partir do computador.
Neste artigo vamos disponibilizar o código fonte, para que seja possível controlar uma saída digital, de acordo com as leituras feitas no interruptor ligado a uma porta digital de entrada e de acordo com os dados recebidos do computador via porta série.
Tal como no anterior artigo acerca do Arduino (ver aqui) partimos de um exemplo para construir o nosso código, no entanto desta vez foi necessário realizar consideráveis alterações.
Visto que iremos ter que ter uma entrada digital, onde vamos ligar o botão do interruptor, o exemplo escolhido foi Digital->Button.
Na comunicação do Arduino com o computador nos dados trocados entre eles definiu-se
- zero significaria a luz desligada
- e um valor diferente de zero que a luz ligada.
O código desenvolvido para o Arduino foi o seguinte:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
int buttonStatemem = 0;
int luzon = 0;
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
//inicialização da porta a velocidade de 9600
Serial.begin(9600);
}
void loop(){
//verifica se existem dados na porta serie para leitura
if (Serial.available())
{
if(Serial.read()==48) //0 em ascii é 48
{
luzon = 0;
}
else
{
luzon=1;
}
}
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// Verifica se o botão se encontra primido e se ainda não foi tratado
if(buttonState==HIGH && buttonStatemem==LOW)
{
if(luzon == 0)
{ luzon = 1;
}
else
{
luzon = 0;
}
buttonStatemem=HIGH;
}
else if(buttonState==LOW)
{
buttonStatemem=LOW;
}
//Liga ou desliga a o Led (luz)
if(luzon == 0)
{
digitalWrite(ledPin, LOW);
}
else
{
digitalWrite(ledPin, HIGH);
}
// Envia o estado da luz
Serial.println(luzon);
delay(500);
}
A imagem seguinte mostra a montagem muito simples feita no Arduino.
Pode ver-se que o botão (B) liga aos 5 volts e ao pino 2 tal como definimos no código. È conveniente adicionar uma resistência de 10Kohm (chamada resistência de Pull-Down) ligada ao pino 2 e ao GND, isto para que quando o botão não está premido estejam 0volts no pino 2, quando esta resistência não é colocada pode acontecer que mesmo que o botão não esteja premido a porta esteja a 1. A saída para controlar uma lâmpada é feita no pino 13, o Arduino tem ligado a este pino o Led assinalado na imagem que vamos usar como saída.
A parte de ligação a lâmpada é feita com recurso a um transístor (T) C547B e um rele 5v/220v. basta então ligar o pino 13 a base do transístor passando antes por uma resistência de 10Kohm. O emissor deste deve ser ligado ao GND e o colector a um dos terminais de controlo do rele. O outro terminal de controlo do rele deve então ser ligado aos 5volts, de forma há que quando o pino 13 esteja no nível alto (5volts) o transístor entre em condução e haja uma correte a circular na bobine do rele e este faça com que haja condução na parte de potencia (220 volts).
Nota: A montagem apresentada destina-se a marca e modelos das componentes utilizadas, caso se opte por outras componentes deve ter-se em atenção antes da montagem os seus datasheet.
Para o computador desenvolveu-se uma simples aplicação em c# que enviava comando para o Arduino Ligar ou Desligar a luz, e recebia ainda informação se a luz estava ligada ou desligada.
Para isso bastou apenas criar uma normal Windows aplication, e incluir o namespace System.IO.Ports para assim podermos utilizar a porta série.
Criou-se então a porta série através do comando, SerialPort porta = new SerialPort();
Foi adicionado um botão ligar, onde foi colocado o seguinte codigo:
porta.BaudRate = 9600; //velocidade que definimos no código do Arduino porta.PortName = “Com4”; // porta serie de comunicação com o Arduino porta.ReadTimeout = 200; // timeout de espera para que a aplicação não fique presa na leitura dos dados da porta serie. porta.Open(); // abertura da porta serie.
Para a leitura e tratamento dos dados vindos do Arduino adicionou-se um timer a aplicação. Este continha o seguinte codigo:
try
{
string recebido = porta.ReadLine();
if (recebido == “0\r”)
{
Textbox1.Text = “Luz Desligada”;
}
else
{
Textbox1.Text = “Luz Ligada”;
}
}
catch
{}
Faltava então adicionar dois botões, um para ligar e outro para desligar a luz, no evento do clique do botão de ligar a luz colocou-se o seguinte código:
porta.Write(“1”);
no de desligar a luz foi o seguinte:
porta.Write(“0”);
Na secção de download disponibiliza-se esta aplicação para download, mas com algumas melhorias gráficas.
Artigos relacionados
- Conhece a plataforma de desenvolvimento Arduino?
- Programe no Arduíno – Alerta para gelo na estrada
- Comunicação entre PC e Arduino