Para mais fácil leitura deste ficheiro, usar o vscode (ou similar) e colocar em modo "preview".
Este projeto foi desenvolvido no ambito:
Cadeira: Intrumentação e Sensores
Curso: Mestrado Integrado Engenharia Eletrotécnica e de Computadores
Universidade:
Pretende-se com este projeto estudar o que são sensores, e também, o que vem a ser o protocolo LoRa. Para tal, vamos simular uma situação real onde se visa saber o caudal de água que passa num determinado caleiro.
Para realizar essa tarefa vamos usar:
- Medir o caudal
- Arduino MKR Wan 1310
- Um sensor improvisado (pretendia-se desenvolver uma solução real, mas devido ao Covid-19 essa tarefa ficou adiada)
- Para armazenar e apresentar os dados
- ThingsSpeak
- Twitter - @TTNSensores_UTAD – usado para emitir “alertas”
- Para realizar a interligação entre o sensor e a “base de dados”
- Protocolo de comunicação
LoRa
- LoRaWan network: The Things Network
- Protocolo de comunicação
Este projeto foi realizado em 4 partes, sendo elas:
- Obter o EUI da Placa e registo da mesma na plataforma The Things Network.
- Realizar as Medições
- Enviar os dados obtidos para a plataforma The Things Network.
- Integração do The Things Network com o ThingsSpeak.
O código necessário para essa tarefa encontra-se na pasta get_eui
.
Your device EUI is: A8610A3337XXXXXX
Procedimento:
- Entrar em
Applications
e selecionar a aplicação pertendida. - Em
Devices
clique emregister device
- Preencher os campos da figura abaixo:
Application ID: water_sensor_utad
Device EUI: A8610A3337XXXXXX
Resultado:
const char *appEui = "70B3D57ED0XXXXXX";
const char *appKey = "6935F074F3ADB47783E5FB0DCAXXXXXX";
O código encontra-se nos ficheiros water_sensor_utad.ino
e arduino_secrets.h
Apresentação das partes mais importantes do código e uma breve explicação de cada uma.
// Ler o valor da tensão
voltage = analogRead(A0);
// Se a tensão for maior que 1 volt, conta uma gota
if (voltage > 210) drops++;
// Média de gotas por minuto (60000ms) - Valor máximo previsto: 1200 gotas
if (millis() - time > 60000)
{
dropvalue = (float)drops * 0.6 + (float)dropvalue * 0.4;
drops = 0;
time = millis();
}
O código encontra-se nos ficheiros water_sensor_utad.ino
e arduino_secrets.h
// Enviar valores para "the network of things" de hora em hora (360000ms)
if (millis() - timeUpload > 360000)
{
// Tratamento de dados
int aux = (int)(dropvalue + 0.55);
txBuffer[0] = (aux >> 8) & 0xff;
txBuffer[1] = aux & 0xff;
// Envio de dados
int err;
modem.beginPacket();
modem.write(txBuffer);
err = modem.endPacket(true);
// Redefinir temporizador
timeUpload = millis();
}
Procedimento:
- Selecionar o projeto em causa no The Things Network
- Selecionar
Payload Formats
e editar a funçãoDecoder
function Decoder(bytes, port) {
var decoded = {};
var dropSize = 2.25 //mm
var timeScale = 60 //60 min
if (port === 1) decoded.water = (((bytes[0] << 8) | bytes[1]) * dropSize * timeScale).toFixed(2);
return {
field1:decoded.water
}
}
Valor para teste:
Drops: 1192
04 A8
Resultado:
Valor previsto: 1192 x 60 x 2.25 = 160920
{
"field1": "160920.00"
}
Procedimento:
- Selecionar
Channels
e depoisNew Channel
- Preencher os campos.
Name: Water Sensor UTAD
Description: water sensor and flow meter
Field 1: WaterLevel
Link to GitHub: https://github.com/Sebenta/water-sensor-utad
- Clique em
Save Channel
Channel ID: 1085808
Water Sensor UTAD - ThingSpeak IoT
Write API KEY:
Key: EVVRG8TEY9XXXXXX
Read API Keys:
Key: QKWXDLD852XXXXXX
- No The Things Network selcionar o projeto
- Selecionar
Integrations
e de poisadd integration
- Selecionar integração com ThingsSpeak IoT Analytics with MATLAB
- Preencher os campos
- Clicar em
Add integration
No The Things Network :
Para testar a integração:
- Selecionar um
device
- fazer scroll até
Simulate Uplink
- intrduzir valores para teste e clicar em
Send
No ThingsSpeak :
- Selecionar o
Channels
correspondente - Verificar se os valores testados aparecem no gráfico
Criar conta caso não tenha.
Conta: TTNSensores_UTAD - @ttnsensores
Procedimento:
- no separador
Apps
selecionarThingTweet
- Clicar em
Link Twitter Account
- Clicar em
Autorize app
- Em
Apps
seleccione a opçãoReact
e depoisNew React
- Preencher os campos
- Clicar e Save React
Ficou a faltar o sensor (por motivos externos ao grupo) e consequentemente a calibração do mesmo.
A logica usada para obter os valores precisa de melhorias. Uma alteração que deve ser levada em conta, é a alteração do local onde é inserida o valor da "calibração" (que nesta fase encontra-se no payload) colocando-a no código que corre no Arduino.
Faltou também testar no terreno.
Se no futuro voltarmos a pegar neste projeto, todas alterações vão constar no repositorio do github Water sensor utad.
- 22653 Eduardo Queirós
- 66509 Hugo Claro