DIY – Leitor de temperatura com Arduino
Olá a
todos.
Este é
o meu primeiro projecto utilizando um Arduino. É meu objectivo,
nesta primeira fase, construir um leitor de temperaturas que
apresente fácil e rapidamente os resultados das leituras e que
retorne esses mesmos valores de forma periódica a um computador. A
ideia principal é, mais
para a frente - quando
o tempo o
permitir, conectar o Arduino à Raspberry Pi (com um webserver
instalado) e utilizando uma ferramenta de gráficos como o Jpgraph
(http://jpgraph.net/)
ou o chartJS (http://www.chartjs.org/)
construir gráficos em “tempo real” das medições e apresentar
algumas estatísticas.
Uma
vez que o sensor de temperatura altera a voltagem do circuíto em
função da temperatura, este foi conectado à entrada de 3.3V do
Arduino de forma a aumentar a sua sensibilidade.
Partes:
-
Arduino (Uno R3 neste caso)
-Jumper
Wires
-
220 ohm resistor
-
Liquid crystal display
-
Potentiometer
-
TMP36 temperature sensor
-
Breadboard
Ligações:
Nota:
Além das ligações apresentadas, o Arduino está conectado ao
computador pela porta serial (USB).
Para
facilitar as ligações do Liquid crystal display ao Arduino,
consultar a tabela abaixo.
Código
Arduino:
/* ------------------------------------------------------------------------------- */
// A minha casa digital: aminhacasadigital.blogspot.com
// Por Miguel Borges de Freitas
// incluir biblioteca do liquid crystal
#include <LiquidCrystal.h>
// definir voltagem para o pin do sensor e definir a variavel de medicao de temperatura
#define aref_voltage 3.3
float tempReading;
// Definir as ligaçes ao liquid crystal display e o pin analogico de leitura de temperatura
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
const int sensorPin = A0;
int backLight = 13; // pin 13 controla a luz de fundo do visor do LCD
void setup() //funcao de setup
{
Serial.begin(9600); // inicia comunicaçao serial com o computador
pinMode(backLight, OUTPUT);
digitalWrite(backLight, HIGH); // Liga a luz de fundo do LCD - substituir HIGH por LOW para a desligar
lcd.begin(16,2); // coluna,linha.16,2 para um 16x2 LCD
lcd.clear(); // Limpar o visor
lcd.setCursor(0,0); // Colocar o "cursor" na coluna 0 e linha 0 - primeira linha do LCD
lcd.print("aminhacasadigita"); // Escreve a primeira linha
lcd.setCursor(0,1); // Coloca o cursor na segunda linha e escreve a segunda linha
lcd.print("l.blogspot.com");
analogReference(EXTERNAL); // Define a referencia dos pins analogicos com uma voltagem externa (ver ligacoes, neste caso pin AREF ligado ao pin de 3.3V
}
void loop() // funcao de loop
{
tempReading = analogRead(sensorPin); // le pin 13
float voltage = (tempReading * aref_voltage)/1024.0; //calcula voltagem - consultar datasheet do sensor
float temperature = (voltage - 0.5) * 100 ; // calcula a temperatura (float = numero decimal)
delay(1000); // espera 1 segundo
Serial.println(temperature); //envia temperatura para o computador
lcd.clear(); // limpa o ecra do lcd
lcd.setCursor(0,0); // cursor para a primeira linha
lcd.print("Temperatura Sala"); // escreve "Temperatura Sala" na primeira linha
lcd.setCursor(0,1); // muda para a linha de baixo
lcd.print(temperature); // escreve a variavel temperatura
lcd.print(" C"); // adiciona o caracter C (graus celsius) a segunda linha para completar a informaçao com as unidades
}
/* ------------------------------------------------------------------------------- */
Código
em python para ler o valor da temperatura no computador:
Para
este código funcionar devidamente, deverá instalar a biblioteca
pyserial. Mais informações como instalar visitar:
http://pyserial.sourceforge.net/. Em alguns sistemas, esta já faz parte do python.
É também
importante especificar neste código a porta correcta através da
qual o computador está a comunicar com o Arduino (no meu caso
/dev/ttyAMC0). Esta porta é facilmente encontrada no Arduino IDE.
Grave o ficheiro com um nome à sua escolha e extensão .py (
nome_a_sua_escolha.py).
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import serial
ser = serial.Serial('/dev/ttyACM0', 9600)
while True:
print 'A temperatura é ' + str(ser.readline())
Para
correr o script basta escrever no terminal:
-> python
nome_a_sua_escolha.py
Este script não faz mais do que apresentar no terminal os valores da temperatura enviados pelo Arduino. Não tem grande utilidade prática, trata-se apenas de um ponto de partida para criar códigos mais elaborados, armazenando de forma contínua os valores de temperatura.
Deixo algumas fotos do circuíto em funcionamento; os dados que faltavam para provar que não se pode com este calor :)
Até à próxima,
Miguel Borges de Freitas
Isto dá para fazer só com o Raspeberry Pi, ou tem que se comprar o modulo Arduino á parte ?
ResponderEliminarPodes fazer com o raspberry pi também, usando os pins GPIO. Usei o arduino porque há bastante tempo que pretendia aprender e encontras facilmente muita informação sobre o assunto. A linguagem e a comunidade é bem mais vasta se comparares com a raspi.
ResponderEliminarAlém disso não tenho cabos para ligar à raspi, talvez mais tarde faça um tutorial.
*linguagem mais facil e comunidade mais vasta
EliminarObrigado, tive a ver e para ligar os pins GPIO do PI basta usar um cabo ide floppy e corta-se um dos terminais....
ResponderEliminarNão precisas necessariamente desse cabo. Precisas de ter uma breadboard para montares o circuíto e alguns "jumper cables" macho-fêmea para ligares a breadboard à rpi
ResponderEliminarParabéns pelo artigo! ;) Bom artigo para começar no blog :p Já tenho raspberry mas arduino não, no entanto é uma das coisas que já estou para comprar há algum tempo no entanto desisti da ideia por depois ser preciso comprar vários componentes.
ResponderEliminarTenho a oportunidade de arranjar um arduino emprestado para fazer umas brincadeiras e acho que vou começar com esta :)
Espero mais posts sobre o assunto!
Cumprimentos!
Muitos parabéns pelo belíssimo artigo :D
ResponderEliminarEu queria fazer uma coisa deste genero mas era para me dar a temperatura ambiente da divisão onde o raspberry se encontra acham que dá?
Cumprimentos