Paso 12: El firmware y los principios de operación
El firmware para el Imp está escrito en un lenguaje interpretado llamado ardilla. El lenguaje es JavaScript "me gusta" por lo que si sabes C o Javascript, la sintaxis es fácil de recoger. Es un lenguaje orientado a objetos por lo que se hizo uso de esta capacidad para aplicar las clases para la encapsulación. El "IDE" es completamente basada en explorador que es grande porque usted no tiene que instalar un montón de componentes IDE y puede acceder a su código fuente desde cualquier navegador. Sin embargo, el editor es muy básico y depuración es vieja escuela – mediante instrucciones de impresión para verificar su código en lugar de golpear puntos de interrupción por ejemplo. Para los que crecimos con rudimentarios compiladores y editores basado en DOS, se trata de terreno familiar. Pero, el sistema en general funciona bien y quisiera poder acceder al código vivo desde cualquier lugar.
Una de las dificultades que tuve que superar fue conducir un tren de pulso constante para los motores paso a paso a través de la IOExpander usando al Imp. Ejecuta un bucle ajustado resultó en un tren de pulso muy estable y suave, pero si el número de pasos que el motor tiene que pasar es grande teniendo más que un puñado de segundos, el imp no es capaz de procesar la pila de internet durante este tiempo y en algunos punto de accidente – advierten sobre esto en su sitio web así que esto no es un jab en Electric Imp – solo es un dato que tienes que ser consciente de de si se intenta cambiar las cosas para obtener un pulso suave tren para motores paso a paso. Tuve que usar al Imp funciones de sueño que son no tiempo exacto pero aún permiten la generación de un tren de pulso que se mueve el motor el número correcto de pasos – sólo con mucha inquietud en el momento que los motores más ruidosos. Esta es una pequeña limitación de la Imp.
El sistema funciona calculando el ángulo acimutal y cenital del sol basado en la hora del día. El algoritmo para esto fue portado desde una aplicación de C++ que está disponible aquí: http://www.psa.es/sdg/sunpos.htm
El algoritmo es una simplificación del sol disponible algoritmos de seguimiento, pero aún así parece ser bastante complejo para el laico como yo. He podido probar mi salida de un algoritmo contra otras calculadoras web con buenos resultados por lo que mi confianza en el uso de este algoritmo son altos. Insertar URLs más
Una vez finalizado el cálculo de la posición de sol, el sistema comprueba la actual elevación y acimut del panel solar es, calcula el desplazamiento entre los ángulos del sol requiere y la posición del panel y utiliza estas compensaciones como entradas a los objetos de motor para este error a cero. Esta pieza de la magia de la medición se logra mediante una Junta de arranque de LSM303. Este dispositivo consta de un acelerómetro de 3 ejes y un magnetómetro en el mismo paquete. La aplicación es una brújula de inclinación compensada. Esto permite el uso de un solo chip para proporcionar dirección e información del panel de la inclinación. Debido a que el PCB se une al panel para medir inclinación del panel, el rumbo magnético necesita compensar la inclinación. El algoritmo es una aplicación de una nota de ST Application que usted puede encontrar aquí: http://www.st.com/web/en/resource/technical/document/application_note/CD00269797.pdf
Los trabajos del algoritmo para inclinación ángulo de 45 y bajar así la placa de circuito fue montada en un ángulo de aproximadamente 45 grados en el panel de modo que cuando el panel está en los extremos de la elevación de 90 y 0, la inclinación medida por el acelerómetro en los +-45 grados rango.
Si tenemos en cuenta que la potencia disponible del panel solar variará en función del coseno del ángulo de la incidencia de los rayos del sol, podemos tolerar una compensación razonable entre el acimut ideal y zenith ideal del panel y los ángulos reales del panel. Por ejemplo en 5 grados de acimut de ideal, la potencia disponible es 99.6% del máximo. Teniendo en cuenta que la brújula de inclinación compensada es solamente exacta a cerca de 2 grados, esto es importante para demostrar que debe ser fácilmente posible tener alta eficiencia incluso con detección inexacta.
Esto también significa que podemos reducir también significativamente la energía necesaria para el circuito de seguimiento manteniendo los circuitos del microprocesador y la impulsión del motor en modo de reposo durante largos períodos de tiempo. Dado que los cambios de ángulo del sol en acimut a una velocidad de 15 grados por hora, podemos mantener un error peor caso de grado 5 en el final de nuestro período de tiempo (2 grados debido a la inexactitud inherente de compás magnético suponiendo aditivo, además de 3 grados debido al movimiento del sol) ajuste del error por despertarse cada 12 minutos y el error de ajuste compensación a cero.
El código se adjunta para su uso.