Programe no Arduíno – Alerta para gelo na estrada
Por Filipe Caetano | MagicKey para o PPLWARE Depois do nosso primeiro artigo sobre Arduino (ver aqui), hoje vamos desenvolver um pequeno programa que avisa se a temperatura está abaixo dos 0 graus Célsius. Para quem não sabe, o Arduino é uma plataforma extremamente útil para quem quer começar a dar os primeiros passos no mundo da electrónica, mas que ainda não tem grandes conhecimentos nesta área.
Esta ferramenta disponibiliza já diversas placas tendo todas elas como base microcontroladores da Atmel. É ainda disponibilizado um muito útil e intuitivo IDE para que se possam fazer e carregar programas de forma simples e rápida.
O IDE disponibiliza desde logo exemplos que podem ser muito úteis nos primeiros contactos com está ferramenta.
Partindo de um programa exemplo fornecidos no IDE 21 (ver parte de donwload no final do artigo), construiu-se um pequeno programa que avisa que a temperatura está abaixo dos 0 graus Célsius, e que assim poderá haver gelo na estrada.
Após abrir o exemplo apresentado para entradas analógicas (AnalogInput), basta apenas tratar o valor recebido da entrada analógica.
Código do exemplo: | Código adaptado: |
int sensorPin = A0; // select the input pin for the potentiometerint ledPin = 13; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); } void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); // turn the ledPin on digitalWrite(ledPin, HIGH); // stop the program for <sensorValue> milliseconds: delay(sensorValue); // turn the ledPin off: digitalWrite(ledPin, LOW); // stop the program for for <sensorValue> milliseconds: delay(sensorValue); |
int sensorPin = A0; // select the input sensorint ledPin = 13; // select the pin for the LED or buzer
int sensorValue = 0; // variable to store the value coming from the sensor void setup() { // declare the ledPin as an OUTPUT: pinMode(ledPin, OUTPUT); } void loop() { // read the value from the sensor: sensorValue = analogRead(sensorPin); if(sensorValue<75) { // turn the ledPin on digitalWrite(ledPin, HIGH); } else if(sensorValue>77) { // turn the ledPin off: digitalWrite(ledPin, LOW); } // stop the program 1000 milliseconds: delay(1000); } |
Podemos então verificar que no código adaptado foi apenas necessário verificar se o valor obtido da entrada analógica é inferior a 75, se sim é porque a temperatura está abaixo de 0 graus logo liga um led para avisar, se pelo contrário o valor obtido for superior a 77 a temperatura já não representa perigo, desliga o led.
O valor 75 surge da calibragem do sensor, ou seja, submeteu-se a montagem a zero graus Célsius e o valor obtido do sensor era de 75.
Utilizando uma placa Arduino Duemilanove (ou Arduino Uno) desenvolveu-se o cenário apresentado na imagem seguinte.
Podemos ver a ligação de um termistor (T) com um dos seus terminais ligados aos 5volts enquanto o outro terminal liga directamente a porta analógica 0.
Se apenas ligarmos o termistor(10KΩ) à porta analógica, este fornece uma tensão constante muito elevada, o que faz com que o valor recebido da porta analógica 0 do Arduino é sempre 1023 (valor máximo da ADC deste microcontrolador). É então necessário ligar uma resistência com um terminal à porta analógica 0 e o outro ao GND, fazendo assim com que haja uma diminuição da tensão de entrada na porta analógica.
A resistência (R) utilizada foi de 1KΩ, no entanto outra poderá ser usada.
O uso de uma resistência diferente faz com que o valor de referência para os 0 graus se altere, desta forma deixara de ser de 75 e será necessário refazer a calibragem.
A indicação de perigo é dada pelo led (L), ou seja quando este está ligado é porque a temperatura se encontra abaixo dos zero graus Célsius havendo assim a possibilidade de formação de gelo na estrada.
Em nome do pplware, quero agradecer a disponibilidade do Filipe Caetano por este excelente artigo. Aproveito ainda para dar mais uma vez os parabéns à equipa do projecto MagicKey, pelo excelente trabalho realizado.
Artigos relacionados
Licença: Freeware
Sistemas Operativos: Windows/MacOS/Linux
Download: [Win] arduino-0021 (85,53MB)
Download: [MacOS] arduino-0021 (73,52MB)
Download: [Linux] (32 bits) 32bits | 64 bits (3,43MB)
Homepage: Arduino
Homepage: Placa Arduino
Este artigo tem mais de um ano
Ora aqui está um bom exemplo de uma aplicação com o Arduino, para quem se quer iniciar nestas coisas da electrónica com micro-controladores.
Esperemos que no futuro apareçam mais artigos como estes para elucidar as pessoas que pensam que a electrónica é um bicho de 7 cabeças.
Cumprimentos.
Gosto sempre de ler os artigos sobre o Arduino. No entano, não seria mais simples usar logo um sensor de precisão de temperatura barato como LM35. Apenas ligando 1 pino a 5V, outro ao GND e outro ao AnalogIn ?? Apenas com uma linha de codigo é possivel saber imediatamente a temperatura em ºC, não sendo necessária calibração como descrita no artigo:
“O uso de uma resistência diferente faz com que o valor de referência para os 0 graus se altere, desta forma deixara de ser de 75 e será necessário refazer a calibragem.”
Deixo aqui a dica para os interessados. 🙂
Bom artigo.
Penso que a ideia aqui é trabalhar sobre a plataforma Arduino e não a melhor forma de o fazer ou a mais simples
Era só uma sugestão. Acho que era mais prático só isso.
Boa tarde,
na verdade o LM35 é um sensor de temperatura mais fácil de utilizar que o um termistor, no entanto tal como é descrito no post este artigo destina-se a principiantes na electrónica, desta forma parece-me que a utilização dos termistor poderá ajudar na compreensão do funcionamento. Reparem que esta montagem poderá trazer uma maior compreensão do funcionamento das portas analógicas, isto porque mostramos que é necessário adicionar uma resistência para que a porta não fique saturada, enquanto que se usássemos o LM35 apenas o ligaríamos a porta.
Mas como o LM35 fornece um valor para tensoes negativas?
Olá,
Muito fixe este artigo 🙂
Mas posso dar aqui uma sugestão, que é mais uma alternativa ao termistor (que até se devia usar uma ponte de Wheatstone para maior rigor), podia usar-se um sensor de temperatura LM35.
Cumps!
_________
Nota 1: Para quem gosta de reciclar Hardware e tiver uma velha impressora HP Inkjet da série 600 que já não use, pode encontrar um LM35 na placa onde está o interruptor do detector de papel na bandeja. Esta está alojada por detrás da barra metálica por onde circulam os tinteiros.
Nota 2: Informação sobre o LM35: http://www.national.com/mpf/LM/LM35.html
Nota 3: Ponte de Wheatstone: http://pt.wikipedia.org/wiki/Ponte_de_Wheatstone
Boa tarde,
sei que se calhar aqui não é o sítio indicado , mas aqui vai. Alguém tenha recentemente adquirido este equipamento? Se sim onde? É que ando a procura de um sítio que seja “de confiança” mas ouço sempre pós e contras e alguns sites que penso que sejam de confiança o produto esta esgotado. Por isso ainda não comprei nenhum.
Parabéns pela variedade de artigos que aqui são colocados. Penso que não só a qualidade deles mas também a diversidade dos mesmos, leva ao grande número de pessoas por estes lados. Obrigado
Boa tarde Paulo,
Em relação a placa utilizada, a Duemilanove deixou de estar no mercado, no entanto poderá adquirir a Uno que é muito semelhante a Duemilanove. O mais importante é ter em atenção ao micro-controlador que esta trará que deve ser o Atemaga 328.
Obrigado pela resp 🙂
Sim eu já tinha visto isso nas minhas pesquisas acerca do assunto. Será que me pode indicar um site onde possa encomendar algum e que seja de confiança?Obrigado mais uma vez e desculpe o incomodo.
Eu pessoalmente costumo comprar na cooking-hacks, tem apenas um inconveniente, demoram em media uma semana a enviar o equipamento. No entanto apesar de varias compras que já la efectuei nunca tive qualquer problema.
link: http://www.cooking-hacks.com/
Continuam no Ebay a $10.
Não querendo fazer qualquer tipo de publicidade, http://www.ptrobotics.com, http://www.lusorobotica.com
Obrigado pela resposta
Pois a lusoRobotica já tinha visitado e continua na mesma maneira ou seja indisponível. A outra também já tinha verificado aos uns tempos mas agora vejo que já têm o produto novamente, obrigado pela ajuda.
Olá Paulo,
à uns meses comprei o Arduino UNO(http://www.ptrobotics.com/product.php?id_product=324) na PTRobotics (http://www.ptrobotics.com/) e fiquei totalmente satisfeito com o serviço.
Caso venhas a comprar uma placa destas, lembro que é necessário comprar o cabo USB, que não vem incluído.
Abraço
Pois isso desconhecia 🙂 Muito útil Obrigado.
O cabo é um simples cabo USB-A to USB-B.
Obrigado a todos pela a ajuda já fiz a minha encomenda agora é esperar
ebay consegues arduino e sensosres muito baratos.. mandei vir o meu com mais 7 sensores e so paguei 35€ ja com os portes.. arduino , sensor de luz, magnetico, pressao, temperatura, interruptor,etc
Boas, não sei se já compraste ou se já vou tarde…
Mas no site oficial do Arduino, http://www.arduino.cc, encontras uma lista de distribuidores. Nessa lista há algumas portuguesas e são todas de confiança.
Os preços não variam muito de uns sítios para os outros.
As cópias baratas que encontras no ebay são outra opção, mas cuidado com as alfândegas…Tenta sempre comprar dentro da união europeia.
bom post.
achei bastante interessante realmente e simples para quem nao tem grandes conhecimentos a nivel de electronica. espero que venham a desenvolver mais posts destes temas pois acho muito interessante para quem quer fazer uns projectos porreiros sem muitos conhecimentos
Interface semelhante ao do Processing.
Boas!
Será que este tutorial da para fazer um com Breaduino?
Nao tou muito por dentro do assunto mas qual é a diferença de um Arduino para um Breaduino?
Cumps
Olá AAA,
pelo que percebi, o Breaduino é um kit com os componentes essenciais do Arduino a avulso. E a ideia é montar esses componentes numa placa breadboard (http://pt.wikipedia.org/wiki/Protoboard).
Torna-se uma alternativa mais económica, para quem já tem uma placa breadboard, e esteja familiarizado com montagens na mesma. Acho que o Breaduino não traz qualquer componente para ligação com o computador. Será assim necessário arranjar forma de efectuar uma ligação via porta série, ou arranjar uma interface serie-USB.
Como tal, este tutorial é totalmente compatível com o “Breaduino”.
Mas na minha opinião, para iniciantes, é preferível usar a placa Arduino. Já vem tudo montado e pronto a utilizar.
Abraço.
Ola Nimboos,
Obrigado pelo esclarecimento!
Quanto a ligação de serie com o Breaduino acho que se chama FTDI pode-se usar um cabo CA-42 da Nokia, resta-me saber como carregar o bootloader no ATMEGA e arranjar uma Protoboard.
São alguns euros que se poupa e acho que desta forma da mais gozo a coisa.
Cumps
Olá AAA,
Se comprares o kit Breaduino, acredito que o bootloader Arduino já venha no ATMEGA. Mas é uma questão de te informares antes da compra.
Abraço.
Já agora deixo o link para um documentário recente sobre o Arduino.
Arduino The Documentary (http://arduino.cc/blog/2011/01/07/arduino-the-documentary-now-online/).
Não é por nada mas usar um arduino é incrivelmente overkill, pois substituindo o arduino por um transístor, e mantendo o resto (resistências sensor e led), obtém-se o mesmo efeito :p.
Fora isso, mto bom tutorial pois um arduino serve para mil e uma implementações, dp de bem desenhado, é comprar o microcontrolador apenas e fazer uma board apenas com o necessário.
Olá,
Porque não usar termómetros 100% calibrados e fiáveis?
Afinal de contas com os desvios de tensão de referência do ADC entre outros aspectos sempre se perde fiabilidade.
Obviamente para este exemplo e para o seu uso penso que tanto um LM35 como um termistor servem.
No entanto, se querem usar algo fiável, preciso e 100% calibrado recomendo SHT11, SHT21, DS1822 e DS1822-PAR.
* DS1822 usa 1-Wire protocol.
* DS1822-PAR A versão PAR no necessita alimentação externa.
* SHT21 usa I2C, PWM, SDM protocol
* SHT11 usa algo parecido ao protocolo I2C
Muito bom para quem quer ir mais longe do que um simples projecto.
Abraços.
Boa noite Ricardo,
Sem duvida que o ideal era usar qualquer um desses sensores que refere da Sensirion, no entanto parece-me totalmente desadequado aos objectivos deste post, e repare por duas razões.
1º. O objectivo é produzir algo muito simples para quem começar a “mexer” no Arduino.
2º. Não se pretende saber com exactidão a temperatura, mas sim quando existe a possibilidade de formação de gelo na estrada.
Ola Filipe,
“…Obviamente para este exemplo e para o seu uso penso que tanto um LM35 como um termistor servem…”
Afinal temos a mesma opniao… ¿Ou nao? :oP
Abraço, Ricardo.
Como já aqui foi dito, o objectivo não é a monitorização da temperatura, mas sim aprender a mexer com a plataforma. Até poderia um simples potenciómetro. Isso é irrelevante.
Mais artigos destes e isto fica a verdadeiramente corresponder a todas as minhas necessidades…
OBRIGADO
Ola boa tarde gostaria de saber se posso ligar o arduino a um acelerometro adxl 202 com a finalidade de elaborar um sensor???
e já agora que tipo de arduino uso para este tipo de acelerometro??
obrigado
´cumprimentos
Boa Tarde Telmo,
sim, é possível utilizar o acelerometro que refere com o Arduino, no entanto não é nada fácil sobretudo para um principiante.
Visto que os dois sinais de saída são ambos feitos através de PWM, é necessário analisar o PWM no Arduino. A forma mais facil de o fazer é criar um Timer com uma frequência de disparo superior em 10 vezes a frequência do PWM vindo do sensor, a cada disparo do timer deve ser incrementada uma variável que deve ser colocada a zero logo quando o sinal de PWM sobe, desta forma quando o sinal de PWM descer teremos o numero de disparos feitos com o sinal de PWM no nível alto que poderá ser relacionado com a aceleração do sensor.
Cumps.
Faltou apenas referir que para a utilização deste sensor pode utilizar-se o Arduino Duemilanove ou o Arduino Uno.
muito obrigado por a ajuda isto está complicado para o meu lado…obrigadona mesma…
cumprimentos
Obrigado pelo artigo!
————————-
A quem interessar :p
Arduino Firmata Visual Basic .NET
http://www.acraigie.com/programming/firmatavb/default.html
Arduino with Visual Basic
http://www.codeproject.com/KB/system/ArduinoVB.aspx
que arduino aconselham ?
É possível através de um programa desenvolvido em c#, utilizar os valores obtidos através do arduíno???
Obrigado.
Cumprimentos