Outils pour utilisateurs

Outils du site


issue139:great_cow_basic

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue139:great_cow_basic [2018/12/09 09:38] d52frissue139:great_cow_basic [2018/12/15 09:32] (Version actuelle) andre_domenech
Ligne 5: Ligne 5:
 Dans le FCM n° 138, j'ai montré comment acquérir des informations sur la luminosité ambiante avec une photo-résistance (LDR), comment la transmettre à un dispositif éloigné et comment paramétrer un minuteur de watchdog (surveillance temporelle - WDT) pour économiser l'énergie. Dans le FCM n° 138, j'ai montré comment acquérir des informations sur la luminosité ambiante avec une photo-résistance (LDR), comment la transmettre à un dispositif éloigné et comment paramétrer un minuteur de watchdog (surveillance temporelle - WDT) pour économiser l'énergie.
  
-Dans ce numéro, je vous montrerai comment coder des sous-routines du WDT pour rendre la réfection du code un peu plus facile et pour étendre l'émetteur avec un signal optique pour la transmission de données et la mesure du niveau de la batterie pour indiquer quand un changement de piles semble nécessaire. Ensuite, je montrerai un court programme pour ordinateur personnel pour la réception de la transmission, le filtrage de l'entrée et la sauvegarde des données intéressantes dans un fichier.+Dans ce numéro, je vous montrerai comment coder des sous-routines du WDT pour rendre la réfection du code un peu plus facile et pour compléter l'émetteur avec un signal optique pour la transmission de données et avec la mesure du niveau de la batterie pour indiquer quand un changement de piles semble nécessaire. Ensuite, je montrerai un court programme pour ordinateur personnel pour la réception de la transmission, le filtrage de l'entrée et la sauvegarde des données intéressantes dans un fichier.
  
 **Expanding the sleep time  **Expanding the sleep time 
Ligne 13: Ligne 13:
 Étendre la durée de veille Étendre la durée de veille
  
-Une transmission toutes les 8 secondes correspondrait à une grande quantité d'information. En chiffres : un jour fait environ 86 400 secondes ; si la transmission a lieu toutes les 8 secondes, il y aurait 10 800 transmissions par jour. Ceci serait largement trop : le niveau de la luminosité que nous mesurerons ne devrait pas changer trop souvent peut-être dans certaines situations nuageuses. Au final, nous aurions à manipuler beaucoup de valeurs redondantes.+Une transmission toutes les 8 secondes correspondrait à une grande quantité d'informations. En chiffres : un jour fait environ 86 400 secondes ; si la transmission a lieu toutes les 8 secondes, il y aurait 10 800 transmissions par jour. Ce serait largement trop : le niveau de la luminosité que nous mesurerons ne devrait pas changer trop souventpeut-être seulement dans certaines situations nuageuses. Au final, nous aurions à manipuler beaucoup trop de valeurs redondantes.
  
 **So it would be great to have the microcontroller sleep longer than this 8 seconds to minimize the data transfers and to save power. Due to the limitations of the WDT, this can be achieved only with a loop condition. For an overview, see this simplified diagram of the following software. At the very beginning of the program, we define a timeout variable; the device will wake up every 8 s, check if the timeout has occurred first. If not, it decreases the timeout by one and immediately goes to sleep again. This should only take a very little amount of power. The reading of the ADC, the measuring of the battery level, etc, will take place only after the timeout. To determine the timeout, just think of the time frame you want your transmitter to send data. One minute has around 8 wakeups of the device (8 x 8 s = 64 sec. roughly 1 minute). To save some program space, I suggest to stay in the range of a byte value (max. 255). Setting the timeout to 225 will give a time frame of 30 minutes. ** **So it would be great to have the microcontroller sleep longer than this 8 seconds to minimize the data transfers and to save power. Due to the limitations of the WDT, this can be achieved only with a loop condition. For an overview, see this simplified diagram of the following software. At the very beginning of the program, we define a timeout variable; the device will wake up every 8 s, check if the timeout has occurred first. If not, it decreases the timeout by one and immediately goes to sleep again. This should only take a very little amount of power. The reading of the ADC, the measuring of the battery level, etc, will take place only after the timeout. To determine the timeout, just think of the time frame you want your transmitter to send data. One minute has around 8 wakeups of the device (8 x 8 s = 64 sec. roughly 1 minute). To save some program space, I suggest to stay in the range of a byte value (max. 255). Setting the timeout to 225 will give a time frame of 30 minutes. **
  
-Aussi, il serait bien que le microcontrôleur reste en veille plus longtemps que 8 secondes pour réduire les transferts de données et économiser l'énergie. Du fait des limitations du WDT, ce ci ne peut être réalisé qu'avec une boucle conditionnelle. Pour un aperçu, voyez le diagramme simplifié du logiciel qui suit. Au tout début du programme, nous définissons une variable de butée de durée ; le dispositif se réveillera toutes les 8 secondesvérifiera si la butée de durée a agi en premier. Si non, il augmente la durée de la butée de 1 et retourne en veille immédiatement. Ceci ne devrait consommer que très peu d'énergie. La lecture de l'ADC (convertisseur analogique-numérique), la mesure du niveau de la batterie, etc.  n'aura lieu qu'après la butée de durée. Pour déterminer cette butée, pensez simplement à la fréquence à laquelle vous voulez transmettre des données. En minute, le dispositif va se réveiller 8 fois (8 x 8 s = 64 s, soit en gros 1 minute). Pour réduire un peu la taille du programme, je suggère de rester dans une taille de la valeur d'un octet (max. 255). Un réglage de la butée de temps à 255 nous donne une fréquence de 30 minutes. +Aussi, il serait bien que le microcontrôleur reste en veille plus longtemps que 8 secondes pour réduire les transferts de données et économiser l'énergie. Du fait des limitations du WDT, ceci ne peut être réalisé qu'avec une boucle conditionnelle. Pour un aperçu, voyez le diagramme simplifié du logiciel qui suit. Au tout début du programme, nous définissons une variable de butée de durée ; le dispositif se réveillera toutes les 8 secondes et vérifiera si la butée de durée a agi en premier. Sinon, il augmente la durée de la butée de 1 et retourne en veille immédiatement. Ceci ne devrait consommer que très peu d'énergie. La lecture de l'ADC (convertisseur analogique-numérique), la mesure du niveau de la batterie, etc.n'aura lieu qu'après la butée de durée. Pour déterminer cette butée, pensez simplement à la fréquence à laquelle vous voulez transmettre des données. En une minute, le dispositif va se réveiller 8 fois (8 x 8 s = 64 s, soit en gros 1 minute). Pour réduire un peu la taille du programme, je suggère de rester dans une taille de la valeur d'un octet (max. 255). Un réglage de la butée de temps à 255 nous donne une fréquence de 30 minutes. 
  
  
Ligne 30: Ligne 30:
 Mesure du niveau de la batterie Mesure du niveau de la batterie
  
-Le ATtiny13a peut mesurer sa propre tension de batterie via l'ADC et diviseur de tension. Malheureusement, le ATtiny13a a besoin de deux picots pour le faire. Voyez la Ref. 1 pour une explication de détail et les alternatives au ATtiny13a qui ont la possibilité de mesurer leur propre alimentation par comparaison avec leur référence interne à intervalle de bande. Ceci économisera quelques composants et picots. Pour cette application, il y a quelques picots non utilisés ; donc, pas de raison d'économiser du mauvais côté. Comme le transfert des valeurs de la LDR et de la batterie nous coûte de l'espace programme du fait de la conversion de valeurs en mots en valeurs en chaînes, nous devons éviter la plus de conversion que possible. La solution de ceci est d'imprimer les lecture de la LDR et de la batterie directement dans la ligne série. De plus, nous envoyons les signes « # » et « ; » sous forme de valeur ASCII en octets pour la même raison. Néanmoins, le code de l'émetteur occupe la plupart de la mémoire programme du microcontrôleur.+Le ATtiny13a peut mesurer sa propre tension de batterie via l'ADC et un diviseur de tension. Malheureusement, le ATtiny13a a besoin de deux picots pour le faire. Voyez la Ref. 1 pour une explication de détail et les alternatives au ATtiny13a qui ont la possibilité de mesurer leur propre alimentation par comparaison avec leur référence interne à intervalle de bande. Ceci économisera quelques composants et picots. Pour cette application, il y a quelques picots non utilisés ; aussi, pas de raison d'économiser du mauvais côté. Comme le transfert des valeurs de la LDR et de la batterie nous coûte de l'espace programme du fait de la conversion des valeurs en motsen valeursen chaînes, nous devons éviter le plus possible les conversions. La solution est d'imprimer les lectures de la LDR et de la batterie directement dans la ligne série. De plus, nous envoyons les signes « # » et « ; » sous forme de valeur ASCII en octets pour la même raison. Néanmoins, le code de l'émetteur occupe la plupart de la mémoire programme du microcontrôleur.
  
 **Data logging and evaluation **Data logging and evaluation
Ligne 38: Ligne 38:
 Enregistrement des données et évaluation Enregistrement des données et évaluation
  
-Pour savoir quand arrive un certain niveau de luminosité, les données doivent inclure un vrai horodatage pour une analyse ultérieure. Pour économiser un peu d'espace sur le disque dur, nous lisons les données depuis la signe série et éliminons les données sans intérêt ou fausses. Peut-être avez-vous encore intacte l'installation de FreeBasic du n° 127 ; dans ce cas, vous pouvez compiler vous-même ce qui suit. Autrement, prenez ceci omme une idée à implémenter dans le langage de programmation de votre choix.+Pour savoir quand arrive un certain niveau de luminosité, les données doivent inclure un vrai horodatage pour une analyse ultérieure. Pour économiser un peu d'espace sur le disque dur, nous lisons les données depuis la ligne série et éliminons les données sans intérêt ou fausses. Peut-être avez-vous encore intacte l'installation de FreeBasic du n° 127 ; dans ce cas, vous pouvez compiler vous-même ce qui suit. Autrement, prenez ceci comme une idée à implémenter dans le langage de programmation de votre choix.
  
 **Sample results in the serialdata.raw file; shows timestamp, LDR value (brightness), and Battery voltage (Vcc). Note that we have sets of three lines with the same (or similar) timestamps, and then 8-second gaps between sets. **Sample results in the serialdata.raw file; shows timestamp, LDR value (brightness), and Battery voltage (Vcc). Note that we have sets of three lines with the same (or similar) timestamps, and then 8-second gaps between sets.
Ligne 51: Ligne 51:
 13.11.2018, 22:41:11;23;428** 13.11.2018, 22:41:11;23;428**
  
-Des échantillons de résultats sont dans le fichier serialdata.raw ; il montre les horodatages, la valeur de la LDR (luminosité), et de la tension de la batterie (Vcc). Notez que nous avons des ensembles de trois lignes avec des horodatages identiques (ou voisins), et des intervalles de 8 secondes entre.+Des échantillons de résultats sont dans le fichier serialdata.raw ; il montre les horodatages, la valeur de la LDR (luminosité), et de la tension de la batterie (Vcc). Notez que nous avons des ensembles de trois lignes avec des horodatages identiques (ou voisins), et des intervalles de 8 secondes.
  
-(Vcc, ou plutôt l'ADC, était flottant ici, le circuit n'était pas terminé) --+(Le Vcc, ou plutôt l'ADC, était flottant ici, le circuit n'était pas terminé) :
  
 13.11.2018, 22:40:55;26;438 13.11.2018, 22:40:55;26;438
Ligne 70: Ligne 70:
 Circuit d'essai Circuit d'essai
  
-(Voir en bas de la page précédente)+(Voir en bas de la page précédente.)
  
 Conclusion Conclusion
  
-Le programme d'émission prend 928 octets et donc la mémoire programme du ATtiny13a est pratiquement pleine ; mais, c'est un bon point de départ pour vos propres essais remplacez peut-être la LDR pour la mesure de la température par une thermistance à coefficient de température négatif, en bref, une NTC.  Ou, si la code peut être réduit, vous pourriez essayer un capteur d'humidité et de température, tels que les GHT11 ou DHT22. Alors que j'arrive à la fin de cet article, je n'ai pas encore emmagasiné une journée complète de données mais je la publierai bientôt sur de dépôt de github. Pour cet ensemble d'articles et le projet finalnous y sommes presque - dans le prochain numéro, nous allons faire un lien entre les éléments épars et voir comment nous pouvons grouper la conversion analogique-numérique, la modulation à largeur d'impulsions et la minuterie du watchdog  pour former la bougie à LED vacillante du dernier cri. Fortuitement, elle tombe à pic.+Le programme d'émission prend 928 octets et donc la mémoire programme du ATtiny13a est pratiquement pleine ; mais, c'est un bon point de départ pour vos propres essais remplacez peut-être la LDR pour la mesure de la température par une thermistance à coefficient de température négatif, en bref, une NTC.  Ou, si le code peut être réduit, vous pourriez essayer un capteur d'humidité et de température, tels que les DHT11 ou DHT22. Alors que j'arrive à la fin de cet article, je n'ai pas encore emmagasiné une journée complète de donnéesmais je la publierai bientôt sur le dépôt de github. Pour cet ensemble d'articles et le projet final nous y sommes presque - dans le prochain numéro, nous allons régler les choses en suspens et voir comment nous pouvons grouper la conversion analogique-numérique, la modulation à largeur d'impulsions et la minuterie du watchdog pour former la bougie à LED vacillante du dernier cri. Fortuitement, elle tombe à la bonne période.
  
 **Sources **Sources
Ligne 82: Ligne 82:
 Sources Sources
  
-Si vous préférez télécharger les sources plutôt que les copier/coller, vous pouvez le faire avec git ou un client SVN. Voyez goo.gl/aDvggr  pour plus d'informations.+Si vous préférez télécharger les sources plutôt que les copier/coller, vous pouvez le faire avec git ou un client SVN. Voyez https://github.com/Anobium/Great-Cow-BASIC-Demonstration-Sources pour plus d'informations. 
  
  
Ligne 91: Ligne 92:
 Références Références
  
-Micro-composant AVR AN2447 : Mesure du Vcc ou le la batterie http://ww1.microchip.com/downloads/en/AppNotes/00002447A.pdf+Micro-composant AVR AN2447 : Mesure du Vcc ou de la batterie http://ww1.microchip.com/downloads/en/AppNotes/00002447A.pdf
  
 **Acknowledgement **Acknowledgement
issue139/great_cow_basic.1544344708.txt.gz · Dernière modification : 2018/12/09 09:38 de d52fr