• Nenhum resultado encontrado

3 DESENVOLVIMENTO DO PROJETO

3.4 SENSOR DHT11 PARA ARDUINO

O Arduino possui inúmeros acessórios com diversas funções, e de fácil integração com a placa.

Para o projeto em questão, foi necessário pesquisar um sensor que capaz de identificar e informar ao microcontrolador variações em temperatura e umidade. Desta forma foi possível encontrar um sensor simples que agregava todas as funções em um único componentes, que pode ser integrado ao Arduino, o sensor DHT11.

Para melhor compreensão de todas as funções do sensor, bem como suas faixas de operação, tensão de alimentação, polaridade e outras informações para sua utilização no projeto, o datasheet do componente é de fundamental importância. Este documento contempla todos os dados importantes do componente, uma ficha completa sobre todas as suas características, das quais algumas são fundamentais para sua aplicação no projeto.

Após a leitura e analise do datasheet do sensor DHT11, se verificou que a ligação do componente com o Arduino é realizada utilizando apenas uma saída VCC e GND para a alimentação, e apenas uma das portas digitais disponíveis, que ficará reservada e dedicada, sendo responsável pela comunicação com o microcontrolador. É através desta porta que todas as variações nas leituras de temperatura e umidade são informadas ao microcontrolador do Arduino.

3.5 SINALIZAÇÃO

No sistema de sinalização, para a montagem de um protótipo que realizasse a atividade do projeto, LED’s simples de 5 mm foram conectados as portas de saídas do Arduino. Uma vez que o sistema identifica uma variação que atinja os parâmetros de ativação, o microcontrolador fica comutando as portas de saídas por pequenas frações de segundos, numa sequência única que forma um traçado para ser visualizado.

A energia para alimentação dos LED’s é oriunda da porta do Arduino que é usada como saída digital, que quando habilitada fornece 5VDC para alimentação do sistema de LED’s, que contam com resistores para ajudar a limitar a corrente passante no circuito.

3.6 CÓDIGO EM C

Com todas as análises de hardware realizadas, outra parte importante para o funcionamento do projeto é a programação da função que será executada pelo microcontrolador do Arduino.

Esta programação aceita diversas linguagens computacionais, e por questões de simplicidade no código fonte, uma das mais conhecidas e que foi aplicada é a linguagem C.

Para escrever o código fonte na linguagem C, é necessário adicionar alguns códigos e tarefas importantes usadas pela própria ferramenta, para que o código possa ser executado de maneira correta. As operações seguem uma sequência, que é inclusão de biblioteca, atribuição de variável por porta na interface física, instanciar a biblioteca, estabelecer função da interface física, criação de função em laço, declaração das variáveis, inserção da função lógica e acionamentos das portas de saída que habilitarão os LED’s, usados para indicação luminosa do dispositivo.

3.6.1 Inclusão de Biblioteca

O funcionamento do escopo depende da leitura do sensor DTH11, que é uma peça fundamental do sistema. Como o sensor é um periférico do Arduino, sua conexão física é muito simples, feita pelo par de fios de alimentação e por um pino de sinal numa das portas de entrada e saída digital que ficará reservada para esta aplicação.

Porém, para que o sensor seja reconhecido e suas informações compreendidas pelo microcontrolador, o código fonte precisa da inclusão de uma biblioteca específica, que possui as rotinas padronizadas da linguagem de programação C, e contem operações comuns como tratamento de entrada/saída e cadeia de caracteres, usadas pelo sensor para se comunicar com a placa.

A biblioteca específica que tem esta capacidade é a idDHT11.h, e pode ser atribuída no código fonte pela linha de comando #include <idDHT11.h>, já no início do código fonte, de forma a garantir seu funcionamento.

3.6.2 Atribuição de Variável por Porta na Interface Física

Na descrição do código fonte é necessário atribuir em quais portas de entrada e saída os sinais serão lidos para trazer alguma informação ou enviados para alguma ação.

O Arduino Uno R3 possui quatorze portas de entrada/saída e destas portas foram reservadas dez para saída de acionamento dos LED’s que farão o sequenciamento para direcionamento do formato da curva e uma para leitura do sensor que traz as informações climáticas.

No protótipo, as portas três a doze foram atribuídas como saída, para os LED’s, e a porta dois designada para a comunicação com o sensor. Estas atribuições são escritas no próprio código fonte, em linguagem C, usando as linhas de comando descritas a seguir:

int idDHT11pin = 2; int idDHT11intNumber = 0; int led1 = 3; int led2 = 4; int led3 = 5; int led4 = 6; int led5 = 7; int led6 = 8; int led7 = 9; int led8 = 10; int led9 = 11; int led10 = 12; 3.6.3 Instanciar a Biblioteca

Por se tratar de uma biblioteca específica do sensor DHT11, é exigido que a criação de um invólucro para a chamada da função.

Instanciar é o processo de criar a estrutura lógica dos mesmos na memória. Isto ocorre quando declaramos os objetos, pois neste momento todo o processo de construção dos

mesmos é efetivado. Assim, toda vez que declaramos um objeto estamos instanciando-o, ou seja, estamos criando uma instância da classe.

A instanciação é feita também no código fonte, de acordo com os comandos: void dht11_wrapper(); idDHT11 DHT11(idDHT11pin,idDHT11intNumber,dht11_wrapper); void dht11_wrapper() { DHT11.isrCallback(); }

3.6.4 Estabelecer Função da Interface Física

É necessário estabelecer para as portas físicas se tais são de envio ou recebimento de informações, caracterizando-as como OUTPUT ou INPUT PIN. Devido ao fato de que os LED’s são acionados quando recebem o sinal +5V, se trata de um acionamento e não uma leitura de informação. Para que esta condição seja compreendida pelo microcontrolador, é necessário criar uma sintaxe no código fonte:

void setup() { Serial.begin(9600); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT); pinMode(led10, OUTPUT); }

3.6.5 Criação da Função em Laço

A função loop ou laço será repetido infinitas vezes, monitorando o código fonte para verificar o status de suas portas, verificação do estado do sensor, função lógica, acionamento dos LED’s e pausa entre as leituras climáticas.

A função é criada dentro do código fonte, pela função de laço void loop ().

3.6.5.1 Declaração das Variáveis

Foi previsto na análise que seriam considerados para o acionamento da sinalização, uma condição definida como Umidade e outra de Temperatura, prevendo existência de neblina ou chuva nestas condições climáticas. Também foi considerada a necessidade de verificar o estado do sensor. Portanto foram criadas três variáveis, temperatura, umidade e “result”, que são responsáveis pelos dados destas condições, seguindo a sintaxe da linguagem C:

int result = DHT11.acquireAndWait(); int umidade = DHT11.getHumidity(); int temperatura = DHT11.getCelsius();

3.6.5.2 Verificação do Estado do Sensor

O questionamento do sensor se faz necessário para que seja possível uma análise instantânea do funcionamento de tal, para que sejam diminuídas as chances de falhas.

A biblioteca do sensor prevê os estados OK, verificação, limite de tempo para resposta, coletando informação ou fazendo leitura, tempo pequeno para adquirir informação, não iniciado e erro desconhecido. Para tais casos, foi criado um switch variando por “result”, que retorna ao microcontrolador o real status do sensor, seguindo uma lógica no código fonte:

switch (result) { case IDDHTLIB_OK: Serial.println("OK"); break; case IDDHTLIB_ERROR_CHECKSUM: Serial.println("Error\n\r\tChecksum error"); break; case IDDHTLIB_ERROR_TIMEOUT: Serial.println("Error\n\r\tTime out error"); break;

case IDDHTLIB_ERROR_ACQUIRING: Serial.println("Error\n\r\tAcquiring"); break;

case IDDHTLIB_ERROR_DELTA:

Serial.println("Error\n\r\tDelta time to small"); break; case IDDHTLIB_ERROR_NOTSTARTED: Serial.println("Error\n\r\tNot started"); break; default: Serial.println("Unknown error"); break; } 3.6.5.3 Função Lógica

Conforme a lógica prevista, a sinalização deverá ser acionada quando as condições climáticas forem alcançadas. Desta forma foi utilizado a função “if”, e como o programa roda numa função de laço, fica monitorando constantemente as informações das portas do sensor, que informa as condições previstas para acionamento.

Quando ocorrem variações identificadas pelo sensor ao microcontrolador, a função “if” realiza outra rotina, que tem o objetivo principal de acionar os LED’s que piscam sequencialmente. Estas condições monitoradas são de variações na temperatura e umidade, sendo descrita no código fonte como if (umidade > 80), que é o ponto de disparo do acionamento e da parada do comando de acendimento dos LED’s.

3.6.5.4 Acionamento dos LED’s

Caso seja comprovado via sensor que a umidade e a temperatura do ambiente alcançaram o valor previsto no projeto, o microcontrolador habilita uma rotina para que as portas de saída que alimentam os LED’s sejam acionadas.

Cada porta de saída fica ativa por 70 milissegundos, tempo suficiente para uma piscada no LED, e depois desabilitada com o mesmo tempo de acionamento, passando para a próxima porta. Esta sequência também segue a lógica do laço, e mostra visualmente o acendimento sequencial de uma fileira de LED’s. Esta rotina é escrita no código fonte, obedecendo a sequência: digitalWrite(led1, HIGH); delay(70); digitalWrite(led1, LOW); delay(70); digitalWrite(led2, HIGH); delay(70); digitalWrite(led2, LOW); delay(70); digitalWrite(led3, HIGH); delay(70); digitalWrite(led3, LOW); delay(70); digitalWrite(led4, HIGH); delay(70); digitalWrite(led4, LOW);

delay(70); digitalWrite(led5, HIGH); delay(70); digitalWrite(led5, LOW); delay(70); digitalWrite(led6, HIGH); delay(70); digitalWrite(led6, LOW); delay(70); digitalWrite(led7, HIGH); delay(70); digitalWrite(led7, LOW); delay(70); digitalWrite(led8, HIGH); delay(70); digitalWrite(led8, LOW); delay(70); digitalWrite(led9, HIGH); delay(70); digitalWrite(led9, LOW); delay(70); digitalWrite(led10, HIGH); delay(70); digitalWrite(led10, LOW); delay(70);

3.6.5.5 Pausa Entre as Leituras

Para que não haja um sucessivo questionamento do microcontrolador ao sensor sobre as condições de temperatura e umidade, gerando um processamento consecutivo e desnecessário em pequenos intervalos de tempo, inclusive aumentando o consumo do

processador, são utilizadas as funções de “if” e “else” que pausas o sistema durante 20 minutos.

Sendo assim, o microcontrolador executa uma coleta de informações sobre as condições do clima em intervalor maiores, já que o clima não se altera tão instantaneamente.

No código fonte, os comandos para esta função pode ser descritos: else

{

delay(50000); }

3.7 CONSTRUÇÃO DO PROTÓTIPO

Realizados os devidos estudos de hardware e software do Arduino, com o código fonte já editado, compilado e transmitido para o microcontrolador, é hora da montagem da parte eletrônica e conexões dos periféricos usados para a aplicação do projeto.

O código fonte foi editado respeitando todas as premissas necessárias para seu perfeito funcionamento, usando o software disponibilizado na página do Arduino, sendo transferido para a placa pela porta USB/SERIAL.

Com a placa do Arduino já carregada com o executável do projeto, a parte de iluminação foi montada sobre um protoboard, que nada mais é do que uma matriz de contatos que facilita a montagem de circuitos eletrônicos. Todos os LED’s foram conectados lado a lado, cada um com seu resistor em série para limitar a corrente passante, e reduzindo também um pouco da luminosidade do LED, podendo ser alterada caso necessite de mais intensidade. Todos os LED’s foram conectados as portas pré-definidas como saídas, de maneira que o microcontrolador envie os comandos para estas portas.

Ao circuito foi aplicado o sensor DHT11 responsável pelo monitoramento do ambiente, pelas unidades de temperatura e umidade, que por sua vez informa estes dados ao microcontrolador. O sensor foi conectado a uma porta dedicada e configurada para tal aplicação.

Para alimentação do circuito foi conectado uma bateria de 12V, com capacidade de fornecimento de 28W para o sistema, um pouco mais do que 2A. Esta bateria é que

alimentará todo o circuito, e esta bateria carregada a placa fotovoltaica, que realiza o carregamento da bateria aproveitando a energia solar. Uma rápida representação em blocos do projeto é apresentada na Figura 17.

Figura 17: Diagrama de Blocos do Sistema de Sinalização

Fonte: Autores, 2013.

Com todos os passos realizados e conectados, foi possível ligar o protótipo para realizar testes de funcionamento.

O sistema de carregamento da bateria é composto por duas placas fotovoltaicas associadas, para melhorar a corrente de carga, fazendo com que a bateria se carrega mais rápido, aproveitando poucos períodos de luz para isso. O protótipo montado com todos seus componentes é apresentado na Foto 3.

Foto 3: Protótipo do Sistema de Sinalização no Protoboard

Documentos relacionados