domingo, 28 de dezembro de 2014

Arduino e LEDs - Parte 2, Variação de acendimento de 5 LEDs com Potenciômetro.

Esse post tem o intuito de mostrar como variar o acionamento de LEDs através da leitura de um sinal analógico. No meu caso utilizei um potenciômetro que quando conectado a uma porta analógica do Arduino, fornece uma leitura que varia de acordo com a tensão aplicada. Explicando melhor: O potenciômetro nada mais é do que uma resistência variável, e quando aplicamos uma tensão sobre ele (Vin = 5V), podemos variar a tensão de saída girando o pendulo seu pino central.







Com isso podemos ler a variação  de tensão (de 0 a 5V) utilizando uma das entradas analógicas do Aduino, o que pode ser utilizado para variados projetos. Nesse caso utilizei para fazer um sequencial de LEDs. Esse mesmo principio foi utilizado para fazer o controle dos servos que foram utilizados no projeto do braço robótico, http://computadoresfazemarte-odilon.blogspot.com.br/2012/12/braco-robotico-com-arduino-e-servos.html. 
Logo abaixo temos a parte de hardware do projeto.


Esquema elétrico

 Esquema para montagem em um protoboard

Agora a parte de software, ou seja, o código para programar o Arduino:

int sensorPotenciometro = 0; 
int led1 = 2 ; 
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int valor = 0; // Essa variável armazenará a leitura do potenciometro

void setup() {
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
}

void loop() {
  valor = analogRead(sensorPotenciometro); //Armazena os valores obtidos pelo sensor na variável "valor"
  Serial.println(valor); //Escreve na serial as leituras obtidas que vão de 0 a 1023
  if(valor == 0){ // Compara as leituras e faz o que se pede no bloco abaixo ...
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    delay (1000);
    digitalWrite(led1, LOW);
    delay (1000);
  }
  else if(valor >= 0 && valor < 200){ // compara as leituras e faz o que se pede no bloco abaixo...
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
  }
  else if(valor >= 201 && valor < 400){//...
    digitalWrite(led1, HIGH); 
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
  }  
  else if(valor >= 401 && valor < 600){ //...
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, LOW);
  }
  else if(valor >= 601 && valor < 800){ //...
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
  }
  else if(valor > 801){  //...
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    delay(1000);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    delay(1000);
  }

}

O código é bem simples, apenas cruza valores colhidos pela porta analógica e executa sinais binários nas portas digitais.
Agora é colocar a criatividade pra funcionar e incrementar o projeto de acordo com cada necessidade.
A seguir um vídeo do projeto em funcionamento:




Até o próximo projeto.


sábado, 27 de dezembro de 2014

Projeto Irrigador automático para hortas e jardins.(Parte 1 - Monitorando umidade da planta e selecionando variáveis).

Olá, esse projeto tem por finalidade criar um sistema que possa monitorar e controlar a irrigação de uma pequena horta. A ideia básica é utilizar o Arduino para colher informações sobre o estado da umidade do solo e com isso irrigar-lo se necessário.
De início pensei nas variáveis que preciso monitorar, ex: temperatura, umidade, nível de água ... Porem decidi partir para a prática e por logo algo para funcionar e depois incrementar o projeto de acordo com as necessidades. Pensando dessa forma criei um código para o Arduino que lê um sinal pela porta analógica A0, sinal esse que varia entre 0 e 5V, utilizando "sensores", (fios de cobre fincados no solo), consegui monitorar a umidade presente no vazo da planta, sendo que, níveis de tensão próximos a 0V indicam que a planta necessita de água, logicamente níveis próximos a 5V indicam que o solo está molhado. Utilizei 2 LEDs, um vermelho que indica o estado "solo seco", e o verde indica o estado "solo molhado". Utilizei também a comunicação serial para um melhor monitoramento do estado do solo.
Logo abaixo o esquema elétrico do projeto feito com o Fritzing.
 os fios cinza e roxo são os sensores que ficam fincados no solo dentro do vazo da planta.


Código utilizado para as primeiras experiências:

int sensorUmidade = 0; 
int led1 = 2 ; 
int led2 = 3;
int valor = 0; // Essa variável armazenará a leitura do sensor

void setup() {
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  valor = analogRead(sensorUmidade); //Armazena os valores obtidos pelo sensor na variável "valor"
  Serial.println(valor); //Escreve na serial as leituras obtidas que vão de 0 a 1023
  if(valor <= 500){ // Compara as leitura, se for menor ou igual a 500, faz o que se pedo no bloco abaixo ...
    Serial.println("Solo seco");
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW); 
  }
  else if(valor >= 501){ // compara as leitura, se for maior ou igual a 501, faz o que se pedo no bloco abaixo...
    Serial.println("Solo molhado");
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
  }
  else{
    digitalWrite(led1, LOW); //caso contrario, mantem os leds apagados.
    digitalWrite(led2, LOW);
  }  
  delay(500);
}

O código é relativamente simples, e com ele pude observar o monitoramento da variável umidade pelo Arduino. 
Utilizei como "cobaia" um pezinho de alecrim que cultivo aqui em casa e tudo funcionou como esperado.





Monitor serial do Arduino exibindo os valores das leituras. 

Bom, por enquanto é isso. Agora vou estudar como ampliar a leitura das variáveis e como de fato irrigar de uma maneira eficiente e segura para que ela não morra por falta d'água e para que não aja desperdícios.

Até o próximo post.

Referencias:

http://playground.arduino.cc/Portugues/LearningAnalogInput
http://arduinobymyself.blogspot.com.br/2013/09/sistema-de-irrigacao.html