Social Icons

Mostrando postagens com marcador Newbie. Mostrar todas as postagens
Mostrando postagens com marcador Newbie. Mostrar todas as postagens

4.5) Ligando LED's Pelo Teclado do PC



Nesta aula será possível entender como os dados são lidos pelo arduino e como controlar LEDs apenas enviando dados pela tecla do seu computador.
 Vamos iniciar com um programa que exemplifica o funcionamento da leitura de dados pela porta serial "Serial.read(); "




Não será preciso nesse momento inicial usar a matriz de contatos.

A1-Inicialmente execute este códio abaixo.



int n = 0; // Para entrada de dados seriais (for incoming serial data)

void setup() {
Serial.begin(9600); // Ativa a porta serial (opens serial port, sets data rate to 9600 bps)
}

void loop() {

// Testa se a prta serial esta recebendo dados (send data only when you receive data:)
if (Serial.available() >0) {
// leitura dos dados (read the incoming byte:)
n = Serial.read();

// mostra na tela (say what you got:)
Serial.print("Valor digitado: ");
Serial.println(n, BYTE);
Serial.print("Valor lido: ");
Serial.println(n);

}
}

Após executar ative a Serial Monitor e digite valores:



Ao ativar e digitar valores e clicar em (Send) teremos na tela:




Neste momento os números: 1,2,3,4,5 e o número: 8 foram diditados.
Como é possível notar valor digitado "1" é lido como "49" e o valor "2" como "50". Perceba que há uma progressão. É importante notar essa relação pois esses valores serão trabalhados no programa seguinte.


Vamos aprofundar mais um pouco?
Agora será preciso montar o circuito abaixo na sua matriz de contatos:

Clicar na imagem para ampliar




A2-Execute o código abaixo:

int n;
int pin7 = 7;
int pin8 = 8;


void setup() {
Serial.begin(9600);
pinMode(pin7, OUTPUT);
pinMode(pin8, OUTPUT);
Serial.println("Digite:\n 2-Vermelho \n 3-Verde \n 4-Vermelho e Verde \n 5-Apagar Todos");
Serial.println("---------------// www.BrasilRobotics.blogspot.com");
}


void loop() {


// testa se esta recebendo dado do teclado
if (Serial.available() >0) {

// faz leitura do numero digitado
n = Serial.read();

Serial.print("Voce digitou: ");
Serial.println(n, BYTE); // Imprime na tela o valor do telhado em BYTE


//testes condicionais

if( n==50 ){ // 2-vermelho (red)
digitalWrite(pin7,HIGH);
digitalWrite(pin8,LOW);

}

if(n==51){ // 3-Verde (green)

digitalWrite(pin8,HIGH);
digitalWrite(pin7,LOW);
}

if(n==52){ // 4-Verde (green)

digitalWrite(pin8,HIGH);
digitalWrite(pin7,HIGH);
}

if(n==53){ // 5-desliga LEDs (turns off)

digitalWrite(pin8,LOW);
digitalWrite(pin7,LOW);
}

}

}


Após executar ative a Serial Monitor:


Será mostrado na tela inicialmente:




Estes dados são mostrados uma única vez e foram apresentados no "void setup()". Caso estivessem no "void loop" seriam constantemente mostrados. Mas a idéia aqui é criar um cabeçalho para orientar o usuário.
Logo em seguida digite valores: como 1, 2, 3 , 4, 5 e observe o que acontece com os LEDs.



Será possivel notar cinco(5) comportamentos:

1°- Quando digitamos: "2" temos o LED vermelho ligado

2°- Quando digitamos: "3" temos o LED verde ligado

3°- Quando digitamos: "4" temos vermelho e verde ligados

4°- Quando digitamos: "5" temos todos apagados.



5°- Quando digitamos: 1, 5, 6 e outros valores nada acontece.


Também pode ser conferido no vídeo:




Bem... e como tudo acontece no código?
Temos a leitura do valor "n" que é gerado pelo teclado como vimos no código anterior esse valor relaciona um dígito a outros. 
Como o objetivo é comparar valores lidos pelo teclado precisamos utilizar o valor real do "n" e compara-lo em uma condição: (n==50) "n é igual a 50?", como 50 representa do digito "2", caso você tenha pressionado o número "2" a condição torna-se verdade e uma tarefa é executada.  
É possível usar outros valores e também acionar outros dispositivos como motores usando essa mesma lógica, basta adicionar mais condições.

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: