Table des matières:
- Étape 1: Matériel requis
- Étape 2: Configuration de l'environnement
- Étape 3: Présentation de la conception
- Étape 4: Création de correctifs personnalisés à partir de la bibliothèque XOD Core
- Étape 5: Création de correctifs personnalisés à l'aide de C++
- Étape 6: Construction
- Étape 7: Tests, partie 1
- Étape 8: Test, partie 2
- Étape 9: Annexe sur la logique floue
Vidéo: Lampe solaire rechargeable alimentée par XOD : 9 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Il existe des lampes solaires de jardin/passerelle bon marché disponibles dans la plupart des magasins d'articles pour la maison et des quincailleries. Mais comme le dit le vieil adage, vous en avez généralement pour votre argent. Les circuits de charge et d'éclairage habituels qu'ils utilisent sont simples et bon marché, mais le rendement lumineux que vous obtenez est tout sauf impressionnant (et à peine suffisant pour que quiconque utilise votre passerelle puisse voir où il va !)
C'est ma tentative de concevoir un module d'éclairage hors réseau qui constitue une amélioration significative, tout en étant relativement peu coûteux à fabriquer. En lui donnant des "cerveaux". XOD.io est un nouvel IDE compatible avec la plate-forme de développement embarquée Arduino, où vous pouvez "écrire" du code graphiquement. L'environnement transpile votre esquisse graphique en C++ moderne, qui est remarquablement efficace pour générer du code compact, et génère une source entièrement compatible avec l'IDE Arduino d'origine sans nécessiter de dépendances externes supplémentaires. De cette façon, même de petits microcontrôleurs peu coûteux avec des ressources limitées de programme et de stockage de données peuvent être utilisés pour effectuer des tâches complexes.
Ce projet montre comment deux microcontrôleurs ATTiny85 compatibles Arduino travaillant ensemble peuvent être utilisés pour gérer les besoins en énergie de la lampe. Le premier processeur gère les données d'environnement de détection à partir du matériel externe, et le second essaie de récupérer le plus d'énergie possible du soleil pendant la journée, puis de contrôler l'éclairage d'une LED haute puissance lorsqu'une batterie de stockage se décharge la nuit. Le deuxième processeur accomplit son travail via une implémentation compacte de la commande « logique floue ». Le logiciel des deux puces a été développé exclusivement dans l'environnement XOD.
Étape 1: Matériel requis
Arduino IDE, dernière version, avec extension ATTinyCore installée à partir du gestionnaire "Boards"
Programmeur Sparkfun USBTinyISP ATTiny, 11801 ou équivalent Page produit Sparkfun
Convertisseur élévateur basse tension réglable Pololu avec entrée d'arrêt, U1V11A ou page produit Pololu équivalente
LED blanche ou RVB haute puissance avec dissipateur thermique, anode commune, Adafruit 2524 ou page produit Adafruit équivalente
Microchip ATTiny85 dans un boîtier DIP à 8 broches, 2 pages produit Mouser
Prises IC DIP 8 broches, 2
Condensateur de stockage en vrac, 16 v 220 uF
Condensateur de sortie, 6.3v 47uF
Résistances de limitation de courant, 50 ohm 1/4 watt
Résistances de rappel i2c, 4,7k, 2
Résistances de division de détection de tension de panneau, 1/4 watt, 100k, 470k
Résistance de détection de courant, 10 ohm 1⁄2 watt 1% tolérance
Condensateurs de dérivation, 0.1uF céramique, 2
2 batterie rechargeable lithium-ion 3,7 v 100 mAh, PKCELL LP401 ou équivalent
Prise d'entrée à fiche cylindrique pour panneau, 1
Mini borniers 3"x3" plaque à souder et fil fin à âme pleine pour effectuer les connexions
Un oscilloscope, un multimètre et une alimentation de banc seront presque certainement nécessaires pour les tests
Étape 2: Configuration de l'environnement
L'environnement XOD ne prend pas en charge la série de processeurs ATTiny prête à l'emploi, mais en utilisant quelques bibliothèques tierces de l'univers Arduino, il est simple d'ajouter la prise en charge de cette série d'AVR. La première étape consiste à installer la bibliothèque "ATTinyCore" à partir du menu déroulant "Outils → Carte → Gestionnaire de cartes" de l'IDE Arduino. Assurez-vous que les paramètres indiqués dans l'image incluse sont corrects - n'oubliez pas que vous devez appuyer sur "Graver le chargeur de démarrage" pour modifier les fusibles de réglage de la tension de baisse de tension et de la vitesse d'horloge avant de télécharger un code !
Le code source de cette bibliothèque est disponible sur:
Une autre bibliothèque utile à avoir dans le référentiel est "FixedPoints", qui est une implémentation au moment de la compilation des mathématiques à virgule fixe pour les processeurs pris en charge par Arduino. L'ATTiny a une SRAM et une mémoire de programme limitées, et cela aide beaucoup à réduire la taille de l'esquisse finale pour utiliser un entier de 2 octets pour le stockage général des données, plutôt qu'un type à virgule flottante, qui nécessite 4 octets sur l'AVR. La vitesse d'exécution devrait également être améliorée car l'ATTiny n'a pas d'unité de multiplication matérielle, encore moins de virgule flottante matérielle !
Le code source est disponible sur:
Le didacticiel expliquant comment créer, transpiler et déployer des esquisses graphiques XOD sur: https://github.com/Pharap/FixedPointsArduino vous aidera beaucoup à comprendre comment les fichiers source inclus ont été créés.
Étape 3: Présentation de la conception
Sur la carte, deux processeurs ATTiny85 sont connectés via une interface i2c et sont utilisés pour gérer la détection de la tension du panneau solaire, le courant circulant dans la batterie depuis le convertisseur boost lorsque le panneau est allumé, la tension de la batterie et la batterie Température.
Le convertisseur élévateur est un module standard basé sur un circuit intégré Texas Instruments TPS6120, qui peut prendre une tension d'entrée aussi basse que 0,5 volts et l'augmenter de 2 volts à 5 volts. Le noyau du capteur comprend plusieurs blocs fonctionnels. L'horloge principale commence à fonctionner dès que l'alimentation est appliquée au convertisseur boost à partir de l'entrée du panneau solaire. Cela démarre l'exécution du croquis et la première chose à faire est de déterminer si le panneau est suffisamment éclairé pour fournir un courant de charge à la batterie.
La tension du panneau solaire passe à travers deux filtres numériques, et si elle dépasse un certain seuil, le système détermine que le panneau est illuminé et déclenche l'horloge principale dans le moniteur de détection de courant. Il s'agit d'un canal de conversion analogique-numérique de la puce, configuré de manière différentielle, qui détecte la tension sur une résistance de tolérance de 10 ohms à 1 % connectée en série entre la sortie du convertisseur élévateur et l'entrée de la batterie. Lorsque le panneau n'est pas allumé, cet ATTiny envoie un signal au deuxième ATTiny lui disant de surveiller l'alimentation LED au lieu de charger l'alimentation, d'éteindre le convertisseur boost et d'isoler l'entrée afin que la batterie ne renvoie pas de courant à travers le panneau.
Le deuxième noyau ATTiny est l'endroit où le contrôleur LED et le système de surveillance de la charge de la batterie s'exécutent. La tension du panneau, la tension de la batterie et les données de courant de charge de la batterie sont envoyées à ce noyau pour traitement via un réseau à logique floue, qui tente de générer un signal PWM approprié à appliquer à la broche SHTDN, contrôlant ainsi la quantité de courant envoyée à la batterie pour le charger lorsqu'il est allumé - une forme de base de suivi du point de puissance maximale (MPPT.) Il reçoit également un signal du noyau du capteur lui indiquant s'il doit allumer ou éteindre la LED, en fonction de la sortie du noyau du capteur jour / tong de nuit.
Lorsque la LED est active la nuit, cet ATTiny surveille les données de tension de la batterie qui lui sont envoyées par son copain, et son propre capteur de température sur puce, pour obtenir une estimation approximative de la quantité d'énergie injectée dans la LED (la tension de la batterie diminue et la température de la puce augmente avec le courant tiré de ses broches.) Le réseau de logique floue associé au patch LED PWM tente de juger de la quantité d'énergie de la batterie encore disponible et de diminuer l'intensité de la LED lorsque la batterie est épuisée.
Étape 4: Création de correctifs personnalisés à partir de la bibliothèque XOD Core
Plusieurs nœuds de correctifs personnalisés ont été utilisés pour cette conception, dont certains peuvent être facilement construits entièrement à partir des nœuds XOD inclus, et d'autres qui ont été implémentés en C++.
Le premier des deux nœuds de patch personnalisés dans les images est une implémentation d'un filtre de moyenne mobile exponentiel. Il s'agit d'un filtre numérique passe-bas à faible surcharge utilisé en série dans le croquis, une fois pour filtrer la tension entrante du panneau solaire pour le noyau logique, et une fois de plus pour alimenter le déclencheur qui détermine l'éclairage ambiant à long terme. Voir l'entrée Wikipedia sur le lissage exponentiel.
La structure de nœuds dans l'image n'est qu'une représentation graphique directe de la fonction de transfert dans l'article, connectée ensemble à l'aide de liens entre les entrées et les sorties appropriées. Il existe un nœud de report de la bibliothèque qui permet de créer une boucle de rétroaction (XOD vous avertira si vous créez une boucle de rétroaction sans insérer de délai dans la boucle, comme décrit dans le modèle d'exécution XOD.) Avec ce détail pris en charge le patch fonctionne bien, c'est c'est simple.
Le deuxième nœud de patch personnalisé est une variante de la bascule standard incluse avec XOD, qui est alimentée par la tension de panneau filtrée. Il se verrouille haut ou bas selon que le signal d'entrée est supérieur ou inférieur à un certain seuil. Les nœuds de distribution sont utilisés pour convertir les valeurs de sortie booléennes en type de données d'impulsion pour déclencher la bascule, lorsque l'état passe de bas à haut. La conception de ce nœud de correctif devrait, espérons-le, être quelque peu explicite à partir de la capture d'écran.
Étape 5: Création de correctifs personnalisés à l'aide de C++
Pour les exigences particulières où la fonctionnalité de nœud nécessaire serait trop complexe pour être facilement représentée graphiquement, ou qui reposent sur des bibliothèques Arduino non natives de l'environnement Arduino d'origine, XOD permet à ceux qui ont des connaissances en C/C++ d'écrire facilement des morceaux de petite taille. code qui peut ensuite être intégré dans un patch de la même manière que tout autre nœud créé par l'utilisateur ou stock. La sélection de « créer un nouveau patch » dans le menu Fichier crée une feuille vierge avec laquelle travailler, et les nœuds d'entrée et de sortie peuvent être glissés à partir de la section « nœuds » de la bibliothèque principale. Ensuite, le nœud "non implémenté dans xod" peut être glissé et, lorsqu'il est cliqué, il affichera un éditeur de texte où la fonctionnalité requise peut être implémentée en C++. Comment gérer l'état interne et accéder aux ports d'entrée et de sortie à partir du code C++ est couvert ici.
À titre d'exemple d'implémentation de correctifs personnalisés en C++, deux autres correctifs personnalisés pour le noyau du pilote sont utilisés pour émettre une estimation de la tension d'alimentation et de la température du noyau du pilote. Avec son réseau flou, cela permet une estimation approximative de la puissance restante de la batterie disponible pour alimenter les LED lorsqu'il fait sombre.
Le patch du capteur de température est également alimenté par la sortie du capteur de tension d'alimentation pour obtenir une meilleure estimation - la détection de la température centrale nous permet d'obtenir une estimation approximative de la quantité d'énergie brûlée dans les LED, et combinée avec la lecture de la tension d'alimentation lorsque décharger la batterie une autre estimation approximative de la quantité d'énergie restante de la batterie. Il n'a pas besoin d'être super précis; si le noyau «sait» que les LED consomment beaucoup de courant mais que la tension de la batterie chute rapidement, il est probablement prudent de dire que l'alimentation de la batterie ne durera pas beaucoup plus longtemps et qu'il est temps d'éteindre la lampe.
Étape 6: Construction
J'ai construit le projet sur un petit morceau de carte de prototypage avec des patins en cuivre pour les pièces traversantes. L'utilisation de sockets pour les circuits intégrés aide beaucoup pour la programmation/modification/test; l'USBTiny ISP de Sparkfun a une prise similaire sur sa carte, donc la programmation des deux puces consiste simplement à brancher le programmeur sur un port USB du PC, à télécharger le code XOD transpilé à partir des fichiers Arduino.ino inclus avec les paramètres appropriés de la carte et du programmeur, et puis retirez délicatement les puces du support du programmeur et insérez-les dans les supports de la carte proto.
Le module convertisseur boost basé sur Pololu TPS6120 est livré sur une carte de montage soudée dans la carte proto sur des embases à broches, il est donc possible d'économiser de l'espace en montant certains composants en dessous. Sur mon prototype, j'ai mis les deux résistances pullup de 4,7k en dessous. Ceux-ci sont nécessaires pour que le bus i2c entre les puces fonctionne correctement - la communication ne fonctionnera pas correctement sans eux ! Sur le côté droit de la carte se trouve la prise d'entrée pour la prise du panneau solaire et le condensateur de stockage d'entrée. Il est préférable d'essayer de connecter la prise et ce capuchon directement ensemble via des "passes" de soudure, pas de fil de raccordement, pour obtenir un chemin de résistance aussi faible que possible. Des soudures solides sont ensuite utilisées pour connecter la borne positive du condensateur de stockage directement à la borne de tension d'entrée du module de suralimentation, et la broche de terre du module de suralimentation directement à la broche de terre de la prise.
À droite et à gauche des prises pour les deux ATTiny se trouvent des condensateurs de 0,1 uF anti-spike/deglitching. Ces composants sont également importants à ne pas laisser de côté et doivent être connectés aux broches d'alimentation et de terre du circuit intégré par un chemin aussi court et direct que possible. La résistance de détection de courant de 10 ohms est à gauche, elle est connectée en ligne avec la sortie du convertisseur boost et chaque côté est connecté à une broche d'entrée de noyau de capteur - ces broches sont configurées pour fonctionner comme un CAN différentiel pour mesurer indirectement le courant dans la batterie. Les connexions entre les broches IC pour le bus i2c et la broche d'arrêt du convertisseur boost, etc. peuvent être effectuées à l'aide d'un fil de raccordement sur la face inférieure de la carte proto, un fil de raccordement à noyau solide très fin fonctionne très bien pour cela. Cela facilite les changements et semble également beaucoup plus soigné que de faire passer des cavaliers entre les trous sur le dessus.
Le module LED que j'ai utilisé était une unité RVB tricolore, mon plan était d'avoir les trois LED actives pour produire du blanc lorsque la batterie était presque complètement chargée, et de faire disparaître lentement la LED bleue en jaune à mesure que la charge était épuisée. Mais cette fonctionnalité n'a pas encore été implémentée. Une seule LED blanche avec une résistance de limitation de courant fonctionnera également correctement.
Étape 7: Tests, partie 1
Après avoir programmé les deux circuits intégrés ATTiny avec les fichiers de croquis inclus via le programmeur USB à partir de l'environnement Arduino, il est utile de tester que les deux cœurs du prototype fonctionnent correctement avant d'essayer de charger la batterie du panneau solaire. Idéalement, cela nécessite un oscilloscope de base, un multimètre et une alimentation de banc.
La première chose à vérifier est qu'il n'y a aucun court-circuit sur la carte avant de brancher les circuits intégrés, la batterie et le panneau dans leurs prises pour éviter d'éventuels dommages ! La façon la plus simple de le faire est d'utiliser une alimentation de banc qui peut limiter son courant de sortie à une valeur sûre dans le cas de cette situation. J'ai utilisé mon alimentation de banc réglée à une limite de 3 volts et 100 mA connectée aux bornes de la prise d'entrée du panneau solaire aux fils d'alimentation positifs et négatifs. Avec rien d'autre que les composants passifs installés, il ne devrait y avoir pratiquement aucune consommation de courant enregistrée sur le moniteur de courant de l'alimentation à proprement parler. S'il y a un flux de courant important ou si l'alimentation passe en limitation de courant, quelque chose ne va pas et la carte doit être vérifiée pour s'assurer qu'il n'y a pas de connexions mal câblées ou de condensateurs à polarité inversée.
L'étape suivante consiste à s'assurer que le convertisseur boost fonctionne correctement. Il y a un potentiomètre à vis sur la carte, avec l'alimentation toujours connectée et quatre des broches du convertisseur connectées de manière appropriée, le potentiomètre doit être tourné avec une petite pointe de tournevis jusqu'à ce que la tension à la borne de sortie du module soit d'environ 3,8 à 3,9 volts. Cette valeur CC ne changera pas pendant le fonctionnement, le noyau du pilote contrôlera la tension de sortie moyenne en pulsant la broche d'arrêt du module.
Étape 8: Test, partie 2
La prochaine chose à vérifier est que la communication i2c fonctionne correctement, avec la carte fonctionnant hors de l'alimentation du banc, le circuit intégré du capteur peut être installé. Sur un oscilloscope, il devrait y avoir des signaux d'impulsion sur les broches 5 et 7 de la puce physique, ce pilote i2c sur la puce essayant d'envoyer des données à son copain. Après l'arrêt, le noyau du pilote peut être installé et la connexion vérifiée à nouveau avec un oscilloscope, il devrait y avoir une plus grande séquence d'impulsions visibles sur les deux lignes. Cela signifie que les puces communiquent correctement.
Il est utile d'avoir la batterie légèrement chargée pour le test final complet. L'alimentation de banc peut également être utilisée pour accomplir cela, avec la limite de courant fixée à environ 50 mA et la tension toujours à 3,8 volts, laissant la batterie LiPo connectée directement pendant quelques minutes.
La dernière étape consiste à tester le système complet - avec tout ce qui est connecté, si le panneau est couvert pendant dix ou 15 secondes, le voyant devrait s'allumer via la sortie PWM du noyau du pilote. Avec le panneau en plein soleil, la batterie doit se charger à partir de la sortie du convertisseur boost. Le réseau de logique floue peut être inspecté indirectement pour voir s'il fonctionne correctement en examinant la ligne PWM entraînant la broche d'arrêt du convertisseur élévateur; au fur et à mesure que l'éclairage augmente avec la batterie avec un faible état de charge, la largeur d'impulsion devrait augmenter, ce qui montre qu'au fur et à mesure que plus de puissance est disponible à partir de la lumière du soleil, le noyau du pilote signale que plus de puissance doit être envoyée dans la batterie !
Étape 9: Annexe sur la logique floue
La logique floue est une technique d'apprentissage automatique qui peut être utilisée dans le contrôle de systèmes matériels où il existe une incertitude dans de nombreux paramètres du système contrôlé, ce qui rend une entrée explicite à la solution de contrôle de sortie pour l'objectif difficile à écrire mathématiquement. Ceci est accompli en utilisant des valeurs logiques qui se situent quelque part entre 0 (faux) et 1 (vrai), exprimant l'incertitude dans une valeur plus semblable à la façon dont un humain le ferait (« plutôt vrai » ou « pas vraiment vrai ») et permettant une zone grise entre des affirmations 100 % vraies et 100 % fausses. Pour ce faire, il faut d'abord prélever des échantillons des variables d'entrée sur lesquelles une décision doit être fondée et les « flouter ».
Le cœur de tout système de logique floue est une « mémoire associative floue ». Cela rappelle une matrice, où dans le cas du circuit de charge de la batterie, un ensemble 3x3 de valeurs comprises entre 0 et 1 est stocké. Les valeurs de la matrice peuvent être grossièrement associées à la façon dont un humain raisonnerait sur ce que devrait être le facteur PWM contrôlant la broche SHTDN du convertisseur boost, en fonction de la manière dont la fonction d'appartenance ci-dessus qualifie un ensemble donné d'entrées. Par exemple, si la tension d'entrée du panneau est élevée, mais que le courant absorbé dans la batterie est faible, cela signifie probablement qu'une plus grande puissance peut être consommée et que le paramètre PWM n'est pas optimal et doit être augmenté. Inversement, si la tension du panneau baisse mais que le chargeur essaie toujours de pousser un courant important dans la batterie, il sera également gaspillé, il serait donc préférable de diminuer le signal PWM vers le convertisseur élévateur. Une fois que les signaux d'entrée sont « fuzzifiés » en un ensemble flou, ils sont multipliés par ces valeurs, de la même manière qu'un vecteur est multiplié par une matrice, pour générer un ensemble transformé qui est représentatif de l'importance de la « connaissance » contenue dans la cellule. de la matrice doit être pris en compte dans la fonction de combinaison finale.
Utilisation du nœud « non implémenté dans xod » qui permet aux nœuds XOD qui implémentent des fonctionnalités personnalisées trop compliquées pour être raisonnables à partir des blocs de construction d'origine, et un peu de C++ de style Arduino, la mémoire associative, la fonction de pondération et " fuzzifier" similaires aux blocs décrits dans cette référence: https://www.drdobbs.com/cpp/fuzzy-logic-in-c/184408940 sont simples à créer et beaucoup plus faciles à expérimenter.
Conseillé:
Lampe(s) LED alimentée par batterie avec charge solaire : 11 étapes (avec photos)
Lampe(s) LED à piles avec charge solaire : ma femme enseigne aux gens comment faire du savon, la plupart de ses cours avaient lieu le soir et ici en hiver, il fait noir vers 16h30, certains de ses étudiants avaient du mal à trouver notre loger. Nous avions un panneau devant mais même avec un éclairage de rue
Lampe à flamme super simple alimentée par batterie : 6 étapes (avec photos)
Lampe à flamme super simple alimentée par batterie : pendant de nombreuses heures de frénésie COVID-19 sur YouTube, je me suis inspiré d'un épisode de One Day Builds d'Adam Savage, en particulier celui où il construit un accessoire de lanterne à gaz pour son pousse-pousse maison. Au cœur de la construction se trouvait la conversion d'un
Machine à brouillard glacé ultime - Contrôlée par Bluetooth, alimentée par batterie et imprimée en 3D. : 22 étapes (avec photos)
Machine à brouillard à glace sèche ultime - Contrôlée par Bluetooth, alimentée par batterie et imprimée en 3D. : J'avais récemment besoin d'une machine à glace sèche pour des effets théâtraux pour un spectacle local. Notre budget ne s'étendrait pas à l'embauche d'un professionnel, c'est donc ce que j'ai construit à la place. Il est principalement imprimé en 3D, contrôlé à distance via Bluetooth, alimentation par batterie
Une magnifique lampe flash rechargeable avec haut-parleurs Bluetooth et recharge de téléphones portables : 4 étapes (avec photos)
Une magnifique lampe de poche rechargeable avec haut-parleurs Bluetooth et recharge de téléphones portables : Salut les amis, dans cette instructable, je parle d'une lampe de poche rechargeable équipée de haut-parleurs Bluetooth et de charge USB femelle pour le chargement de téléphone portable, c'est donc un appareil à multiples facettes qui est bon pour camper et se promener dans les parcs ou monter
La lampe CD LED alimentée par USB : 8 étapes (avec photos)
La lampe CD LED alimentée par USB : La lampe CD LED alimentée par USB est un gadget très utile. Il est alimenté par le port USB, vous n'avez donc pas besoin d'alimentation externe. Le fil de montage rigide que j'ai utilisé agit comme un col de cygne et vous permet de plier la source lumineuse dans différents angles et directions