# SmartLightning
> IOT - Smart Lightning Application.
Para facilitar a leitura deste ficheiro, usar o vscode (ou similar) e colocar em modo "__preview__".
Qualquer eventual alteracao/atualizacao deste projeto, encontrar-se-a no
__Github__.
## Equipment
- Arduino MKRWAN
- LDR Sensor
- Analog Ambient Light Sensor by DFRobot's
- LED
- 10 KΩ Resistor
- 220 Ω Resistor
- Breadboard
- Breadboard Wire
__LDR Specification__
Ω in bright light
MΩ in darkness
__Analog Ambient Light Specification__
Supply Voltage: 3.3V to 5V
Illumination range : 1 Lux to 6000 Lux
Responsive time : 15us
Interface: Analog
Size:22x30mm
## Overview
Este projeto tem como intuito, a criacao de uma aplicacao Smart Lightning em IOT.
Neste caso, iremos usar os dois sensores acima referidos, de forma a ter nocao da `Luminosidade` e da `Tensao` a que esta sujeito um espaco interior, mediante a luz solar que e incidida no mesmo, ligando ou desligando um LED. Este LED dispensa qualquer interacao humana, o que permite obter um sistema inteligente e eficiente de ligar e desligar a luz, dependendo da condicao exterior.
E importante salientar o uso do protocolo LoRaWAN, atraves do arduino MKRWAN e do The Things Network, que torna possivel nao so armazenamento e analise de dados mas tambem, uma vantajosa interacao com diversas aplicacoes que permite uma reacao aos mesmos, desde enviar um tweet quando uma condicao e cumprida (abordada neste trabalho), a uma aplicacao de telemovel que permite interagir com o dispositivo, sendo possivel ligar e desligar a luz do LED atraves da mesma.
## Procedure and Results
Este projeto vai ser divido em 4 fases, cada fase encontra-se na sua respetiva pasta com uma explicacao promenorizada.
### 1a Fase
Registo do dispositivo MKRWAN no `The Things Network`:
#### Device Overview (TTN)
```plan
Application ID: smartlighting-app
Device EUI: 009472084173A903
Application EUI: 70B3D57ED002E395
App Key: 6A21B5D4855D9595F888E6096BC2444B
```
### 2a Fase
Leitura de valores dos sensores e posterior envio:
#### Code (Arduino)
```c
// Leitura de valores
// Read values
lux = analogRead(lightSensor);
analogValue = analogRead(ldrSensor);
voltage = analogValue * (5.0 / 1023.0);
resLrd = ((10000.0 * 5.0)/voltage) - 10000.0; //Low (voltage>>>2,5) ; High (voltage<<<2.4)
if (millis() - time > 60000){
luxValue = (float)lux * 0.6 + (float)luxValue * 0.4;
lux = 0;
voltageValue = (float)voltage * 0.6 + (float)voltageValue * 0.4;
voltage = 0;
if(voltageValue <= 2){
digitalWrite(LED, HIGH);
ledValue = 1;
Serial.println("It's too dark, LED turn on!");
} else {
digitalWrite(LED, LOW);
ledValue = 0;
Serial.println("It's too bright, LED turn off!");
}
time = millis();
}
// Envio para o TTN de 10 em 10 minutos (600000ms)
// Send to TTN every 10 minutes (600000ms)
if (millis() - timeUpload > 600000){
int valLux = (int)(luxValue * 10);
txBuffer[0] = (valLux >> 8) & 0xff;
txBuffer[1] = valLux & 0xff;
int valVol = (int)(voltageValue * 10);
txBuffer[2] = (valVol >> 8) & 0xff;
txBuffer[3] = valVol & 0xff;
txBuffer[4] = ledValue & 0xff;
int err;
modem.beginPacket();
modem.write(txBuffer);
err = modem.endPacket(true);
timeUpload = millis();
}
```
### 3a Fase
Descodificar os dados recebidos:
#### Payload Formats (TTN)
```js
function Decoder(bytes, port) {
var decoded = {};
if (port === 1){
decoded.lux = ((bytes[0] << 8) | bytes[1]);
decoded.vol = ((bytes[2] << 8) | bytes[3]);
decoded.led = bytes[4]
if(decoded.led == 1) decoded.Status = "LED ON";
if(decoded.led === 0) decoded.Status = "LED OFF";
}
return{
field1: decoded.lux / 10,
field2: decoded.vol / 10,
field3: decoded.led,
status: decoded.Status
}
}
```
Resultado:
![TTN_DataF](https://github.com/r0m5-23/SmartLightning/blob/master/./Img/TTN_DataF.png)
### 4a Fase
Integracao dos dados no
__The Things Speak__:
![TTN_ViewF](https://github.com/r0m5-23/SmartLightning/blob/master/./Img/TTS_ViewF.png)
React atraves do
__Twitter__ quando o LED esta ON:
![TTS_Twitter](https://github.com/r0m5-23/SmartLightning/blob/master/./Img/TTS_Twitter.png)
## Culmination
Como esperado, podemos verificar o exito de todas as fases.
E de notar, que esta e uma simulacao e nao foi possivel testar o equipamento devido ao ano atipico a que estivemos sujeitos (Covid-19), nao permitindo analisar com precisao os resultados obtidos.
Para concluir, este projeto foi desenvolvido no ambito da Unidade Curricular: __Instrumentacao e Sensores__, Curso: __Mestrado Integrado em Engenharia Eletrotecnica e de Computadores__, Universidade:
__UTAD__.
## Trabalho Realizado por
> Renato Mendes - 65384