Aprendendo Arduino — Parte 3B — Construindo Um Pouco útil - F7 Sistemas - Criar Sites , BH, Santa Luzia , MG
Previously, Battlestar Galactica…
Nós vimos os princípios básicos de funcionamento dos semicondutores, e porquê algumas de suas características se revelaram úteis na fabricação de sensores de gases muito mais baratos e sensíveis que os tradicionais. Agora vamos ver porquê isso pode ser utilizado, em conjunto com o Arduino para edificar um pouco… útil.
Eu tenho fobia e bujão de gás, acho incrível não termos explosões o tempo todo nas cidades. Cada vez que tenho que trocar o bujão é um parto, aquelas frações de segundo entre a válvula lacrar, enquanto o butano espirra pra fora, eu já prelúdios a pensar "Oh a Humanidade…"
Descobrir se a válvula está muito conectada é outro parto. Tenho que depender da técnica neandertal de espuma de sabão. Na cozinha logo… só fica a dica: se você tem gente com Alzheimer em morada, não se resfrie, vai precisar do nariz para detectar se eles abrem o gás, esquecem que vão fazer moca e deixam pra lá.
Quem poderá me salvar disso? Arduino, evidente, com ajuda de um módulo Sensor MQ-4.
Como expliquei por supino no outro cláusula, o uso é extremamente simples. Você tem um pino de saída do dedo que ninguém usa, positivo, negativo e saída analógica.
Os valores são convertidos pelo Arduino, que retorna um número entre 0 e 1.023. Se você se lembrar do primeiro cláusula, vai transmudar 1.023 para binário e desenredar que é 1111111111. Isso significa que a conversão analógico pra do dedo do Arduino tem uma solução de 10 bits.
Se você está entendendo solução porquê solução gráfica de imagens, a conformidade é perfeita. A solução de um sinal analógica significa em quantos pedaços discretos aquele sinal é representado. Usemos o bom e velho papel quadriculado. A solução dele é de 10 quadrados por cm. Digamos que temos uma curva em uma extensão de 5 cm de profundeza por 6 cm de largura.
Essa é uma amostragem com 50 bits de solução. Para a nossa veras isso é irreal. Trabalhamos com 10 bits, logo o resultado é mais ou menos assim:
10 bits parece pouco, mas se usados porquê informação de cor dão 1.024 tons de cinza por pixel. Aquela fanfiqueira ficou rica com 50 tons de cinza e a sonda soviética Venera 9 transmitiu as primeira imagens da superfície de Vênus com somente 6 bits, ou 63 tons de cinza.
Vamos ver logo nosso rotação inicial: usando só os componentes do kit de Arduino que comprei. Em um experimento inicial criaremos um rotação para transformar as informações do sensor em áudio.
Inicialmente pensei em fazer um pouco porquê um contador Geiger, mas pro áudio funcionar recta teria que usar interrupções e não é hora de falar disso ainda. A opção é tom contínuo, igual detectores de metal.
S resultado saiu melhor do que eu imaginava:
Como funciona o giro:
Um LED verdejante é ligado em série com um resistor de 1 kΩ ao pino 9.
S pólo positivo do buzzer é ligado ao pino 9 do Arduino.
AVISO: o objetivo cá é didática, não performance. Se você tem sugestões de porquê otimizar o código, rotinas em assembler e comandos esotéricos, mande mande um email e explicarei o que deve fazer com sua sugestão, mas pra antecipar, consiga bastante vaselina.
S programa é quase tão simples quanto o giro:
//na tempo de testes recomendo diminuir o delay.
for (jorge = 0; jorge <3; jorge +=1)
%MINIFYHTML468d1ab5eeae436da9fb89f6aa24080417%%MINIFYHTML468d1ab5eeae436da9fb89f6aa24080418%
LEDRed = 10;
Aqui nós definimos nossas variáveis principais e nossas constantes. Sempre que provável use constantes, elas são movidas pra memória FLASH e não comem sua preciosa RAM.
As três constantes buzz, LEDSinal e LEDRed funcionam porquê mnemônicos para facilitar a associação dos pinos com suas funções. Assim em vez de grafar um comando digitalWrite(9,HIGH) e depois ter que lembrar que diabos faz o pino 9, você escreve digitalWrite(LEDSignal,HIGH).
A variável jorge é um inteiro de 16 bits, unsigned, ou seja, sem sinal. Ele é sempre positivo. Como tem 16 bits, seu valor sumo é 1111111111111111 ou em binário 65.535. São só dois bytes, é mais seguro que usar um inteiro simples que se restringe a valores entre 0 e 255.
A variável som é um inteiro simples. Ele será a frequência gerada pelo Arduino. A função de áudio aceita valores entre 0 e 65.535 mas vamos trabalhar com com 256 variações, isso gera um resultado mais sintético e "robótico".
Aqui nós definimos o que cada pino vai fazer. Todos os três são definidos porquê saída de dados. S pino A0 não é definido, pois por padrão ele é um pino analógico de ingressão. Ele pode ser usado porquê um pino do dedo de Entrada/Saída, mas não é o caso.
Aqui nosso giro começa a funcionar. A primeira coisa visível que o Arduino faz é extinguir o LED verdejante e conflagrar o LED vermelho.
Uma particularidade dos sensores semicondutores de gases é que eles precisam de um período de aquecimento. Isso é feito para que a superfície leitora atinja uma temperatura controlada, pois a temperatura afeta o resultado da leitura. Um fio de tungstênio aquele mesmo o sensor, desvelo ao reclinar na troço gradeada.
Neste ponto indicamos ao usuário que a calibragem foi feita e o sensor já está pronto para fazer leituras. Um loop de 3 iterações repete código que aciona o LED verdejante, pausa 10 milissegundos, apaga o LED, pausa outros 10 e o ciclo se repete até a 3ª vez.
Uma função para piscar o LED verdejante a cada 20 milissegundos. ao invés de repetir esse código sempre que precisar piscar o LED, é só invocar por pisca(); no código.
Começa o loop principal do programa. E já começa com uma pausa. Necessária? Não, mas o sim ficou melhor com ela. Em seguida a risco
S que ela faz é atribuir à variável sensor o valor, entre 0 e 1023 correspondendo ao sinal no pino analógico A0.
Essa risco cá é o pulo do gato:
S comando map do C do Arduino é uma espécie de regra de três. Digamos que você tenha um vegetal com pausa em km, e uma régua com centímetros. Você sabe que a pausa entre Rio e São Paulo é de 357,65 km. No seu vegetal isso dá, digamos, 11 cm. Qual a pausa entre Rio e Belo Horizonte?
Essa função recebe dois conjuntos lineares de números e graduação um valor no primeiro conjunto retornando o equivalente no segundo.
No nosso caso eu digo que o conjunto de valores do sensor vai de 10 a 50, é uma forma de concentrar as leituras nas baixas concentrações de gás, mas o map aceita valores fora da filete e isso zoneou um pouco o programa. Os parâmetros seguintes dizem para retornar um valor entre 50 e 400, a fita de frequência do som que eu quero. Baixa.
S próximo comando é o que faz estrondo:
Aqui eu mando ele enunciar na porta buzz um tom de frequência som, com duração de 1/10 vezes o valor original do sinal analógico convertido.
S processamento logo cessa por 50 milissegundos, e o loop se reinicia. P mal-parecido mas funciona.
Eu lembrei dos detectores de radiação eletromagnética que os caçadores usam em Supernatural. Será que dá pra transcrever os valores do sensor MQ-4 para um sequencial de LEDs?
Mas isso é material para o próximo cláusula.
DISCLAIMER: troço dos componentes deste projeto foram fornecidos pelos Baú da Eletrônica, porquê o Sensor de Gás MQ-4. Outros eu comprei, porquê o Kit Arduíno Start.