Etape 12 : Le firmware et les principes de fonctionnement
Le firmware pour l’Imp est écrit dans un langage interprété appelé écureuil. La langue est JavaScript « similaires », donc si vous savez C ou Javascript, la syntaxe est facile à ramasser. C’est un langage orienté objet, donc a été fait usage de cette capacité pour implémenter des classes pour l’encapsulation. Le « IDE » est entièrement basé sur un navigateur qui est excellent parce que vous n’avez pas à installer tout un tas de composants IDE et pouvez accéder à votre code source de n’importe quel navigateur. Toutefois, l’éditeur est très basique, et le débogage est vieille école – à l’aide des instructions print pour vérifier votre code au lieu de frapper des points d’arrêt par exemple. Pour ceux d'entre nous qui ont grandi avec les éditeurs de DOS basé et compilateurs rudimentaires, ce sera familier au sol. Mais, l’ensemble du système fonctionne bien et j’aime être en mesure d’accéder au code direct de n’importe où.
Une des difficultés que je devais surmonter conduisait à un train d’impulsions compatible pour les moteurs pas à pas à travers la IOExpander à l’aide de la PMI. Exécute une boucle serrée a abouti à un train d’impulsions très stable et lisse, mais si le nombre d’étapes, que le moteur a besoin de se déplacer à travers est grand prenant plus d’une poignée de secondes, l’imp n’est pas capable de traiter la pile internet durant cette période et sera à quelques crash point – ils avertir à ce sujet sur leur site web, donc ce n’est pas un jab à Imp électrique – un fait que vous devez être au courant de si vous essayez de modifier les choses pour obtenir une impulsion plus lisse train pour les moteurs pas à pas. J’ai dû utiliser l’Imp des fonctions de sommeil qui sont pas temps précis tout en permettant la génération d’un train d’impulsions qui se déplacera le moteur le nombre correct d’étapes – juste avec beaucoup de gigue dans le calendrier qui rend les moteurs bruyants. Il s’agit d’une petite limitation du PGI.
Le système fonctionne en calculant l’angle d’azimut et le zénith du soleil selon l’heure de la journée. L’algorithme pour cela a été porté depuis une application C++ qui est disponible ici : http://www.psa.es/sdg/sunpos.htm
L’algorithme est une simplification du soleil disponible algorithmes de suivi, mais il semble malgré tout assez complexe pour les profanes comme moi. J’ai pu tester ma sortie de l’algorithme porté contre autres calculatrices web avec de bons résultats donc ma confiance dans l’utilisation de cet algorithme sont élevés. Insérer plusieurs URLs
Une fois que le calcul de position du soleil est terminé, le système vérifie ce qui est l’actuelle élévation et azimut du panneau solaire, calcule le décalage entre les angles du soleil nécessaire et la position du panneau et utilise ces compensations comme entrées aux objets moteurs pour conduire cette erreur à zéro. Cette pièce de la magie de la mesure s’effectue à l’aide d’une carte LSM303 de dérivation. Ce dispositif est constitué d’un accéléromètre 3 axes et le magnétomètre dans un même colis. La mise en œuvre est une boussole d’inclinaison compensée. Ceci permet l’utilisation d’une seule puce pour fournir la position et inclinaison du panneau d’informations. Étant donné que le PCB est fixé au panneau pour mesurer l’inclinaison du panneau, le cap magnétique doit être compensé pour l’inclinaison. L’algorithme est une implémentation d’une note d’Application ST que vous pouvez trouver ici : http://www.st.com/web/en/resource/technical/document/application_note/CD00269797.pdf
L’algorithme fonctionne bien pour l’inclinaison d’angle 45 et rduire pour le circuit imprimé a été monté à un angle d’environ 45 degrés vers le panneau afin que lorsque le panneau est aux extrêmes élévation de 90 et de 0, l’inclinaison mesurée par l’accéléromètre est dans les +/-45 degrés.
Si l'on considère que la puissance disponible dans le panneau solaire peut varier en fonction du cosinus de l’angle d’incidence des rayons du soleil, que nous pouvons tolérer une compensation raisonnable entre l’azimut idéal et idéal zénith du panneau et les angles réels du panneau. Par exemple à 5 degrés au large de l’azimut de l’idéal, la puissance disponible est de 99,6 % du maximum. Étant donné que la boussole d’inclinaison compensée n’est exacte à environ 2 degrés, c’est important de montrer qu’il devrait être facilement possible d’avoir des gains d’efficience élevée même avec détection inexactes.
Cela signifie également que nous pouvons réduire aussi considérablement la puissance nécessaire pour le circuit suivi en gardant les circuits de microprocesseur et moteur d’entraînement en mode "veille" pendant de longues périodes de temps. Étant donné que les changements d’angle soleil en azimut à raison de 15 degrés par heure, nous pouvons maintenir un degré 5 pires cas erreurs à la fin de notre ajustement erreur délai (2 degrés à cause de l’imprécision inhérente compas magnétique en supposant que l’additif, ainsi que 3 degrés en raison du mouvement du soleil) de réveiller toutes les 12 minutes et en ajustant l’erreur décale à zéro.
Le code est attaché à votre usage.