Ícone do App:
Vídeos do Aplicativo: Arduino Weather Station Bluetooth
Google Play: https://play.google.com/store/apps/details?id=appinventor.ai_antoniosergiosouzaalmeida.Arduino_Weather_Station_Bluetooth
Youtube: https://www.youtube.com/watch?v=3Ic4tTJiVZU&t=1s
Veja neste blog:
Código para Arduino:Bibliotecas:
Esquema de Ligações:
Lista de materiais com descritivo:
Montagem passo a passo:
Como funciona Arduino Weather Station Bluetooth:
Imagens e vídeos explicativos:
Arduino Weather Station Bluetooth and Clock.
Estação meteorológica de baixo custo com relógio de tempo real.
Imagens da estação meteorológica trabalhando com o Aplicativo.
Unidade Local:
Vídeos do Aplicativo: Arduino Weather Station Bluetooth
Google Play: https://play.google.com/store/apps/details?id=appinventor.ai_antoniosergiosouzaalmeida.Arduino_Weather_Station_Bluetooth
Youtube: https://www.youtube.com/watch?v=3Ic4tTJiVZU&t=1s
Unidade local:
Baseado no Arduino nano, esta estação meteorológica monitora a temperatura e umidade através do sensor DHT11 ou DHT22;Um RTC-DS1307 Relógio de Tempo Real fornece a data, hora e dias da semana;
Todos os dados são mostramos no Display Gráfico LCD Nokia5110 e enviados simultaneamente via bluetooth HC5 ou HC6 para o Aplicativo - Arduino Weather Station Bluetooth.
Unidade Remota(opcional):
Circuito baseado no Arduino nano com sensor DHT11 ou DHT22 monitora a temperatura e umidade e transmite os dados para a Unidade Local através do NRF24L01 - módulo transceptor de rádio frequência configurado para modo transmissor.A Unidade Local recebe os dados da Unidade Remota e mostra no Display Nokia5110 e envia via bluetooth para o Aplicativo.
Na Unidade Local podemos então ler valores de temperatura e umidade interna e externa assim como dados de calendário;
Todos os valores de temperatura e umidade Interna e Externa assim como dados de calendário são mostrados no Aplicativo.
Temos então uma mini estação meteorológica: Unidade Local e Unidade Remota que podemos consultar no App. ou diretamente no display Nokia5110( Unidade Local).
Unidade Local e Remota com o Aplicativo:
Diagrama de ligações, pinagens dos módulos:
//--------------------------------------------------
/*Nokia 5110 LCD (PCD8544)
* Pin 1 (RST) -> Arduino digital 6 (D6)
* Pin 2 (CE) -> Arduino digital 7 (D7)
* Pin 3 (DC) -> Arduino digital 5 (D5)
* Pin 4 (DIN) -> Arduino digital 4 (D4)
* Pin 5 (CLK) -> Arduino digital 3 (D3)
* Pin 6 (Vcc) -> Arduino +3V3
* Pin 7 (LIGHT ON/OFF) ->(3V3 ON) / (GND OFF)
* Pin 8 (GND) -> GND1 or GND2
*/
//---------------------------------------------------
/*RTC_DS1307
* Pin (SCL) -> Arduino (A5)
* Pin (SDA) -> Arduino (A4)
* Pin (VCC) -> Arduino +5V
* Pin (GND) -> Arduino GND1 or GND2
*/
//---------------------------------------------------
/*BLUETOOTH HC-06
* Pin (RX) -> Arduino (A3)
* Pin (TX) -> Arduino (A2)
* Pin (VCC) -> Arduino +5V
* Pin (GND) -> Arduino GND1 or GND2
*/
//---------------------------------------------------
/*DHT11/DHT22
* Pin (OUT) -> Arduino digital 8 (D8)
* Pin (VCC) -> Arduino +5V
* Pin (GND) -> Arduino GND1 or GND2
*/
//--------------------------------------------------
/*NRF24L01
* Pin 1 (GND) -> Arduino GND1 or GND2
* Pin 2 (3V3) -> Arduino +3V3
* Pin 3 (DIG) -> Arduino digital 9 (D9)
* Pin 4 (DIG) -> Arduino digital 10 (D10)
* Pin 5 (SCK) -> Arduino digital 13 (D13)
* Pin 6 (MOSI)-> Arduino digital 11 (D11)
* Pin 7 (MISO)-> Arduino digital 12 (D12)
* Pin 8 (N/C) ------------------------
*/
//---------------------------------------------------
Opções de Montagem:
1- Unidade Local sem a Unidade Remota(opcional).
Nesta montagem não usaremos o transceptor: NRF24L01(opcional).Teremos então as leituras de temperatura e umidade(DHT22) local e relógio(DS1307) mostrados no Display Nokia 5110 e enviados via Bluetooth(HC6) para o Aplicativo Arduino Weather Station Bluetooth.
Lista de Materiais para a Unidade Local:
Arduino nano: Microcontrolador x 1 peças.Nokia5110: Display x 1 peça.
DHT22: Sensor de temperatura e umidade x 1 peças.
DS1307: Relógio de tempo real x 1 peça.
HC6: Módulo Bluetooth x 1 peças.
2- Unidade Local + Unidade Remota.
Unidade Local com o transceptor: NRF24L01.
Unidade Remota com o transceptor: NRF24L01.
Lista de Materiais para a Unidade Local + Unidade Remota:
Arduino nano: Microcontrolador x 2 peças.Nokia5110: Display x 1 peça.
DHT22: Sensor de temperatura e umidade x 2 peças.
DS1307: Relógio de tempo real x 1 peça.
HC6: Módulo Bluetooth x 2 peças.
NRF24L01: Transceptor x 2 peças.
Diagrama de ligações, pinagens todos os módulos utilizados neste projeto:
//--------------------------------------------------
/*Nokia 5110 LCD (PCD8544)
* Pin 1 (RST) -> Arduino digital 6 (D6)
* Pin 2 (CE) -> Arduino digital 7 (D7)
* Pin 3 (DC) -> Arduino digital 5 (D5)
* Pin 4 (DIN) -> Arduino digital 4 (D4)
* Pin 5 (CLK) -> Arduino digital 3 (D3)
* Pin 6 (Vcc) -> Arduino +3V3
* Pin 7 (LIGHT ON/OFF) ->(3V3 ON) / (GND OFF)
* Pin 8 (GND) -> GND1 or GND2
*/
//---------------------------------------------------
/*RTC_DS1307
* Pin (SCL) -> Arduino (A5)
* Pin (SDA) -> Arduino (A4)
* Pin (VCC) -> Arduino +5V
* Pin (GND) -> Arduino GND1 or GND2
*/
//---------------------------------------------------
/*BLUETOOTH HC-06
* Pin (RX) -> Arduino (A3)
* Pin (TX) -> Arduino (A2)
* Pin (VCC) -> Arduino +5V
* Pin (GND) -> Arduino GND1 or GND2
*/
//---------------------------------------------------
/*DHT11/DHT22
* Pin (OUT) -> Arduino digital 8 (D8)
* Pin (VCC) -> Arduino +5V
* Pin (GND) -> Arduino GND1 or GND2
*/
//--------------------------------------------------
/*NRF24L01
* Pin 1 (GND) -> Arduino GND1 or GND2
* Pin 2 (3V3) -> Arduino +3V3
* Pin 3 (DIG) -> Arduino digital 9 (D9)
* Pin 4 (DIG) -> Arduino digital 10 (D10)
* Pin 5 (SCK) -> Arduino digital 13 (D13)
* Pin 6 (MOSI)-> Arduino digital 11 (D11)
* Pin 7 (MISO)-> Arduino digital 12 (D12)
* Pin 8 (N/C) ------------------------
*/
//---------------------------------------------------
Funções do Aplicativo:
- Botão MAC: abre a lista de aparelhos bluetooth com "MAC" ativos, escolher o bluetooth utilizado no projeto exemplo HC6.
- Botão "B" liga o bluetooth, quando ligado o botão fica na cor azul e o led do módulo bluetooth para de piscar e fica ligado, indicando que o bluetooth do smartphone e o módulo bluetooth HC6 estão conectados.
- Botão "nuvem azul", quando pressionado fica na cor verde e está pronto para receber todas as informações de temperatura e umidade local e remota assim como data e hora com o dia da semana.
Botão "sair vermelho", sai do aplicativo, encerra o App. e desconecta o módulo bluetooth HC6(led piscando).
Descrição e imagens dos materiais utilizados neste projeto:
Arduino nano.
O display LCD Nokia 5110 que vamos utilizar no projeto é um display gráfico de 84×48 pixels, 1,6 polegadas e backlight (luz de fundo), com tensão de alimentação de 3,3V. Sua conexão com o Arduino utiliza 5 fios, e a configuração dos pinos de ligação é feita via software. Para o backlight (pino Light), a tensão máxima suportada é de 3.3V.
Para isso, o chip controlador PCD8544 da Philips. Esses módulos podem ser encontrados em duas versões, entretanto, a única diferença entre elas é que a versão de placa azul funciona em 5V enquanto que a versão de placa vermelha funciona em 3.3V(utilizado neste projeto).
Opção 1, Sensor de Temperatura e Umidade -DHT22.
DHT22:
O DHT22 é um sensor de temperatura e umidade sucessor do DHT11. Efetua medições de temperatura entre -40 e 125 ºC, e umidade entre 0 e 100%. Pode ser alimentado com tensões entre 3.3 e 5.5V e, como o DHT11, possui 4 pinos mas apenas 3 são utilizados: VCC, Data e GND.O DHT22 (ou AM2302), é uma evolução do DHT11.
É um sensor com baixo consumo de corrente (2,5 mA durante medições, e 100-150µA em standby), e que possui internamente um sensor de umidade capacitivo e um termistor, além de um conversor analógico/digital para comunicação com o microcontrolador.
O sensor DHT22 é semelhante ao DHT11 (embora um pouco maior). Ambos utilizam apenas 1 pino de dados para conexão ao microcontrolador, mas internamente eles possuem diferenças significativas.
O DHT22, por exemplo, é mais lento do que o DHT11, porém ele é capaz de medir uma faixa mais ampla de temperatura e umidade.
O DHT22 é mais preciso oque nos permite utilizar uma casa decimal após a virgula,
Exemplo:
Temp. 25,7°C Umid. 63,7%
Veja a tabela abaixo:
Opção2, Sensor de Temperatura e Umidade - DHT11.
O DHT11 é um sensor de temperatura e umidade que permite fazer leituras de temperaturas entre 0 a 50 Celsius e umidade entre 20 a 90%, muito usado para projetos com Arduino.
O elemento sensor de temperatura é um termistor do tipo NTC e o sensor de Umidade é do tipo HR202, o circuito interno faz a leitura dos sensores e se comunica a um microcontrolador através de um sinal serial de uma via.
O elemento sensor de temperatura é um termistor do tipo NTC e o sensor de Umidade é do tipo HR202, o circuito interno faz a leitura dos sensores e se comunica a um microcontrolador através de um sinal serial de uma via.
Especificações:
- Faixa de medição de umidade: 20 a 90% UR
- Faixa de medição de temperatura: 0º a 50ºC
- Alimentação: 3-5VDC (5,5VDC máximo)
- Corrente: 200uA a 500mA, em stand by de 100uA a 150 uA
- Precisão de umidade de medição: ± 5,0% UR
- Precisão de medição de temperatura: ± 2.0 ºC
- Tempo de resposta: 2s
- Dimensões: 23 x 12 x 5mm (incluindo terminais)
- Faixa de medição de umidade: 20 a 90% UR
- Faixa de medição de temperatura: 0º a 50ºC
- Alimentação: 3-5VDC (5,5VDC máximo)
- Corrente: 200uA a 500mA, em stand by de 100uA a 150 uA
- Precisão de umidade de medição: ± 5,0% UR
- Precisão de medição de temperatura: ± 2.0 ºC
- Tempo de resposta: 2s
- Dimensões: 23 x 12 x 5mm (incluindo terminais)
O DHT11, devido sua precisão não fornece uma casa decimal após a virgula, então teremos como exemplo arredondamento para valores inteiros.
Exemplo:
Temp. 26,0°C Umid. 64,0%
RTC - Relógio de Tempo Real - DS1307.
A sigla RTC significa Real Time Clock, ou seja, um Relógio de Tempo Real (RTC). Esse módulo tem 56 bytes de memória não-volátil disponível para uso, é capaz de armazenar e fornecer informações completas de data como dia da semana, dia do mês, mês, ano e além é claro, das funções de horas, minutos e segundos, nos formatos de 12 ou 24 horas. Meses com menos de 31 dias e anos bissextos são ajustados automaticamente.
Uma bateria de lítio garante que os dados sejam preservados mesmo sem alimentação externa, e é acionada automaticamente em caso de falta de energia no módulo.
CONECTANDO RTC DS1307 AO ARDUINO:
Olhando o módulo pela parte inferior, podemos ver na parte esquerda os pinos GND, Vcc, SDA e SCL, utilizados para cascatear dispositivos I2C; No lado direito, vamos utilizar apenas os pinos SCL, SDA, Vcc e GND para ligação ao Arduino.
Opções: Bluetooth HC5, HC6 ou JYMCU.
Em sua placa existe um regulador de tensão e você poderá alimentar com 3.3 a 5v, bem como um LED que indica se o módulo está pareado com outro dispositivo. Possui alcance de até 10m.
Especificações:
- Protocolo Bluetooth: v2.0+EDR
- Firmware: Linvor 1.8
- Frequência: 2,4GHz Banda ISM
- Modulação: GFSK
- Emissão de energia: <=4dBm, Classe 2
- Sensibilidade: <=84dBm com 0,1% BER
- Velocidade Assíncrono: 2,1Mbps(Max)/160Kbps
- Velocidade Síncrono: 1Mbps/1Mbps
- Segurança: Autentificação e Encriptação
- Perfil: Porta Serial Bluetooth
- Suporta modo Escravo (Slave) e Mestre (Master)
- CSR chip: Bluetooth v2.0
- Banda de Onda: 2,4Hhz-2,8Ghz, Banda ISM
- Tensão: 3,3v (2,7-4.2v)
- Corrente: Pareado 35mA; Conectado 8mA
- Temperatura: -40 ~ +105°C
- Alcance: 10m
- Baud Rate: 4800;9600;19200;38400;57600;115200;230400;460800;921600;1382400
- Dimensões: 26,9 x 13 x 2,2mm
Pareando:
Antes de comunicar com o seu módulo você precisará pareá-lo com o dispositivo que desejas conectar. Isto vai variar dependendo do Sistema Operacional que você estará usando mas em termos gerais:
1 - Habilite o Bluetooth do seu dispositivo.
2 - Procure por outros dispositivos Bluetooth.
3 - Procure por um dispositivo chamado 'linvor' e pareie com ele.
4 - O código é '1234'
Especificações:
- Protocolo Bluetooth: v2.0+EDR
- Firmware: Linvor 1.8
- Frequência: 2,4GHz Banda ISM
- Modulação: GFSK
- Emissão de energia: <=4dBm, Classe 2
- Sensibilidade: <=84dBm com 0,1% BER
- Velocidade Assíncrono: 2,1Mbps(Max)/160Kbps
- Velocidade Síncrono: 1Mbps/1Mbps
- Segurança: Autentificação e Encriptação
- Perfil: Porta Serial Bluetooth
- Suporta modo Escravo (Slave) e Mestre (Master)
- CSR chip: Bluetooth v2.0
- Banda de Onda: 2,4Hhz-2,8Ghz, Banda ISM
- Tensão: 3,3v (2,7-4.2v)
- Corrente: Pareado 35mA; Conectado 8mA
- Temperatura: -40 ~ +105°C
- Alcance: 10m
- Baud Rate: 4800;9600;19200;38400;57600;115200;230400;460800;921600;1382400
- Dimensões: 26,9 x 13 x 2,2mm
Pareando:
Antes de comunicar com o seu módulo você precisará pareá-lo com o dispositivo que desejas conectar. Isto vai variar dependendo do Sistema Operacional que você estará usando mas em termos gerais:
1 - Habilite o Bluetooth do seu dispositivo.
2 - Procure por outros dispositivos Bluetooth.
3 - Procure por um dispositivo chamado 'linvor' e pareie com ele.
4 - O código é '1234'
Transceiver - NRF24L01.
Este módulo utiliza o chip NRF24L01 fabricado pela Nordic, trabalha na frequência de 2.4 GHz e possui uma antena embutida, o que faz desse um dos módulos mais compactos do mercado. Possui um conector de 8 pinos (figura abaixo) com os pinos muito próximos uns dos outros, o que limita o seu uso na protoboard. Nessa configuração, o ideal é a utilização de algum outro tipo de conector, como o jumper macho-fêmea, e ligá-lo diretamente aos pinos do Arduino ou protoboard.
Como o módulo utiliza a interface SPI do Arduino, temos que obrigatoriamente utilizar os pinos 11, 12, e 13 para os sinais MOSI, MISO e SCK, respectivamente. Os pinos CS e CE serão ligados aos pinos digitais do Arduino. Atenção para a tensão de alimentação : este módulo trabalha com alimentação de 3,3V Volts.
Protoboard.
Jumper Wire - Cabos para ligações.
Macho - Fêmea.
Macho - Macho.
Programa Arduino para Unidade Local:
Obs.: Ao escolher o sensor DHT11 ou DHT22 altere esta linha de comando, conforme figura abaixo:
/*
WEATHER STATION:
Arduino nano;
Nokia5110 Display;
RTC DS1307 Clock;
DHT11/DHT22 Sensor temperature humidity;
NRF24L01 Radio frequency;
HC-06 Bluetooth.
*/
//--------------------------------------------------
/*Nokia 5110 LCD (PCD8544)
* Pin 1 (RST) -> Arduino digital 6 (D6)
* Pin 2 (CE) -> Arduino digital 7 (D7)
* Pin 3 (DC) -> Arduino digital 5 (D5)
* Pin 4 (DIN) -> Arduino digital 4 (D4)
* Pin 5 (CLK) -> Arduino digital 3 (D3)
* Pin 6 (Vcc) -> Arduino +3V3
* Pin 7 (LIGHT ON/OFF) ->(3V3 ON) / (GND OFF)
* Pin 8 (GND) -> GND1 or GND2
*/
//---------------------------------------------------
/*RTC_DS1307
* Pin (SCL) -> Arduino (A5)
* Pin (SDA) -> Arduino (A4)
* Pin (VCC) -> Arduino +5V
* Pin (GND) -> Arduino GND1 or GND2
*/
//---------------------------------------------------
/*BLUETOOTH HC-06
* Pin (RX) -> Arduino (A3)
* Pin (TX) -> Arduino (A2)
* Pin (VCC) -> Arduino +5V
* Pin (GND) -> Arduino GND1 or GND2
*/
//---------------------------------------------------
/*DHT11/DHT22
* Pin (OUT) -> Arduino digital 8 (D8)
* Pin (VCC) -> Arduino +5V
* Pin (GND) -> Arduino GND1 or GND2
*/
//--------------------------------------------------
/*NRF24L01
* Pin 1 (GND) -> Arduino GND1 or GND2
* Pin 2 (3V3) -> Arduino +3V3
* Pin 3 (DIG) -> Arduino digital 9 (D9)
* Pin 4 (DIG) -> Arduino digital 10 (D10)
* Pin 5 (SCK) -> Arduino digital 13 (D13)
* Pin 6 (MOSI)-> Arduino digital 11 (D11)
* Pin 7 (MISO)-> Arduino digital 12 (D12)
* Pin 8 (N/C) ------------------------
*/
//---------------------------------------------------
#include <SoftwareSerial.h>
#define TxD A2//Bluetooth TX pin D2 Arduino-RX.
#define RxD A3//Bluetooth RX pin D3 Arduino-TX.
SoftwareSerial Blue(TxD,RxD);//Bluetooth -> Arduino pin A2-RX, pin A3-TX.
String readString;//Variável para escrita no Display
//---------------------------------------------------
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Adafruit_PCD8544 display = Adafruit_PCD8544(SCLK, DIN, DC, CS, RST)-Pinos Nokia 5110;
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);//Pinos Arduino;
#include "DHT.h"
#include "RF24.h"
#define DHTPIN 8
#define DHTTYPE DHT11//DHT22 - You can choose the sensor DHT11 ou DHT22;
DHT dht(DHTPIN, DHTTYPE);
//--------------------
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
//-------------------Choose your language---------------
char daysOfTheWeekNokia[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
//char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//--------------------
static unsigned const char PROGMEM picatura[] =
{ B0001000,
B0001000,
B0001000,
B0010100,
B0100010,
B0100010,
B0011100
};
//--------------------
RF24 myRadio (9, 10);
byte addresses[][6] = {"0"};
float remoteHumidity = 0.0;
float remoteTemperature = 0.0;
String dateString;
String hours;
int minuteNow=0;
int minutePrevious=0;
struct package
{
float temperature ;
float humidity ;
};
float previousIndoorHumidity = 0;
float previousIndoorTemperature = 10;
float previousRemoteHumidity = 0.1;
float previousRemoteTemperature = 0.1;
float indoorHumidity = 0;
float indoorTemperature = 0;
typedef struct package Package;
Package data;
void setup() {
Blue.begin(9600);//Serial Bluetooth-Arduino(A2-RX,A3-TX).
Serial.begin(9600);
Serial.println("DHTxx ON");
dht.begin();
display.begin();
delay(1000);
// you can change the contrast around to adapt the display
// for the best viewing!
display.setContrast(60);
display.clearDisplay();
delay(100);
//---------------------------
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.println("WEATHER STATIO");
display.setCursor(0,8);
display.println("Arduino nano");
display.setCursor(0, 16);
display.print("Nokia5110");
display.setCursor(0, 24);
display.print("RTC DS1307");
display.setCursor(0, 32);
display.print("DHT11/DHT22");
display.setCursor(0, 40);
display.print("NRF24L01 HC-06");
//display.setTextColor(WHITE, BLACK);
display.display();
delay (5000);
display.clearDisplay();
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x07); // move pointer to SQW address
Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave
Wire.endTransmission();
RTC.begin();
//RTC.adjust(DateTime(__DATE__, __TIME__));
//if you need set clock... just remove // from line above this
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
RTC.adjust(DateTime(__DATE__, __TIME__));
}
delay(2000);
startWirelessCommunication();
}
void loop() {
DateTime now = RTC.now();
float h = dht.readHumidity();
float t = dht.readTemperature();
//-------------------------
char comando = Blue.read();
while (Blue.available()) {
delay(3);
char c =Blue.read();
readString += c;//Leitura da strinh seial via Bluetooth.
}
//-----------------
Blue.println("a");
Blue.println(t,1);
Blue.println("b");
Blue.println(h,1);
//-----------------
(remoteTemperature = (remoteTemperature-32)/1.8);//Fahrenheit=>Celsius;
Blue.println("c");
Blue.println(remoteTemperature,1);
(remoteTemperature = (remoteTemperature*1.8)+32);//Celsius=>Fahrenheit;
if(remoteTemperature<=0){
Blue.println("c");
Blue.println("00.0");
}
//---------------------------
Blue.println("d");
Blue.println(remoteHumidity,1);
//---------------------------
Blue.println("e");
Blue.println(now.hour(), DEC);
Blue.println("f");
Blue.println(now.minute(), DEC);
Blue.println("g");
Blue.println(now.second(), DEC);
//---------------------------
Blue.println("h");
Blue.println(daysOfTheWeekNokia[now.dayOfTheWeek()]);
Blue.println("i");
Blue.println(now.day(), DEC);
Blue.println("j");
Blue.println(now.month(), DEC);
Blue.println("k");
Blue.println(now.year(), DEC);
//---------------------------
delay(100);
if (isnan(t) || isnan(h))
{
Serial.println("Failed to read from DHT");
}
else
{
Serial.print("Umidade: ");
Serial.print(h, 0);
Serial.print(" %");
Serial.println();
Serial.print("Temperatura: ");
Serial.print(t, 0);
Serial.println(" C");
}
//---------------------------
//delay(100);
Serial.println("\n");
//DateTime now = RTC.now();
display.setTextSize(2);//Hour
display.setTextColor(BLACK);
display.setCursor(0, 0);//20, 0
if ( now.hour() < 10)
{
display.print(" ");
display.print(now.hour(), DEC);
}
else
{
display.setCursor(0, 0);
display.print(now.hour(), DEC);
}
//display.setTextSize(1);
display.print(":");
if ( now.minute() < 10)
{
display.setTextSize(2);
display.print("0");
display.print(now.minute(), DEC);
}
else
{
display.print(now.minute(), DEC);
}
display.setTextSize(1);
display.print(":");
if ( now.second() < 10)
{
//display.setTextSize(2);
display.print("0");
display.print(now.second(), DEC);
}
else
{
display.print(now.second(), DEC);
}
display.print(" ");
int zs = now.second()/10;
int us = now.second() - zs*10;
display.setTextSize(1);//Date
display.setCursor(64, 17);
display.print(daysOfTheWeekNokia[now.dayOfTheWeek()]);
display.setTextSize(1);//Date
display.setCursor(0, 17);//12,17
if ( now.day() < 10)
{
display.print("0");
display.print(now.day(), DEC);
}
else
{
display.print(now.day(), DEC);
}
display.print("/");
if ( now.month() < 10)
{
display.print("0");
display.print(now.month(), DEC);
}
else
{
display.print(now.month(), DEC);
}
display.print("/");
display.print(now.year(), DEC);
if (us < 5 )
{
//---------------------Indoor----------------------------
display.setTextSize(0);//Date
display.setCursor(25, 25);
display.print("Indoor");
//---------------------Indoor Temperature-----------------
display.setTextSize(2);
display.setCursor(0,33);
display.print(t, 0);
//---------------------Indoor Humidity-----------------
display.setCursor(25,33);
display.setTextSize(2);
display.print("C");
display.setTextSize(2);
display.setCursor(47,33);
display.print(h, 0);
display.setCursor(72,33);
display.setTextSize(2);
display.print("%");
display.display();
}
else
{
//---------------------Remote----------------------------
display.setTextSize(0);//Date
display.setCursor(25, 25);
display.print("Remote");
//---------------------Remote Temperature-----------------
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(0,33);
(remoteTemperature = (remoteTemperature-32)/1.8);//Fahrenheit=>Celsius;
display.print(remoteTemperature, 0);
//-------------------------------
// Blue.println("c");
// Blue.print(remoteTemperature,1);
//-------------------------------
(remoteTemperature = (remoteTemperature*1.8)+32);//Celsius=>Fahrenheit;
if(remoteTemperature<=0){
display.print("00");
display.print(remoteTemperature, 0);
display.display();
}
display.setCursor(25,33);
display.setTextSize(2);
display.print("C");
//---------------------Remote Humidity-----------------
display.setTextSize(2);
display.setCursor(47,33);
display.print(remoteHumidity, 0);
//---------------------------
// Blue.println("d");
// Blue.print(remoteHumidity,1);
//---------------------------
if(remoteHumidity<=0){
//display.clearDisplay();
display.setTextSize(2);
display.setTextColor(BLACK);
display.setCursor(47,33);//0, 33
display.print("00");
display.display();
}
display.setCursor(72,33);
display.setTextSize(2);
display.print("%");
display.display();
}
delay (100);//1000
display.clearDisplay();
checkForWirelessData();
printIndoorTemperature();
printIndoorHumidity();
printRemoteTemperature();
printRemoteHumidity();
}//loop------------------------------
void startWirelessCommunication()
{
myRadio.begin();
myRadio.setChannel(115);
myRadio.setPALevel(RF24_PA_MAX);
myRadio.setDataRate( RF24_250KBPS ) ;
myRadio.openReadingPipe(1, addresses[0]);
myRadio.startListening();
delay(100);
}
void checkForWirelessData()
{
if ( myRadio.available())
{
while (myRadio.available())
{
myRadio.read( &data, sizeof(data) );
previousRemoteTemperature = remoteTemperature;
previousRemoteHumidity = remoteHumidity;
remoteTemperature = Celcius2Fahrenheit(data.temperature);
remoteHumidity = data.humidity;
}
}
}
void readSensor()
{
previousIndoorTemperature = indoorTemperature;
previousIndoorHumidity = indoorHumidity;
indoorHumidity = dht.readHumidity();
indoorTemperature = Celcius2Fahrenheit(dht.readTemperature());
}
void printIndoorTemperature()
{
String temperature;
if(indoorTemperature != previousIndoorTemperature)
{
if(indoorTemperature>=100)
{
temperature = String(indoorTemperature,0);
}else
{
temperature = String(indoorTemperature,1);
}
previousIndoorTemperature = indoorTemperature;
}
}
void printRemoteHumidity()
{
String humidity;
if(remoteHumidity != previousRemoteHumidity)
{
if(remoteHumidity == 0.0 && remoteTemperature == 0.0) //We just booted up
{
humidity = "---";
}else
{
humidity = String(remoteHumidity,1);
}
previousRemoteHumidity = remoteHumidity;
}
}
void printRemoteTemperature()
{
String temperature;
if(remoteTemperature != previousRemoteTemperature)
{
if(remoteHumidity == 0.0 && remoteTemperature == 0.0) //We just booted up
{
temperature = "---";
}else if(remoteTemperature>=100)
{
temperature = String(remoteTemperature,0);
}else
{
temperature = String(remoteTemperature,0);//,1
}
previousRemoteTemperature = remoteTemperature;
}
}
void printIndoorHumidity()
{
if(indoorHumidity != previousIndoorHumidity)
{
String humidity = String(indoorHumidity,1);
previousIndoorHumidity = indoorHumidity;
}
}
float Celcius2Fahrenheit(float celsius)
{
return 1.8 * celsius + 32;
}
//Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
return 1.8 * celsius + 32;
}
//Celsius to Kelvin conversion
double Kelvin(float celsius)
{
return celsius + 273.15;
}
Programa Arduino para Unidade Remota:
Obs.: Ao escolher o sensor DHT11 ou DHT22 altere esta linha de comando, conforme figura abaixo:
#include "DHT.h"
#include <SPI.h>
#include "RF24.h"
#define DHTPIN 4
#define DHTTYPE DHT22
//#include <Adafruit_Sensor.h>
RF24 myRadio (6, 7);
byte addresses[][6] = {"0"};
const int led_pin = 13;
struct package
{
float temperature ;
float humidity ;
};
typedef struct package Package;
Package data;
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600);
pinMode(led_pin, OUTPUT);
dht.begin();
myRadio.begin();
myRadio.setChannel(115);
myRadio.setPALevel(RF24_PA_MAX);
myRadio.setDataRate( RF24_250KBPS ) ;
myRadio.openWritingPipe( addresses[0]);
delay(1000);
}
void loop()
{
digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
readSensor();
Serial.println(data.humidity, 1);
Serial.println(data.temperature, 1);
myRadio.write(&data, sizeof(data));
digitalWrite(led_pin, LOW);
delay(1000);
}
void readSensor()
{
data.humidity = dht.readHumidity();
data.temperature = dht.readTemperature();
}
Bibliotecas utilizadas:
SoftwareSerial: https://github.com/PaulStoffregen/SoftwareSerial
Adafruit_GFX: https://github.com/adafruit/Adafruit-GFX-Library
Adafruit_PCD8544: https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
Adafruit_Sensor: https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
Obs.: Não se esqueça de colocar todas estas bibliotecas dentro da pasta Libraries do Arduino.
Não altere os nomes das bibliotecas, estas devem acompanhar com o mesmo nome que se encontra no código Arduino.
Encontre todas as bibliotecas em: https://github.com/adafruit/
Exemplo biblioteca - DHT
As bibliotecas, devem acompanhar com o mesmo nome que se encontra no código Arduino, portanto quando fizer o download extrair utilizando o ZIP, se for necessário altere o nome da biblioteca mantendo mesmo nome que utilizamos no código Arduino.
OLá, você disponibiliza o arquivo .aia do app inventor? Grato.
ResponderExcluir