Janela Automática (A)

Criando um ambiente inteligente que reage à luz.

Vamos construir um dispositivo que traz a automação para dentro de casa! O desafio desta atividade é projetar e construir uma janela inteligente que se abre automaticamente com a luz do dia e se fecha ao anoitecer. Utilizando um sensor de luz e um servo motor, cada equipe criará seu próprio mecanismo, explorando conceitos de mecânica, eletrônica e programação para criar um sistema funcional e criativo que interage com o ambiente.

Roteiro para Professores (Foco no Aprofundamento Técnico)

  • Objetivo da Atividade: Implementar um sistema de controle de posição utilizando um Servo Motor atuado pela leitura de um sensor de luminosidade (LDR), explorando a conversão de dados analógicos de um sensor em movimento angular preciso de um atuador.
  • Conceitos Tecnológicos Fundamentais:
    • Sensor LDR (Resistor Dependente de Luz): Componente analógico cuja resistência varia com a intensidade da luz, fornecendo uma leitura contínua (0-1023) em um pino analógico.
    • Servo Motor: Atuador que permite o controle preciso de um eixo para um ângulo específico (geralmente 0-180 graus), ideal para movimentos de abrir/fechar.
    • Função map(): Ferramenta de programação essencial para converter (mapear) uma faixa de valores (a leitura do LDR) para outra faixa (os ângulos do servo).
  • Princípio Lógico: A abordagem mais eficaz é criar um sistema proporcional. O valor analógico lido pelo sensor LDR será mapeado diretamente para um ângulo do servo motor. Por exemplo, uma leitura de luz baixa (ex: < 300) corresponde ao ângulo de 0° (janela fechada), e uma leitura de luz alta (ex: > 800) corresponde ao ângulo de 90° (janela aberta). A função map() calculará todas as posições intermediárias, criando um movimento suave.
  • Guia de Solução de Problemas (Troubleshooting):
    • Servo treme ou faz muito barulho: A causa mais comum é alimentação de energia insuficiente. Considere alimentar o servo com uma fonte externa, compartilhando apenas o GND com o Arduino.
    • Movimento da janela não é suave ou não abre/fecha totalmente: Calibre os valores na função map(). Use o Monitor Serial para ver qual valor o LDR lê no escuro e com luz forte e use esses números como os limites de entrada na função. Ajuste também os ângulos de saída (0 e 90) para corresponder ao movimento mecânico da sua janela.
    • Janela fica abrindo e fechando com pequenas variações de luz: Isso se chama “oscilação”. Veja o desafio extra para implementar uma solução de histerese.
  • Desafio Extra (Nível Avançado):
    • Implementar histerese na programação. Para evitar a oscilação, crie limiares diferentes para abrir e fechar a janela. Por exemplo, a janela só abre se a luz for maior que 700, mas só fecha se a luz for menor que 400. Isso cria uma “zona morta” que ignora pequenas flutuações de luz.
  • Materiais Necessários:
    • Hardware: SmartMotor com Servo Motor (Placa B) OU (Kit Arduino, Protoboord, Servo Motor, Sensor LDR); materiais para a estrutura da janela; lanterna.
    • Software: Arduino IDE e/ou conta na plataforma TinkerCAD.
  • Possibilidades de Aplicação e Expansão:
    • Seguidor Solar: Adaptar o mecanismo e o código (usando dois LDRs) para criar um painel que gira para seguir a fonte de luz mais forte, otimizando a captação de energia solar.
    • Válvula de Irrigação Automática: Trocar o sensor LDR por um sensor de umidade do solo para criar uma válvula que abre e fecha automaticamente para irrigar plantas.
    • Controle de Câmera (Pan/Tilt): Usar dois servos para controlar o movimento de uma pequena câmera nos eixos horizontal (pan) e vertical (tilt).

Programação Sugerida
// Inclui a biblioteca Servo para controlar o motor.

include

// Cria um objeto para controlar nosso servo motor.
Servo servoJanela;

// Define os pinos
const int pinoLDR = A0; // Sensor LDR conectado ao pino analógico A0
const int pinoServo = 9; // Servo motor conectado ao pino digital 9

// Variáveis para armazenar os valores
int leituraLuz;
int anguloJanela;

void setup() {
// Anexa o objeto servo ao pino correspondente.
servoJanela.attach(pinoServo);
}

void loop() {
// 1. Lê o valor do sensor de luz (um número entre 0 e 1023).
leituraLuz = analogRead(pinoLDR);

// 2. Mapeia a faixa de leitura da luz para a faixa de ângulos da janela.
// Ajuste os valores 300 (escuro) e 800 (claro) conforme seus testes.
// Ajuste os ângulos 0 (fechada) e 90 (aberta) conforme seu mecanismo.
anguloJanela = map(leituraLuz, 300, 800, 0, 90);

// 3. Limita o ângulo para garantir que ele não ultrapasse os limites físicos.
anguloJanela = constrain(anguloJanela, 0, 90);

// 4. Comanda o servo para mover para o ângulo calculado.
servoJanela.write(anguloJanela);

// Pequena pausa para estabilizar o servo.
delay(15);
}

}

Esquemático Eletrônico

SmartMotors