marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/
2 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ Experimento 1: Piscar um led Blink Portas Digitais
Antes disso......
Agora sim.. vamos ao experimento Testando a polaridade do LED
3 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ Agora Sim!!! Circuito final...
Agora o Experimento...
O experimento a seguir prope um primeiro contato com o Arduino: um LED ser ligado a placa em uma porta digital, e atravs do cdigo programado nele o LED piscar interruptamente, com um intervalo de alternao entre acender e apagar de 1 segundo. Nesse experimento sero utilizados os seguintes componentes: 1 LED, 1 resistor de 330 Ohm, 2 fios. Definio dos componentes:
LED LED a sigla em ingls para Light Emitting Diode, ou Diodo Emissor de Luz. O led um diodo semicondutor (juno P-N) que quando energizado emite luz visvel. Obs: O led um componente que possui polaridade, portanto a sua perna maior deve ser ligada a alimentao e a perna menor terra (GND na placa Arduino) no caso de um led normal de 2 pernas, caso seja um led RGB, que possui 4 pernas, a maior ligada no terra. Resistor
4 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ O resistor um dispositivo cujas principais funes so: dificultar a passagem da corrente eltrica e transformar energia eltrica em energia trmica por efeito joule. Entendemos a dificuldade que o resistor apresenta passagem da corrente eltrica como sendo resistncia eltrica. O material mais comum na fabricao do resistor o carbono. Para o resistor vlida a expresso:
Que relaciona a resistncia oferecida passagem da corrente eltrica com tenso e corrente eltrica. Devemos lembrar que a unidade da resistncia eltrica o ohm () relao entre a tenso e a corrente eltrica em ampre.
Obs: Diferente do led o resistor no possui polaridade, portanto a ligao de seus terminais no segue nehuma regra. Para ver a polaridade do led clique no link http://inventormaluco.com/2012/03/30/led-que-respira/ Neste exemplo utilizaremos um circuito simples , com um LED e um resistor (cujo valor mnimo vai ser calculado no item 1) em srie, conforme indica a figura abaixo Este circuito foi desenhado em um software freeware Fritzing disponvel em http://fritzing.org/.
5 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/
Utilizando Exemplos do Arduino
Este cdigo tambm est disponvel em exemplos no IDE do Arduino veja na figura abaixo como obt-lo. Exemplo : Blink
Para rodar o programa no Arduino
Altere o intervalo de tempo em que o LED fica aceso e o intervalo de tempo que fica apagado!
6 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ Viu como fcil! Comando via teclado -_ Funo Serial.read()
Com o mesmo circuito anterior vamos enviar comandos para acender e apagar o led via teclado. Copie o cdigo abaixo na IDE (Integrated Development Environment) do Arduino Faa upolad do programa
Abra o monitor serial ! int ledPin = 13; //define o pino em que o led est ligado char leitura; //define a varivel leitura que corresponde a uma letra o teclado //definido por char
void setup() { pinMode(ledPin, OUTPUT); //define que o pino 13 ser uma saida Serial.begin(9600);// taxa de comunicaao com a serial }
void loop() {
leitura = Serial.read(); // a varivel leitura ser obtida atravs do teclado if (leitura == 'L') { digitalWrite(ledPin, LOW); } else if (leitura == 'H') { digitalWrite(ledPin, HIGH); } } Digite a letra L ou H e, seguida tecle enter para alterar o estado do led
7 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ Experimento 2: Leitura de porta analgica com um LDR
O experimento a seguir prope um contato mais avanado com o Arduino, que consiste em ligar um LDR (Light Dependent Resistor) 1 a placa Arduino em uma porta analgica em seguida ler os valores fornecidos pelo LDR e envi-los para a leitura no monitor serial a cada 0,25 segundos. Nesse experimento sero utilizados os seguintes componentes: 1 LDR, 1 resistor de 33K ou 10K , alguns fios.
Definio dos componentes:
LDR
Do ingls Light Dependent Resistor, ou resistor dependente de luz, a resistncia do LDR varia de forma inversamente proporcional quantidade de luz incidente sobre ele, isto , enquanto o feixe de luz estiver incidindo, o LDR oferece uma resistncia muito baixa. Quando este feixe cortado, sua resistncia aumenta, o LDR tambm chamado de clula fotocondutiva, ou ainda de fotoresistncia, o LDR um dispositivo semicondutor de dois terminais.
Com o LDR pode-se fazer o controle automtico de porta, alarme contra ladro, controle de iluminao em um recinto entre outros. Obs: Assim como o resistor o LDR no possui polaridade, portanto a ligao de seus terminais no segue nenhuma ordem pr-determinada.
Monte o circuito com base na figura a abaixo, e faa o upload do cdigo usando a IDE do Arduino.
O valor do resistor que ser utilizado igual a 10 K
1 Indicamos o uso de simuladores para mostrar esta dependncia. Um bom simulador est disponvel em http://phet.colorado.edu/sims/conductivity/conductivity_pt_BR.jnlp. O uso deste simulador (ou qualquer outro) permitir aos estudantes melhor compreender o funcionamento de um LDR. muito importante que o estudante compreenda cada passo do processo de aquisio para um amplo domnio da tecnologia.
8 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/
9 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ Faa upload e abra o monitor serial
Varie a intensidade de Luz sobre o LDR ( colocando a mo sobre o sensor) e observe o que ocorre.
Compreendendo a Estrutura do Cdigo
A estrutura de um cdigo para o Arduino muito simples temos basicamente tres procedimentos; declarao de variavies, setup e loop.
Declarao de Variaveis.
Observe no cdigo que definimos a varivel LDR como int (que corresponde a um inteiro) Podemos ter outros tipos de variveis e segue abaixo algumas variveis que normalmente utilizamos
Tipos de Variveis (as mais utilizadas)
Tipo
Descrio Referencia no site e exemplos int Numero inteiro http://arduino.cc/en/Reference/Int float Nmero fracionrio(ponto flutuante) http://arduino.cc/en/Reference/Float double Nmero fracionrio, como mais preciso http://arduino.cc/en/Reference/Double char caractere http://arduino.cc/en/Reference/Char boolean Verdadeiro ou falso http://arduino.cc/en/Reference/Boolea
10 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/
nVariables long Longas maiores que 32 bits http://arduino.cc/en/Reference/Long unsigned
Impede que assuma valores negativos
unsigned long
Variveis longas e sempre positivas (em geral usada para tempo) http://arduino.cc/en/Reference/Unsigne dLong byte
Numero de 8 bits
http://arduino.cc/en/Reference/Byte
Estrutura de Setup
void setup() { entre os colchetes devemos especificar a taxa de velocidade em que a transmissao de dados ocorrer definido por Serial.begin(taxa em bps) os pinos de entrada e sada definidos por : pinMode(A0, INPUT ou OUTPUT) etc... }
Estrutura de Loop (o que vai rodar repetidamente)
void loop() { entre os colchetes um conjunto de operaoes e commandos que devem ser executados }
Impresso no monitor serial
Usamos o comando Serial.print Se o contedo estiver entre aspas ser impresso na tela exatamente o que voc escreveu, como por exemplo Valor lido no LDR Se quisermos que seja impresso o valor lido ento colocamos entre parnteses a varivel que ser quer obter a impresso; no exemplo Serial.print (LDR). Para imprimir em linha o comando Serial.println Observe que logo abaixo da sequencia, solicitamos a impresso de uma linha em branco Serial.println(), isso permite que tenhamos os dados em duas colunas (um ao lado do outro) O comando delay(valor) espera um dado intervalo de tempo para a nova impresso em milisegundos Altere o delay e observe o que ocorre com os dados Delay ( o intervalo de tempo para impresso no monitor serial em milisegundos)
11 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ Inserindo a varivel tempo
Para a coleta de dados em experimentos, necessitamos da indicao de como a varivel evolui com o tempo, ou ainda a relao entre diferentes variveis.
Para que voc possa obter a impresso dos dados em colunas das variveis; tempo e valor para o sensor LDR, segue o programa abaixo
void loop() { tempo= millis(); // base de tempo para a coleta LDR = analogRead(A0); { Serial.print(tempo); Serial.print(" "); // introduz um espao entre as colunas Serial.print(LDR); } Serial.println(); // imprime em linhas delay(250); }
12 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ Experimento 3: Construindo um Alarme tico Arduino respondendo sensores - Condicional
LDR e disparo atravs de uma porta digital
A partir da leitura de um LDR ligado em uma porta analgica o Arduino vai permitir perceber que ocorreu um bloqueio no feixe de luz, como por exemplo, acender um LED vermelho. Nesse experimento sero utilizados os seguintes componentes: 1 LDR 1 resistor de 33K ou 10 K 1 led 1 resistor de 150 a 330 .
1 passo: Leitura na porta Analgica
LDR na porta Analgica
So dispositivos eltricos que tm a sua resistncia eltrica alterada com a incidncia de luz.
Com o circuito usando um LDR e um resistor em srie podemos efetuar leitura de tenso no LDR atravs da porta analgica do Arduino.
Copie o cdigo e faca upload para o Arduino e abra o monitor serial.
//Cdigo
int LDR; // define a variavel LDR
void setup(){ pinMode(A0, INPUT); // estabelece o pino A0 como //entrada Serial.begin(9600); // comunicao com a serial }
void loop(){ LDR = analogRead(A0); // LDR leitura em A0 { Serial.print("Valor lido no LDR: "); // impresso no monitor //serial Serial.print(LDR);} Serial.println(); delay(250); }
+V LDR R GND Porta analogical (0)
13 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ 2 passo: Calibrao do sensor para bloqueio da luz
Incida um feixe de luz (ou utilize a luz ambiente) no LDR. Abra o nonitor serial e observe qual ser o valor na porta analgica A0 (em decimal) quando o feixe de luz bloqueado Em seguida estabelea a condio para o disparo do alarme.
3 passo: Inserindo a condio de acendimento:
Se a leitura na analgica for maior/menor que o valor obtido na calibrao escreva da porta digital 13 HIGH, seno escreva LOW
Orientao para o Cdigo
Veja a sintaxe para a condio de if/else em http://arduino.cc/en/Reference/Else Para escrever na porta digital http://arduino.cc/en/Reference/DigitalWrite
int LDR; //declara varivel inteira
void setup() { Serial.begin(9600); pinMode(A0, INPUT);// entrada A0 pinMode(13,OUTPUT); // define o pino 13 como sada }
void loop() {
LDR = analogRead(A0); // Serial.println(LDR); // imprime em linhas o valor do LDR delay(200); // intervalo de tempo entre as medidas
if (LDR > 200) { // este valor voce dever calibrar digitalWrite(13,HIGH); // para escrever na digital veja } } // em http://arduino.cc/en/Reference/DigitalWrite else { digitalWrite(13,LOW); // escreva oposto da condio anterior; } }
14 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ Desafios:
Tarefa e desafio: Com o cicuito montado para leitura no LDR, monte um programa e um sistema Fisico em que tenhamos uma sequencia de leds acendendo conforme a distancia de bloqueio de luz no LDR.
A sequencia deve ser a seguinte: Com a dimiuio da distancia acenderemos os leds na seguinte sequencia:
Maior distancia: led azul Distancia intermediaria1 (mais prxima led verde) Menor distancia vermelho
Para acender os leds use as portas digitais e insira linhas de programao com condies de if
Faa um pequeno vdeo com seu aparelho celular da montagem e poste no seu Facebook
!!!
15 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/
Construindo um Alarme Sonoro
A funo
tone( pino, freqncia e durao da nota). http://arduino.cc/en/Reference/Tone (ver anexo)
Fornece um sinal sonoro de freqncia conhecida
Acrescente no seu alarme um som para isso use o pino 9, por exemplo, para tocar um alarme e faa a conexo com um plug Jackfmea-udio na sada com um resistor de 1K a 330 ohms em serie, por proteo. Para retirar o sinal sonoro, basta que voc envie um sinal com freqncia igual a 0 ou ainda noTone(pino) (http://arduino.cc/en/Reference/NoTone)
16 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/
Codigo Fonte
int LDR; //declara varivel
void setup(){ Serial.begin(9600); pinMode(A0, INPUT);// entrada A0 pinMode(13,OUTPUT); // define o pino 13 como saida pinMode(9,OUTPUT); // define o pino 9 como saida }
void loop(){
LDR = analogRead(A0); // leitura na porta A0 Serial.println(LDR); // imprimir valor lido no LDR delay(200);
if (LDR > 200) {// varie este valor para o que voc deseja { digitalWrite(13, HIGH);// escreva na digital 13 alto tone(9, 440, 100);// (funo tone (pino, frequncia, durao) }
else { digitalWrite(13, LOW); //escreva na digital 13 baixo noTone(9); // parar de tocar } }
17 marisac@pucsp.br; molisani@hotmail.com e cris@pucsp.br
Oficina Arduino para Iniciantes http://labduino.blogspot.com.br/ Desafio
Distancia diferentes sequencia em cores diferentes e tocar as notas d, r e mi
Tarefa e desafio: Com o circuito montado para leitura no LDR, monte um programa e um sistema Fisico em que tenhamos uma sequencia de leds acendendo conforme a distancia de bloqueio de luz no LDR.
A sequencia deve ser a seguinte: Com a diminuio da distancia acenderemos os leds na seguinte sequencia:
Maior distancia: led azul Distancia intermediaria1 (mais prxima led verde) Menor distancia vermelho (e tocar uma sequencia de notas musicais) Para acender os leds use as portas digitais e insira linhas de programao com condies de if
Faa um pequeno vdeo com seu aparelho celular da montagem e poste no seu Facebook
!!
Outras referncias http://cppreference.com/wiki/br-pt/data_types http://www.mtm.ufsc.br/~azeredo/cursoC/aulas/c320.html http://equipe.nce.ufrj.br/adriano/c/apostila/tipos.htm http://labduino.blogspot.com.br/2012/02/cartilha-de-programacao-em-c-para-o.html