Você está na página 1de 26

O que Arduino ?

Arduino uma plataforma de hardware livre, baseado em microprocessador de cdigo aberto, uma placa fsica em cdigo aberto baseada em um circuito de entradas/sadas simples, e linguagem de programao padro, que essencialmente C/C++, sendo uma plataforma completamente personalizvel j que todo o seu projeto aberto aos usurios. O objetivo da criao do Arduino ter uma plataforma totalmente aberta, tanto hardware como softwares acessveis, pois alm de ter um custo baixo uma plataforma flexvel e de fcil utilizao, tanto para profissionais como para interessados na rea, visando fornecer uma alternativa para aqueles que no tm alcance a outros microcontroladores, que alm do custo elevado e software prioritrio, no podem ser personalizados e so mais difceis de utilizar pois requerem um maior nvel de conhecimento tcnico. Uma das grandes vantagens do Arduino o seu nvel de personalizao, como se trata de uma plataforma aberta, todo o projeto disponibilizado aos seus usurios no site www.arduino.cc, assim caso o usurio queira ele pode montar o seu prprio Arduino e adicionar ou retirar funcionalidades de acordo com o seu projeto, o mesmo tambm pode ser feito com a sua IDE (software utilizado para programar o Arduino), que de cdigo aberto, e funciona nos sistemas operacionais Windows, Macintosh OSX, e Linux, diferente da maioria dos microcontroladores em que suas IDE's funcionam apenas no Windows. Todas essas qualidades fazem o Arduino se tornar uma alternativa muito interessante para o ensino. Descrio da placa Arduino

1 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Os componentes mais bsicos da placa Arduino so: Entrada usb Entrada de alimentao Pino ICSP Pinos de entrada analgica Pinos digitais Pinos de alimentao Boto reset

Descrio dos componentes bsicos Entrada USB A entrada USB da placa Arduino utilizada para realizar a comunicao entre o Arduino e o computador, atravs dessa comunicao so enviados os cdigos referentes as aes que o Arduino executar, a entrada tambm utilizada para o envio e recepo de informaes do cdigo em execuo, que sero exibidos em um hiperterminal (monitor serial) e alm dessas funes a entrada USB tambm fornece alimentao para a placa Arduino. O padro do cabo utilizado USB AB. Entrada de alimentao Caso seja necessrio mais alimentao, ou caso haja necessidade da no utilizao da alimentao atravs da entrada USB, a placa Arduino dispe de uma entrada padro para adaptadores AC-DC. Pino ICSP Esse pino suporta comunicao SPI (Serial Peripheral Interface Bus ), presente nos modelos de Arduino, Duemilanove e Diecimila, usado por alguns modelos de shield como por ex. Ethernet Shield. Pinos de entrada analgica A funo principal dos pinos de entrada analgica para a maioria dos usurios de Arduino, a leitura de sensores analgicos, como por exemplo, ldr, sensores de distncia, sensores de
2 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

temperatura, os pinos de entrada analgica fazem leituras em valores inteiros em um intervalo de 0-1023 ( converso 10 bits). Pinos digitais Os pinos digitais so pinos de propsito geral de entrada(input) e sada(output), cada pino tem uma chave interna que pode receber os valores HIGH e LOW, o funcionamento deles parecido com o de um interruptor que pode estar ligado ou desligado, assim podemos ligar ou desligar componentes, ex: led. Pinos de alimentao Como mais uma alternativa de alimentao para a placa Arduino, existe o pino VIN (voltage input), atravs dele e do pino GND a placa pode ser alimentada, ligando uma bateria ou pilhas atravs de um adaptador diretamente a esses dois pinos, porm cada modelo de Arduino requer um faixa de voltagem diferente, portanto antes usar o pino verifique qual a necessria para alimentar a sua placa corretamente.

Boto reset Utilizado para dar um reset fsico no microcontrolador, o boto reset era utilizado em algumas verses anteriores do Arduino como um procedimento antes de enviar um novo cdigo para a placa.

Arduino IDE O Arduino IDE (ambiente de desenvolvimento integrado ou Integrated Development Environment) o software que nos possibilita escrever cdigos e envi-los para a placa Arduino, atravs dele possvel verificar quando e aonde h erros no cdigo. O programa fornece ao usurio a opo de salvar o cdigo, podendo assim administrar seus projetos. Tambm h a interface serial de comunicao, por onde o usurio pode enviar dados do seu projeto e visualiz-los na tela. Dentro do programa so disponibilizados exemplos prontos, desde os de nvel bsico at o nvel avanado, assim o usurio pode ir subindo progressivamente conforme o conhecimento que vai adquirindo.
3 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Programando na IDE
Para programar na IDE Arduino utilizaremos duas de suas funes principais, a primeira o void setup(). Estabelece as configuraes iniciais. Nela fazemos as configuraes dos componentes e recursos que utilizaremos, por exemplo, para ligar um led, nesse caso o led atuar como um dispositivo de sada, vamos usar a porta digital 13 no exemplo, ento dentro da funo: Assim teremos por exemplo: pinMode(13, OUTPUT); caso o dispositivo seja de sada pinMode(13, INPUT); caso o dispositivo seja de entrada Ainda em void seteup; para iniciar uma comunicao serial, e criar a possibilidade de enviar os dados obtidos e visualiz-los em um hiper terminal, usamos a funo Serial.begin(9600); em que o 9600 representa a velocidade dessa comunicao em bits por segundo, A segunda funo void Loop(), nela estabelecemos o controle propriamente dito e a operao que vairodar o tempo no seu Arduino:

4 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Nela podemos, por exemplo, enviar os dados para a serial e imprimi-los e neste caso usamos o comando Serial.print(dados1), onde dados1 apenas uma varivel que representa algum valor medido por algum sensor conectado ao Arduino, que pode ser do tipo inteiro, real, caractere ou string. Alguns comandos: Para escrever e ler atravs das portas digitais da placa Arduino utilizaremos as seguintes funes: Para leitura nas portas digitais: digitalRead(13), leitura porta 13 Para escrever em uma porta digital: digitalWrite este pode divido em duas parte por se tratar de um comando de sada, j que ela aceita dois valores HIGH e LOW, que podem ser entendidos como ligado e desligado (e na leitura de uma porta digital so recebidos como 1 e 0), e escritos da seguinte maneira para os dois casos: digitalWrite(13, HIGH); digitalWrite(13, LOW); J para leitura em portas analgicas utilizaremos o seguinte comando: analogRead(13); A IDE Arduino pode ser baixada no seguinte endereo: http://arduino.googlecode.com/files/arduino-0022.zip

Experimento 1: Piscar um led- Blink


O experimento a seguir prope um primeiro contato com o Arduino, aonde 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.

5 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

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 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 suas pernas no segue alguma determinada ordem. Neste exemplo utilizaremos um circuito simples , com um LED e um resistor (330 em srie, conforme indica a figura abaixo Este circuito foi desenhado em um software freeware Fritzing disponvel em http://fritzing.org/.
Cdigo: void setup() { pinMode(13, OUTPUT); } Void loop() { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); }
Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Antes de programarmos na IDE do Arduino vamos estimar os valores de resistncias que podem ser utilizadas para circuitos desta natureza Calculando o valor mnimo do resistor que deve ser associado: Suponha que para o led acender suporte uma tenso mxima da ordem de 2,0 Volts Considere ainda que a corrente mxima oferecida para as portas digitais de 20 mA VR+Vled=5,0 VR= 3,0 Volts Para i=20 mA VR=Ri 3/20*10-3 Rmin= 150 ohms

Utilizando Exemplos do Arduino


Este cdigo tambm est disponvel em exemplos no IDE do Arduino veja na figura abaixo como obt-lo. Exemplo : Blink

Altere o intervalo de tempo em que o LED fica aceso e o intervalo de tempo que fica apagado! Viu como fcil!
7 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Anexo: Comando via teclado -_ Funo Serial.read()


Com o mesmo circuito anterior vamos enviar comandos para acender e apagar o led via teclado

Faa upolad do programa e abra o monitor serial. Digite a letra L ou H e, seguida tecle enter para alterar o estado do led

Cdigo
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); } 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); } }

Adicione a linha de programao que permite imprimir no monitor serial o estado do pino 13
Dica: defina uma nova varivel, por exemplo, estadodoled e para cada condio if faa estadodoled =LOW ou HIGH em seguida use a funo Serial.print( ) (ver em http://arduino.cc/en/Serial/Print)
8 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Anexo: Tipos de Variveis (as mais utilizadas)


Tipo Descrio Referencia no site e exemplos

int float

Numero inteiro Nmero fracionrio(ponto flutuante)

http://arduino.cc/en/Reference/Int http://arduino.cc/en/Reference/Float

double

Nmero fracionrio, como mais preciso

http://arduino.cc/en/Reference/Double

char boolean long unsigned

caractere Verdadeiro ou falso Longas maiores que 32 bits Impede que assuma valores negativos

http://arduino.cc/en/Reference/Char http://arduino.cc/en/Reference/Boolea nVariables http://arduino.cc/en/Reference/Long

unsigned long

Variveis longas e sempre positivas (em geral usada para tempo) Numero de 8 bits

http://arduino.cc/en/Reference/Unsigne dLong

http://arduino.cc/en/Reference/Byte

byte

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

9 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.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 a placa Arduino em uma porta analgica e a partir do cdigo fornecido a seguir, ler os valores fornecidos pelo LDR e envi-los para a porta serial a cada 0,25 segundos. Nesse experimento sero utilizados os seguintes componentes: 1 LDR, 1 resistor de 33Kou 10K, alguns fios. Definio dos componentes: LDR Do ingls Light Dependent Resistor1, 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 ou 39 K

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. 10 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Faa upload e abra o monitor serial

Cdigo: int LDR; //declara a variavel void setup(){ pinMode(A0, INPUT); Serial.begin(9600); } void loop(){ LDR = analogRead(A0); Serial.print("Valor lido no LDR:\t"); Serial.println(LDR); delay(250); }

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

11 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Cdigo Fonte
int LDR; //declara a varivel int tempo; void setup() { pinMode(A0, INPUT); Serial.begin(9600); } void loop() { tempo= millis(); // base de tempo para a coleta LDR = analogRead(A0); { Serial.print(tempo); Serial.print(" "); // introduz um espao para as colunas Serial.print(LDR); } Serial.println(); // imprime em linhas delay(250); }

Copiar dados para a construo de grficos


1 Abra o monitor serial

12 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

2 desabilite a rolagem automtica.

3 selecione com o cursor os dados que deseja copiar e transfira para uma planilha de calculo Pronto agora voc j pode visualizar o grfico!!

13 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Anexo: Conversor AD
O que representam os valores lidos na porta analgica?

Para compreender o que representam os valores lidos na porta analgica temos que recorrer a teoria sobre Conversores analgicos digitais. Segue um link para um texto com exerccios sobre conversores AD para maior aprofundamento https://skydrive.live.com/?cid=247463ebb52e7e31&sc=documents&id=247463EBB52E7 E31%211851#cid=247463EBB52E7E31&id=247463EBB52E7E31%211855&sc=documents Faremos aqui um breve resumo: O conversor AD do Arduino um conversor que apresenta 10 bits. O que isso significa? Um sistema digital apresenta apenas duas possibilidades de tenses, prximas de zero (dcimos de mV) e que corresponde ao bit 0 e aquela em que a tenso assume o seu valor mximo (da ordem de 5 V) que corresponde ao bit 1. Assim um valor de tenso que varia continuamente entre 0 e 5 V dever ser expresso em frases binrias para que possa ser processado pelo micro-controlador. Para 10 bits teremos um conjunto de 210 frases binrias= 1024 O Arduino opera com 5V de tenso (ou bem prximo disso).Assim qualquer valor de tenso de teremos que: Para 5 Volts teremos o decimal correspondente 1024 Valor de tenso de entrada teremos X para o decimal 5.....................1024 A0 (V).............Decimal lido Portanto em Volts o valor de A0 ser dado por: A0 lido em Volts = (decimal lido) *5/1024

14 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Experimento 3: Visualizao grfica em tempo Real Utilizando o SIMPLOT


Vamos apresentar uma opo rpida e simples para visualizao grfica em tempo real utilizando um aplicativo freeware conhecido como SIMPLOT
( http://www.negtronics.com/simplot).

O simplot um aplicativo de fcil manuseio e muito eficiente para uma visualizao grfica em tempo real de dados nas entradas analgicas do Arduino. Existem varias outras opes tais como o Processing, Phyton e at mesmo em visual bsica no Excel. No entanto de todas estas opes o SIMPLOT foi o que me pareceu mais simples e rpido.

Etapas para visualizao

1. Baixe o aplicativo disponvel no link http://code.google.com/p/pushpak/downloads/list?saved=1&ts=1303180458 Ou ainda em https://skydrive.live.com/?cid=59bcf284a2d396aa&sc=documents&id=59BCF284A2D396AA%21224# na pasta SIMPLOT VER1-1

2. Copie o cdigo fonte disponvel abaixo e faa upload na IDE do Arduino Se preferir baixe o arquivo disponvel no na link pasta

https://skydrive.live.com/?cid=59bcf284a2d396aa&sc=documents&id=59BCF284A2D396AA%21222

simplot_4canais_arduino

15 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

/* SimPlot Demo Samples Analog Input and sends them over serial port to be plotted in SimPlot. This Demo software uses the default serial port "Serial". Upto to 4 channels of data can be plotted. For details of SimPlot go to www.negtronics.com/simplot */ void setup() { Serial.begin(57600); } int buffer[20]; //Buffer needed to store data packet for transmission int data1; int data2; int data3; int data4; void loop() { //Read Analog channels. You can connect accelerometer, gyro, temperature sensor etc to these channels data1 = analogRead(0); data2 = analogRead(1); data3 = analogRead(2); data4 = analogRead(3); //You can plot upto 4 channels of data. Uncomment only one of the options below plot(data1,data2,data3,data4); //Plots 4 channels of data // plot(data1,data2,data3); //Plots 3 channels of data // plot(data1,data2); //Plots 2 channels of data // plot(data1); //Plots 1 channel of data delay(10); //Read and plot analog inputs every 10ms. } //Function that takes 4 integer values and generates a packet to be sent to SimPlot. void plot(int data1, int data2, int data3, int data4) { int pktSize; buffer[0] = 0xCDAB; //SimPlot packet header. Indicates start of data packet buffer[1] = 4*sizeof(int); //Size of data in bytes. Does not include the header and size fields buffer[2] = data1; buffer[3] = data2; buffer[4] = data3; buffer[5] = data4; pktSize = 2 + 2 + (4*sizeof(int)); //Header bytes + size field bytes + data //IMPORTANT: Change to serial port that is connected to PC Serial.write((uint8_t * )buffer, pktSize); } //Function that takes 3 integer values and generates a packet to be sent to SimPlot. 16 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

void plot(int data1, int data2, int data3) { int pktSize; buffer[0] = 0xCDAB; buffer[1] = 3*sizeof(int); buffer[2] = data1; buffer[3] = data2; buffer[4] = data3; //SimPlot packet header. Indicates start of data packet //Size of data in bytes. Does not include the header and size fields

pktSize = 2 + 2 + (3*sizeof(int)); //Header bytes + size field bytes + data //IMPORTANT: Change to serial port that is connected to PC Serial.write((uint8_t * )buffer, pktSize); } //Function that takes 2 integer values and generates a packet to be sent to SimPlot. void plot(int data1, int data2) { int pktSize; buffer[0] = 0xCDAB; buffer[1] = 2*sizeof(int); buffer[2] = data1; buffer[3] = data2; //SimPlot packet header. Indicates start of data packet //Size of data in bytes. Does not include the header and size fields

pktSize = 2 + 2 + (2*sizeof(int)); //Header bytes + size field bytes + data //IMPORTANT: Change to serial port that is connected to PC Serial.write((uint8_t * )buffer, pktSize); } //Function that takes 1 integer value and generates a packet to be sent to SimPlot. void plot(int data1) { int pktSize; buffer[0] = 0xCDAB; buffer[1] = 1*sizeof(int); buffer[2] = data1; //SimPlot packet header. Indicates start of data packet //Size of data in bytes. Does not include the header and size fields

pktSize = 2 + 2 + (1*sizeof(int)); //Header bytes + size field bytes + data //IMPORTANT: Change to serial port that is connected to PC Serial.write((uint8_t * )buffer, pktSize); }

3. Em seguida abra o aplicativo SimPlot e selecione a porta COM que est sendo utilizada e fixe para a taxa de aquisio 57600, valor este fixado no cdigo fonte do Arduino

17 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Ao abrir o aplicativo surge a taxa de aquisio de 9600, esta taxa deve ser alterada, assim como a porta COM que est sendo utilizada

Em seguida altere as condies de observao, por exemplo, os limites de leitura da porta analgica ( de 0 a 1023) e desabilite os canais que no esto sendo utilizados

Viu como fcil!!


18 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Anexos: Grandezas Fsicas do Circuito: Corrente eltrica, resistncia do LDR, ddp no resistor, etc.
Leia o Anexo abaixo e insira uma linha da programao que permita obter o valor de A0 em Volts e sua correspondente impresso no monitor serial Sabendo que o circuito LDR+resistor um circuito serie, insira uma linha para calcular o valor de tenso no resistor. Sabendo que corrente eltrica = VR/R, insira uma linha que permita obter o valor de corrente eltrica no circuito Sabendo que resistncia no LDR dada por VLDR/I, insira uma linha de programao que permita obter o valor de resistncia no LDR Imprima tudo em uma tabela com as seguintes colunas; Valor lido no LDR em decimal, valor de A0 em Volts, valor de tenso no resistor, valor de corrente eltrica no circuito, valor de resistncia no LDR;

19 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Dicas para a impresso em colunas


Para imprimir em tabela voc pode abrir a chave para as diferentes variveis com seus respectivos Serial.print ; fechar quando terminar todas as grandezas de impresso, no esquecendo o ponto e virgula. Em seguida e escrever Serial.println(); para impresso de todas as grandezas entre as chaves em linha e fechar e void loop(). Veja abaixo: { Serial.print (valor A0 decimal); Serial.print (LDR); Serial. print ( ); etc etc }
Serial.println(); Abre chave { Seqncia de impresso que se deseja Fecha chave }

Serial.println(); }

Fecha chave do void loop() }

Como aumentar o nmero de casas decimais na impresso?


Em experimentos, muitas vezes importante obter grandezas com 3 ou at 4 casas decimais. No exemplo anterior, conseguimos imprimir o valor de tenso tanto no LDR quanto no resistor e corrente eltrica no circuito. Em primeiro lugar na declarao destas variveis importante que se associe o tipo float j que estes valores no sero inteiros.
20 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Se voc associou estas variveis como int faa a devida alterao. Em seguida para que voc obtenha impresso com mais casas decimais basta que especifique o numero de casas decimais da seguinte maneira com uma virgula seguida da varivel como abaixo: Serial.print(val,numero de casas decimais desejado); Exemplo com 3 casas decimais para corrente; Serial.print(corrente,3); Na declarao da varivel corrente voc no deve esquecer de especificar que ela ser do tipo float; ou seja; float corrente;

Estimativa da Intensidade de Luz incidente no LDR


Agora clique no link http://www.ladyada.net/learn/sensors/cds.html. Considere que o LDR utilizado tenha a curva de resistncia versus intensidade da luz em LUX em vermelho. Considere apenas a luz ambiente. Determine em LUX o valor desta intensidade.

21 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Experimento 4: Construindo um Alarme tico, acendendo um LED


LDR e disparo atravs de uma porta digital Esse experimento prope que a partir da leitura de um LDR ligado em uma porta analgica, perceber que um feixe de luz foi bloqueado. Por exemplo acender um LED vermelho em uma porta digital. Nesse experimento sero utilizados os seguintes componentes: 1 LDR um resistor de 10K a 39K e 1 led, 1 resistor de 330 , alguns fios.

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.
+V R
//Cdigo int LDR; void setup(){ pinMode(A0, INPUT); Serial.begin(9600); } void loop(){ LDR = analogRead(A0); { Serial.print("Valor lido no LDR"); Serial.print(LDR);} Serial.println(); delay(250); }

Porta analogical (0) LDR

GND

Copie o cdigo e faca upload para o Arduino e abra o monitor serial. Neste cdigo introduza a linha para leitura da tenso no LDR.

22 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Calibrao do sensor para bloqueio da luz


Incida um feixe de luz (lanterna da ponteira) no LDR. Veja qual ser o valor de VLDR e LDR (em decimal- frase binria correspondente) quando o feixe de luz e bloqueado Em seguida estabelea a condio para o disparo do alarme. Se a leitura na analgica for maior que o valor obtido na calibrao escreva da porta digital 13 HIGHT, seno escreva LOW Orientao para o Cdigo int LDR; //declara varivel inteiro float VLDR; // declara varivel de ddp no LDR tipo //float int ledPin=13; // declara varivel ledPin e fixa o pino 13 void setup() { Serial.begin(9600); pinMode(A0, INPUT);// entrada A0 pinMode(13,OUTPUT); // define o pino 13 como sada } void loop(){ LDR = analogRead(A0); VLDR=LDR*5.0000000/1024; Serial.print(LDR); Serial.print(" "); Serial.print(VLDR); Serial.println ( "\t"); delay(2); if (LDR > valor que voc vai calibrar) { escreva da porta digital 13 tal coisa} else { escreva oposto da condio anterior;} }
23 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Experimento 5: 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 330 ou 1K 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)

24 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Orientao para o Cdigo int LDR; //declara varivel float VLDR; int ledPin=13; void setup(){ Serial.begin(9600); pinMode(A0, INPUT);// entrada A0 pinMode(13,OUTPUT); // define o pino 13 como saida pinMode(9,OUTPUT); } void loop(){ LDR = analogRead(A0); VLDR=LDR*5.0000000/1024; Serial.print(LDR); Serial.print(" "); Serial.print(VLDR); Serial.println ( "\t"); delay(2); if (LDR > valor que vc vai calibrar) { escreva da porta digital 13 tal coisa} toque a freqncia de 440 Hz (funo tone no pino 9, com durao) else { escreva oposto da condio anterior; e no toque nada 9 noTone no pino 9; } }

Para um sensor de distancia variando com a distancia clique no link http://labduino.blogspot.com/2011/06/som-com-oarduino-e-um-ldr-e-caixa-de.html


25 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Anexos
DigitalWrite
http://arduino.cc/en/Reference/DigitalWrite
S yn t a x digitalWrite(pin, value) P a r a m e t er s pin: the pin number value: HIGH or LOW E xa m p l e

int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); } void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }

// LED connected to digital pin 13

// sets the digital pin as output

// sets the LED on // waits for a second // sets the LED off // waits for a second

tone()
http://arduino.cc/en/Reference/Tone
S yn t a x tone(pin, frequency) tone(pin, frequency, duration) P a r a m e t er s pin: the pin on which to generate the tone frequency: the frequency of the tone in hertz - unsigned int duration: the duration of the tone in milliseconds (optional) - unsigned long

Agora com voc!! Divirta-se, Invente, projete, Inove isso o Arduino!


26 Marisa Cavalcante e Eduardo Silva Damasceno ( marisac@pucsp.br )

Você também pode gostar