Ejecuta en sólo el Atmetl, que el simulador del amanecer comenzó a recibir errores intermitentes, que dio lugar a brillantes destellos de luz durante el ciclo de salida del sol en lugar de un aumento gradual. Probablemente esto era de ruido adicional de la alarma de Soleil. Ya no tenía fácil acceso a un programador de Atmel, así que decidi actualizar a un Arduino para facilitar cambios futuros.
El cableado es en gran parte lo mismo que antes, excepto la señal de la Soleil es leído por una entrada en lugar de una entrada digital analógica. Decidí usar la entrada analógica haría el controlador más resistente al ruido que el mi anterior solución usando interrupciones. Código de Arduino está abajo:
previousMillis largo = 0; almacenará la última vez actualizó a LED
largo intervalo de tiempo = 1000; intervalo en el que se actualiza (milisegundos)
void setup() {}
Inicializa el pin digital como salida.
pinMode (9, salida);
Apagar el LED de la placa Arduino
pinMode (13, salida);
digitalWrite (13, bajo);
Timer1 hace ~ 16-bit PWM
TCCR1A = _BV (COM1B1) | _BV (WGM11) | _BV (COM1A1);
TCCR1B = _BV (WGM13) | _BV (WGM12) | _BV (CS10);
ICR1 = 65535;
Iniciar el ciclo de trabajo PWM al 100%
OCR1A = 65535;
encender para la depuración
Serial.Begin(9600);
}
void loop() {}
unsigned currentMillis largo = millis();
y largo = 0;
tiempo de salida [100], u;
int i;
tomar lecturas de 1000 en la entrada analógica
para (i = 0; i < 1000; i ++) {}
y = y + analogRead(A0);
}
salida [0] = 65535 / (1 + exp(-1*0.00002275*(y-500000)));
promedio de la salida para no saltar por
para (i = 9; i > 0; i--) {}
salida [i] = salida a [i-1];
}
u = 0;
para (i = 0; i < 10; i ++) {}
u = u + salida [i];
}
Asegúrese de que el valor de salida no pasa por encima de 65535
Si (u/10 > 65535) u = 655350;
establecer el ciclo de trabajo PWM
OCR1A = u/10;
Si (currentMillis - previousMillis > intervalo) {}
excepto la última vez que la salida se imprime
previousMillis = currentMillis;
lo que está sucediendo para la depuración de salida
Serial.println(OCR1A);
Serial.println(y);
}
}
Determinar la función exponencial que coincidió con la salida de los LEDs para las luces incandescentes por el ojo y ensayo y error. Se adjunta un gráfico que muestra el aumento exponencial en comparación con un aumento lineal.