Naktinė lempa, kuri reaguoja į garsą, temperatūrą ir mirksi

arduino

#1

FabLab’e sukūriau naktinę lempą.Ji reaguoja į stiprų garsą. Tai gali būti suplojimas arba žinant, kad stipriausias garsas garsiakalbiui yra oro pūtimas, galima papūsti į garsiakalbį. Lempa taip pat reaguoja į temperatūrą ir pagal ją keičia rgb ledų spalvą. Kai temperatūra yra mažesnė už 29 laipsnius, ledai šviečia mėlyna spalva, rodydami, kad temperatūra yra žema. Kai temperatūra svyruoja tarp 29 ir 31 laipsnio ledai šviečia žalia spalva,o kai temperatūra yra didesnė nei 31 laipsnis, ledai šviečia raudonai. Taip pat glaima reguliuoti ledų mirksėjimą sukinėjant potenciometrą. Lempos išskirtinumas yra tas, kad lempos pleksiglaso dalį galima bet kada išimti ir su lazerio pagalba išsipjauti kokios nori formos ir kokį nori paveiksėlį, kurį galima įdėti į lempą.

NAKTINĖS LEMPOS IR LEMPOS DĖŽUTĖS IŠPLANAVIMAI

tree%20lamp treelampboxgalutinis

Lempos sudedmosios dalys:
Arduino Pro Micro
3 RGB ledai
Temperatūros matuoklis
Garsiakalbis
Potenciometras
Breadboard’as
Lempos dėžutė
Lempa iš pleksiglaso

NAKTINĖS LEMPOS NUOTRAUKOS

Lempos kodui parašyti prireikė daugiausiai laiko. Iš pradžių suprogramavau kodą skirta potenciometrui. Ledai gali mirksėti 4 stadiose, priklausomai nuo to kiek daug potenciometras yra atsuktas. Jeigu potenciometras neatsuktas nei trupučio, ledai nemirksės. Tada parašiau temperatūros kodą, kuris reaguoja į temperatūrą. Paskutinį kodą rašiau garsiakalbiui. Galų gale teko sudėti visus tris kodus į vieną, o tai buvo tikrai nelengva ir tam prireikė daug laiko.

NAKTINĖS LEMPOS KODAS

#include "dht.h"
#define dht_apin A1 // Analog Pin sensor is connected to
 
dht DHT;

boolean turnedOn = false;

void setup(){
 
  Serial.begin(9600);
  delay(500);//Delay to let system boot
  Serial.println("DHT11 Humidity & temperature Sensor\n\n");
  delay(1000);//Wait before accessing Sensor

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, INPUT);
 
}
 
void loop(){

    int sensor = analogRead(A2);
    
    DHT.read11(dht_apin);
    
    Serial.print("Current humidity = ");
    Serial.print(DHT.humidity);
    Serial.print("%  ");
    Serial.print("temperature = ");
    Serial.print(DHT.temperature); 
    Serial.println("C  ");
    Serial.println(sensor);
    delay(10);

    boolean val = digitalRead(5);
    Serial.println (val);
    // when the sensor detects a signal above the threshold value, LED flashes
    if (val==HIGH) {
      turnedOn = !turnedOn;
    };
    if (turnedOn == true) {
      if(sensor <= 341 && DHT.temperature < 31) {
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, LOW);
      };
      if(sensor <= 341 && DHT.temperature > 29) {
        digitalWrite(2, LOW);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH); 
      };
      if(sensor <= 341 && DHT.temperature >= 29 && DHT.temperature <= 31) {
        digitalWrite(2, HIGH);
        digitalWrite(3, LOW);    
        digitalWrite(4, HIGH);
      };
      if(sensor > 341 && sensor <= 682 && DHT.temperature < 31) {
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, LOW);
        delay(500);
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH);
        delay(500); 
      };
      if(sensor > 341 && sensor <= 682 && DHT.temperature > 29) {
        digitalWrite(2, LOW);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH); 
        delay(500);
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH); 
        delay(500);
      };
      if(sensor > 341 && sensor <= 682 && DHT.temperature >= 29 && DHT.temperature <= 31) {
        digitalWrite(2, HIGH);
        digitalWrite(3, LOW);    
        digitalWrite(4, HIGH);
        delay(500);
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH);
        delay(500); 
      };
      if(sensor > 682 && sensor < 1023 && DHT.temperature > 31) {
        digitalWrite(2, LOW);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH); 
        delay(100);
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH); 
        delay(100);
      };
      if(sensor > 682 && sensor < 1023 && DHT.temperature < 29) {
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, LOW);
        delay(100);
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH);
        delay(100);
      };
       if(sensor > 682 && sensor < 1023 && DHT.temperature >= 29 && DHT.temperature <= 31) {
        digitalWrite(2, HIGH);
        digitalWrite(3, LOW);    
        digitalWrite(4, HIGH);
        delay(100);
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH);
        delay(100);
      };
      if(sensor >= 1023 && DHT.temperature > 31) {
        digitalWrite(2, LOW);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH); 
        delay(50);
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH); 
        delay(50);
      };
      if(sensor >= 1023 && DHT.temperature < 29) {
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, LOW);
        delay(50);
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH);
        delay(50);
      };
      if(sensor >= 1023 && DHT.temperature >= 29 && DHT.temperature <= 31) {
        digitalWrite(2, HIGH);
        digitalWrite(3, LOW);    
        digitalWrite(4, HIGH);
        delay(50);
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH);
        delay(50);
      };
   };
   if (turnedOn == false) {
        digitalWrite(2, HIGH);
        digitalWrite(3, HIGH);    
        digitalWrite(4, HIGH);
   };
};

Gamindamas naktinę lempą išmokau dauk naujų dalykų, tokių kaip programuoti C programavimo kalba, lytuoti, naudotis Inkscape programa, naudotis lazeriu.

Manu, kad šis projektas gali būti tobulinamas ir tai tikrai nėra pabaiga šiam projektui.