Haikyu Shutter

An automatic shutter controlled according to brightness and temperature, for greater comfort and energy savings. It works with LoRa techno

IntermediateWork in progress6 hours118
Haikyu Shutter

Things used in this project

Hardware components

Arduino MKR WAN 1300
Arduino MKR WAN 1300
×1
Adafruit Waterproof DS18B20 Digital temperature sensor
Adafruit Waterproof DS18B20 Digital temperature sensor
×1
DHT11 Temperature & Humidity Sensor (3 pins)
DHT11 Temperature & Humidity Sensor (3 pins)
×1
LED, Blue
LED, Blue
×1
5 mm LED: Yellow
5 mm LED: Yellow
×1
DC Motor, 12 V
DC Motor, 12 V
×1
2AA Battery Holder for RTC
UDOO 2AA Battery Holder for RTC
×1
Analog Ambient Light Sensor For Arduino
DFRobot Analog Ambient Light Sensor For Arduino
×2
Breadboard (generic)
Breadboard (generic)
×1
Resistor 1k ohm
Resistor 1k ohm
×2
Resistor 220 ohm
Resistor 220 ohm
×1
Dual DC Motor Driver
×1
Generic 9V DC supply
×1
Grove - Relay
Seeed Studio Grove - Relay
×1

Software apps and online services

The Things Stack
The Things Industries The Things Stack
Node-RED
Node-RED
Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Laser cutter (generic)
Laser cutter (generic)
3D Printer (generic)
3D Printer (generic)
Drill / Driver, Cordless
Drill / Driver, Cordless
Multitool, Screwdriver
Multitool, Screwdriver

Story

Read more

Custom parts and enclosures

Box design

Schematics

Wiring

Code

Arduino Main Code

Arduino
The Code running by the Arduino
#include <MKRWAN_v2.h>
#include "DHT.h"
#include <OneWire.h>
#include <DS18B20.h>
#include "ArduinoJson.h"

#define DHTPIN 2
#define DHTTYPE DHT11
#define ONE_WIRE_BUS 0

StaticJsonDocument<256> doc;
OneWire oneWire(ONE_WIRE_BUS);
DS18B20 sensor(&oneWire);
volatile byte state = LOW;
int position=0;
int envoie=15;

uint32_t start, stop;

LoRaModem modem;
String appEui = "00:00:00:00:00:00:00:00";
String appKey = "F2:AF:2C:C0:5E:59:9C:52:E8:23:46:78:C9:99:F2:1E";
DHT dht(DHTPIN, DHTTYPE);

void monter(){
  digitalWrite(18,HIGH);
  for (int h=0;h<110;h++){

  analogWrite(1,h);
  delay(5);
}
}

void stoppy(){
  analogWrite(18,0);
  analogWrite(1,0);
  delay(1000);
}


void descendre(){
  digitalWrite(1,LOW);
  for (int i=0;i<110;i++){

  analogWrite(18,i);
  delay(5);
}
}

void setup() {
  
  Serial.begin(115200);
  Serial.println("Booting...");
  modem.begin(EU868);
  
  //def entrées
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);

  //def sorties
  pinMode(1, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(6, OUTPUT);
  digitalWrite(6,HIGH);

  //calibration volet
  descendre();
  delay(500);
  stoppy();

  //setup des capteurs temp
  dht.begin();
  sensor.begin();
  sensor.setResolution(12);

  //setup modem
  int connected;
  int err;
  connected = modem.joinOTAA(appEui, appKey);
  modem.minPollInterval(30);
  modem.setPort(1);
  delay(5000);
  digitalWrite(6,LOW);
  
}

void loop() {

  float hin = dht.readHumidity();
  float tin = dht.readTemperature();
  sensor.requestTemperatures();
  float tout = sensor.getTempC();
  int test1=analogRead(A1)*100;
  int taux_lum1 = test1/1023;

  int sensorValue2 = analogRead(A2);
  float voltage2 = sensorValue2 * (5 / 1024.0);
  int taux_lum2 = 100-(voltage2*20);

  //control_lume alluage lampe intérieur
  if(taux_lum2<35){
    digitalWrite(3,HIGH);
  }
  else{
    digitalWrite(3,LOW);
  }
  control_lum(taux_lum1,taux_lum2);

  Serial.print("Humidite interieure: ");
  Serial.print(hin);
  Serial.print(" %\n");
  Serial.print("Temperature interieure: ");
  Serial.print(tin);
  Serial.print(" *C ");
  Serial.print(" %\n");
  Serial.print("Temperature exterieure: ");
  Serial.print(tout);
  Serial.print(" *C ");
  Serial.print(" %\n");
  Serial.print("lumière ext :");
  Serial.println(taux_lum1);
  Serial.print("lumière int :");
  Serial.println(taux_lum2);
  
  
  //envoie des infos vers TTN/Node-Red
  if(envoie==15){
  digitalWrite(6,HIGH);
  Serial.println("Sending packet...");
  modem.beginPacket();
  modem.print(tin);
  modem.print(",");
  modem.print(tout);
  modem.print(",");
  modem.print(taux_lum1);
  modem.print(",");
  modem.print(taux_lum2);

  int err = modem.endPacket(true);
  Serial.println("Packet send");
  if(err){
    Serial.println("Succès");
  }
  digitalWrite(6,LOW);
  envoie=0;
  }
  
  if (!modem.available()) {
    Serial.println("No downlink message received at this time.");
  }
  
  //Réception infos depuis Node-Red
  char rcv[64];
  int q = 0;
  while (modem.available()) {
    rcv[q++] = (char)modem.read();
  }
  Serial.print("Received: ");
  for (unsigned int h = 0; h < q; h++) {
    Serial.print(rcv[h] >> 4, HEX);
    Serial.print(rcv[h] & 0xF, HEX);
    Serial.print(" ");
  }
  Serial.println();

  delay(2000);
  envoie++;
}


void control_temp(int var1, int var2){
  if(((var1-var2)>2)||((var1-var2)<-2)){
  if(var1<var2){
    if(position>0){
        descendre();
        delay(100);
        stoppy();
        position--;
        Serial.print("position");
        Serial.println(position);
    }
  }
  else{
    if(position<4){
      monter();
      delay(100);
      stoppy();
      position++;
      Serial.print("position");
      Serial.println(position);
    }
  }
  }
}

void control_lum(int var1, int var2){
  if(((var1-var2)>20)||((var1-var2)<-20)){
  if(var1<var2){
    if(position>0){
        descendre();
        delay(100);
        stoppy();
        position--;
        Serial.print("position");
        Serial.println(position);
    }
  }
  else{
    if(position<4){
      monter();
      delay(100);
      stoppy();
      position++;
      Serial.print("position");
      Serial.println(position);
    }
  }
  }
}

Credits

Nicolas LEFEBVRE
1 project • 0 followers
Contact
Pierre Becquet
0 projects • 0 followers
Contact
Nicolas DAILLY
40 projects • 25 followers
Associated Professor at UniLaSalle - Amiens / Head of the Computer Network Department / Teach Computer and Telecommunication Networks
Contact
fcaron
22 projects • 6 followers
Contact

Comments

Please log in or sign up to comment.