Social Icons

Mostrando postagens com marcador ComoFaz?. Mostrar todas as postagens
Mostrando postagens com marcador ComoFaz?. Mostrar todas as postagens

4.4) Botões/Buzzer + LM35...





Olá todos. Para quem já conferiu os últimos tutoriais aqui vai mais uma brincadeirinha.
Vamos interligar um sensor de temperatura que mostra em Celsius, Fahrenheit e Kelvin? E que tal usar um piezo ou Buzzer para indicar com sinal sonoro quando a temperatura é mostrada?
Esse tutorial será dividido em 3(três) partes para facilitar a compreensão:
1° Como usar o buzze e acionar por botão
2° Como usar o LM35(sensor de temperatura)
3°Como interligar o Buzzer, o botão e o LM35

1°-passo:
Munido de sua matriz de contatos e um buzzer monte o circuito abaixo:
Atenção: O piezo é um componente polarizado(+-) .

Clicar na imagem para ampliar




A1-Execute o programa:


int piezoPin = 9;

void setup() {
pinMode(piezoPin, OUTPUT);
}

void loop() {

digitalWrite(piezoPin, HIGH);
delayMicroseconds(600);
digitalWrite(piezoPin, LOW);
delayMicroseconds(600);
}

Comentando o código:
Temos o buzzer ligado ao pino 9 que hora esta ligado e hora desligado. O valor 600 é a alternância nesse comportamento.
Experimente mudar esses valores para criar sons mais agudos ou graves. O 600 foi um som que achei bem irritante. Espero que goste!

Agora com sua matriz de contatos monte o circuito abaixo adicionando um Botão:

Clicar na imagem para ampliar





A2-Execute o programa:



int piezoPin = 9, botao=7, val=0;

void setup() {
pinMode(piezoPin, OUTPUT);
pinMode(botao,INPUT);
}

void loop() {

val=digitalRead(botao);
if(val==1){
digitalWrite(piezoPin, HIGH);
delayMicroseconds(600);
digitalWrite(piezoPin, LOW);
delayMicroseconds(600);
}

}

Comentando o código:

Como tudo funciona? O botão é lido e quando ele tem "valor 1" que é o mesmo que HIGH ou 5V ele executa uma tarefa: a de emitir um som.

Veja o vídeo:




2°-passo:
Agora que sabemos como gerar um som de alerta e usar o botão vamos para o segundo passo:


Munido mais uma vez de sua matriz de contatos e um LM35 monte o circuito abaixo:
Datasheet do LM35


Clicar na imagem para ampliar




B1-Execute o código:




int pin = 0;
int tempc= 0, tempf=0,tempk=0;
int samples[8];
int i;
void setup(){

Serial.begin(9600);
}

void loop()
{

for(i = 0; i<=7 ;i++){
samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
tempc = tempc + samples[i]; // somando os 8 valores lidos
delay(1000);
}

tempc = tempc/8.0; // tirando a media dos 8 valores
tempf = (tempc * 9)/ 5 + 32; // converte para fahrenheit
tempk= tempc+273; // converte para Kelvin
delay(100);

//Mostra as temperaturas em C F e K

Serial.print("TemperaturaC:");
Serial.print(tempc);
Serial.print("\t");
Serial.print("TemperaturaF:");
Serial.print(tempf);
Serial.print("\t");
Serial.print("TemperaturaK:");
Serial.print(tempk);
Serial.print("\n");

}
 

Comentando o código:

Temos a leitura do sensor no pino 0(uma entrada analógica) que gera valores entre 0 e 1023. E como relacionar a temperatura com esses valores?
Uma equação cria uma relação entre o valor de referência que é 5V com esses valores analogicos(de 0 a 1023). Estabelecendo 0,01V para cada 1C°.
Podemos resumir em:

Temperatura em Celsius = ( 5.0 * analogRead(pin) * 100.0) / 1024.0


É possível ainda usar o 3.3V  do Arduino como refência externa mas vamos deixar esse tema para outra oportunidade.
Por fim o programa mostra os valores na tela( Serial Monitor ).



3-passo:
Vamos integrar todos os outros circuitos já montados? Monte na matriz de contatos o circito:

Clicar na imagem para ampliar




B2-Execute o código:


int pin = 0;
int tempc= 0, tempf=0,tempk=0;
int samples[8];
int i;

int piezoPin = 9, botao=7, val=0;

void setup(){

Serial.begin(9600);

pinMode(piezoPin, OUTPUT);
pinMode(botao,INPUT);
}

void loop()
{

for(i = 0; i<=7 ;i++){
samples[i] = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
tempc = tempc + samples[i];
delay(15);
}
tempc = tempc/8.0;
tempf = (tempc * 9)/ 5 + 32;
tempk= tempc+273;
delay(10);

// testando o botão
val=digitalRead(botao);
if(val==1){

//Mostrando na tela:
Serial.print("TemperaturaC:");
Serial.print(tempc);
Serial.print("\t");
Serial.print("TemperaturaF:");
Serial.print(tempf);
Serial.print("\t");
Serial.print("TemperaturaK:");
Serial.print(tempk);
Serial.print("\n");


// Som:
digitalWrite(piezoPin, HIGH);
delayMicroseconds(600);
digitalWrite(piezoPin, LOW);
delayMicroseconds(600);
}

}

 
Comentando o código:
Basicamente este código engloba todos os outros. 
Ele gera som quando o botão é pressionado e simultaneamente mostra na tela os valores das temperaturas nas diferentes escalas.

Valores gerados na tela:

Veja no vídeo um sinal sonoro para cada click no botão:



4) Primeiros Passos ( Pisca Led )

O iniciante precisa aprender o Bê-a-Bá para poder fazer suas peripécias. Pois bem senhores... apresento o tutorial mais básico para os aventureiros que queiram desbravar o mundo do Arduino.

Para Programação Seria o Famoso "Hello World"   ...(Google)

1-O básico da programação: 

Vamos dar uma olhada nessa "belezura"? Note os dois blocos distintos de instruções entre chaves:


void setup() {
// Escreva o código que será executado apenas uma vez.

}

void loop() {
// Escreva o código que será executado infinitas vezes

}

A função setup() é chamada quando o código(sketch) é executado.

Use-a para:
  • Iniciar variáveis.
  • O modo como os pinos devem operar: entrada(INPUT) ou saída(OUTPUT)
  • Bibliotecas.
  • Cabeçalhos
Mas atenção! Tudo o que estiver no setup() será executado apenas uma vez imediatamente após o microcontrolador ser energizado.
Caso o botão de reset que se encontra na placa do arduino for pressionada ou a energia cair o código será reinicializado e nessa condição especial o setup() novamente é executado.


A função loop() tem um propósito fundamental repetir infinitamente o que  está escrito. Bem... mas qual a finalidade disso? 
Ao repetir a mesma função o microntrolador nunca para de funcionar. Imagine como seria se ao digitar uma letra seu editor de texto parasse de funcionar e fosse preciso abri-lo novamente para escrever a outra letras da palavra? Ou após um carro passar num semáforo de trânsito as luzes não brilharem mais?  
Basicamente o loop() será o seu escravo e o setup() dirá como o escravo se comporta. 

Usa-se: // (duas barras invertidas) para fazer cometários na linha de código. O objetivo é deixar o mais claro possível para que terceiros possam entender. 
Tudo que é deixado como comentário será descartado no momento da gravação no microcontrolador.


O Primeiro Projeto com seu Arduino


Para este projeto será preciso um LED , um resistor e fios e uma matriz de contatos: 
 

Aprendendo um pouco sobre os compoentes:

O Led é um componente polarizado e deve ser corretamente conectado. Perceba que o polo positivo possui uma perna maior.
Alguns Leds apresentam o polo negativo com um chanfro(parte ligeiramente plana) no seu encapsulamento.
Temos no Arduino:
  • VCC(+) 
  • GND ou Ground como (-).
O LED é um diodo emissor de luz e ao alimenta-lo corretamente, permite o fluxo de energia apenas em um sentido.



O resistor é um componente que oferece resistência a passagem da energia elétrica. Ao combina-lo com outros componente pode-se fornecer a energia correta para alimentar componentes.
O filamento de tungstênio das lâmpadas incandescentes é uma resistência que transforma grande parte da energia que flui por ele em energia térmica e luminosa.  
As faixas de cores determina quanto é maior essa resistência.

A matriz de contatos possui apenas pontos interligados num sentido vertical. O que permite combinar e interligar os componetes rapidamente.
Veja na imagem abaixo duas fileiras independentes("A" e "B") com seus respectivos pontos interligados.

Os fios: existem modelos de fios que permitem uma fácil conexão. Dê preferência para estes modelos, pois vão garantir ligações seguras e a rapidez na montagem e manutenção do circuito.

A montagem do Projeto:


Agora que está munido destes componetes e de como eles operam monte o circuito abaixo:
Valores de resistores entre 220R e 10k podem ser usados.  

 Clicar na imagem para ampliar



Após a montagem copie o código abaixo e cole na interface de programação do arduino e faça o upload, após alguns segundos ele executará automaticamente:



void setup() {

pinMode(12, OUTPUT); //Declara que o pino 12 do arduino é de Saída. Vai mandar dados, energia...
}

void loop() {

digitalWrite(12, HIGH);  // Diz que o pino 12 do arduino está Ligado. Logo LED ON
delay(1000); // Espera por 1s

digitalWrite(12, LOW); //  Diz que o pino 12 do arduino está Desligado. Logo: LED OFF
delay(1000); // Espera por 1s
}


Comentando o código:
Este é o código chamado Blink. Nele temos declarado no setup() que usaremos o pino 12 do Arduino e este não fará leitura de dados mas enviará por isso Saída(OUTPUT).
Temos no loop()  duas tarefas sendo executadas: 
  • digitalWrite(12,HIGH); diz que o pino 12 é o polo + que alimenta o LED. Logo há um polo(+) e outro (-) e o Led liga pois é possível fluir a energia.
  • digitalWrite(12,LOW)diz que o pino 12 é o pólo - logo não há fluxo de energia com dois polos(-) e o LED fica desligado.
  • delay(1000);  esté entra na brincadeira para dizer: OPA! Calma ai... espere um pouco. E para cada "1000" temos 1s, logo se tivessimos 5000 teríamos um atraso de 5s.
Então se temos o LED ligado por 1s e desligado por 1s ele liga e desliga muito rápido. Como essa informação está no loop() que executa infinitas vezes teremos o LED piscando o tempo todo.


Veja o vídeo como funciona:








Modificando o Código:

Após fixar bem os conceitos elucidados vamos modificar o código e ver o que acontece.

M1-Execute o código:


void setup() {

pinMode(12, OUTPUT); //Declara que o pino 12 do arduino é de Saída. Vai mandar dados, energia...
}

void loop() {

digitalWrite(12, HIGH);  // Diz que o pino 12 do arduino está Ligado. Logo LED ON
delay(100); // Espera por 1s

digitalWrite(12, LOW); //  Diz que o pino 12 do arduino está Desligado. Logo: LED OFF
delay(100); // Espera por 1s
}

Comentário sobre o código:
Observe que o valor do delay() foi modificado de (1000) para (100). O que aconteceria se fosse (10) ou qualquer outro valor?
Experimente modificar e perceba que ligando e desligando algo temos comportamentos de piscar diferentes.


M2-Execute esse outro código:



void setup() {

pinMode(12, OUTPUT); //Declara que o pino 12 do arduino é de Saída. Vai mandar dados, energia...
}

void loop() {

digitalWrite(12, HIGH);  // Diz que o pino 12 do arduino está Ligado. Logo LED ON
delay(random(100)); // Espera por 1s

digitalWrite(12, LOW); //  Diz que o pino 12 do arduino está Desligado. Logo: LED OFF
delay(random(100)); // Espera por 1s
}


Comentário sobre o código:

Substituímos no delay() o valor de (1000) por: random(100). O que queremos com isso?
Já ouviu falar em números randômicos? Aleatórios? O random() gera números aleatórios. Mas ao inserir um valor como 100 em random() estamos informando que o número deve variar entre 0 e 99 ou seja: entre 0 e (100-1). 
Logo: temos um comportamento inesperado no piscar do LED, o que gera um efeito interessante.

Experimente o seguinte: 
  • Pegue alguns centímetros de um papel branco. Papel higiênico é excelente.
  • Amassar bem e posicionar sobre o LED. 
  • Mude a cor do LED para testar os efeitos.