Pplware

Vamos controlar um interruptor com o Arduino?

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

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


Download: Projecto da aplicação do PC (source code)
Download: Executável – aplicação para PC
Download: Código do Arduino:interruptor
Homepage: Magick Key

Exit mobile version