Desafio Abajur Inteligente

! Desafio

Assim como o desafio anterior, este é um projeto para utilizar tudo o que foi aprendido até então!

!Conheça o Abajur Inteligente

O Abajur inteligente é um abajur que responde de forma dinâmica ao ambiente e a necessidade de quem o utiliza. Podendo assim responder de forma automática a iluminação do ambiente ou funcionar com uma determinada configuração escolhida.

!Faça você mesmo!

Pesquise nos projetos anteriores e pense em como o Abajur Inteligente funcionaria. Pense como você poderia fazer isso explorando os recursos do seu kit e elabore um programa para isso!

!Dicas para o projeto

Para este projeto, voce precisará:

  • Fazer com que o abajur mude de um estado para outro (Automático para Manual) – utilize os pinos do Mosfet para isso
  • Você precisará fazer de forma intuitiva para ser utilizado por qualquer pessoa
  • Você precisará conferir que ele será funcional
  • Você precisará fazer um botão de liga/desliga

Abaixo é possível encontrar o nosso código para este projeto, mas recomendamos que você faça você mesmo, pois assim você conseguirá aprender de verdade! Se tiver muita dificuldade, utilize o nosso código para tirar dúvidas ou descobrir como resolver problemas mais específicos.

Nosso código

int lamp = 3;
int lamp_2 = 6;
int button = A0;
int light;
int temp, oldTemp;

int intensity(int sensorValue)
{
  float intensityReturn;
  float bright = (sensorValue / 4);
  intensityReturn = 255 - bright;
  return intensityReturn;
}

int getButtonState()
{
  int value = analogRead(button);
  if (value < 69) {
    return 1;
  } else if (value >= 69 && value <= 230) {
    return 2;
  } else if (value >= 231 && value <= 407) {
    return 3;
  } else if (value >= 408 && value <= 630) {
    return 4;
  } else if (value >= 631 && value <= 896) {
    return 5;
  }
  return 0;
}

int readButton()
{
  int state = getButtonState();
  int count = 1;

  while (count < 5) {
    delay(5);
    int newState = getButtonState();
    if (newState == state) {
      count++;
    } else {
      count = 1;
    }
    state = newState;
  }

  return state;
}

void setup()
{
  pinMode(lamp, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  // Lampada ligada enquanto botao nao esta apertado
  int btn = readButton();

  while (btn != 5) {
    int sensorValue = analogRead(A3);
    light = intensity(sensorValue);
    analogWrite(lamp, light);
    if (btn == 1) {
      analogWrite(lamp_2, 55);
      temp = 55;
    } else if (btn == 2) {
      analogWrite(lamp_2, 105);
      temp = 105;
    } else if (btn == 3) {
      analogWrite(lamp_2, 155);
      temp = 155;
    } else if (btn == 4) {
      analogWrite(lamp_2, 255);
      temp = 255;
    }
    btn = readButton();
  }

  analogWrite(lamp, 0);
  analogWrite(lamp_2, 0);

  // Espera soltar o botao
  while (readButton() != 0);

  // Espera apertar o botao
  while (readButton() != 5);

  // Espera soltar o botao
  while (readButton() != 0);
  analogWrite(lamp_2, temp);
  oldTemp = temp;
}