Outils pour utilisateurs

Outils du site


issue181:micro-ci

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
issue181:micro-ci [2022/05/30 08:01] d52frissue181:micro-ci [2022/06/03 17:28] (Version actuelle) andre_domenech
Ligne 6: Ligne 6:
  
 Since there are 360 degrees in our circle and we have 24 LEDs, that would mean that each of our LEDs would represent 15 degrees. So if LED[0] represents North, East would then be LED[6], South would be LED[12] and West would be LED[18].** Since there are 360 degrees in our circle and we have 24 LEDs, that would mean that each of our LEDs would represent 15 degrees. So if LED[0] represents North, East would then be LED[6], South would be LED[12] and West would be LED[18].**
 +
 +Tout d'abord, permettez-moi de m'excuser de ne pas avoir fait un Micro-ci Micro-là le mois dernier. J'avais de très gros problèmes de vue et rédiger l'article « normal » sur Python était tout ce que je pouvais faire. Ce n'est pas beaucoup mieux en ce moment, surtout quand on essaie de câbler un circuit. Cependant, nous allons continuer à avancer du mieux que nous pouvons.
 +
 +Revenez deux mois en arrière, à la partie 13 (qui était dans le FCM n° 179). Nous utilisions le LSM 303 avec le Raspberry Pi Pico pour créer une boussole numérique. Le produit final consistait à obtenir une valeur entière normalisée qui nous donnait le nombre de degrés par rapport au Nord. Ainsi, si nous étions debout avec la plaque d'essai et le capteur pointant vers l'est, nous obtiendrions 90 comme cap.
 +
 +Ce mois-ci, nous allons utiliser un anneau NeoPixel de 24 pixels. 
 +
 +Comme il y a 360 degrés dans notre cercle et que nous avons 24 LEDs, cela signifie que chacune de nos LEDs représente 15 degrés. Ainsi, si la LED [0] représente le Nord, l'Est serait alors sur la LED [6], le Sud sur la LED [12] et l'Ouest sur la LED [18].
 +
  
 **The basic algorithm (in pseudo code) is something like shown above. **The basic algorithm (in pseudo code) is something like shown above.
Ligne 30: Ligne 39:
  
 brightness = 0.1** brightness = 0.1**
 +
 +L'algorithme de base (en pseudo-code) ressemble à celui présenté ci-dessus.
 +
 +Nous devrons ajouter l'anneau Neopixel à la plaque d'essai. N'oubliez pas que nous devrons également disposer d'un pack de 3 piles AA rechargeables pour alimenter l'anneau Neopixel. Remarquez que l'image montre l'utilisation d'un pack de 3 piles AAA, mais il s'agit en réalité d'un pack de 3 piles AA.
 +
 +Remarquez également qu'il y a une connexion de masse entre l'anneau Neopixel, la batterie et le RPi Pico.
 +
 +Ce mois-ci, nous allons créer un programme de test qui vérifiera la logique que nous utiliserons pour intégrer le cap du LSM303 à l'anneau NeoPixel.
 +
 +Bien sûr, nous devons commencer par les importations. Nous allons également créer certaines variables qui seront nécessaires pour l'anneau Neopixel.
 +
 +import array, time
 +
 +from machine import Pin
 +
 +import rp2
 + 
 +# Configurer le nombre de LEDs du WS2812, les broches et la luminosité.
 +
 +NUM_LEDS = 24
 +
 +PIN_NUM = 16
 +
 +brightness = 0.1
 +
  
 **Now we need to create the driver. We will embed this (right) into our program. **Now we need to create the driver. We will embed this (right) into our program.
Ligne 48: Ligne 82:
  
 Now (next page, top right) we can create a few support functions that we will need to make our life easier.** Now (next page, top right) we can create a few support functions that we will need to make our life easier.**
 +
 +Maintenant, nous devons créer le pilote. Nous allons l'intégrer (à droite) dans notre programme.
 +
 +Rappelez-vous que nous avons défini quel NeoPixel, et sa couleur, en utilisant la fonction pixels_set(), mais jusqu'à ce que la fonction pixels_show() soit appelée, la LED Neopixel ne s'allume pas en fait.
 +
 +Nous définissons maintenant quelques constantes qui fournissent les valeurs RVB pour certaines couleurs prédéfinies.
 +
 +BLACK = (0, 0, 0)
 +RED = (255, 0, 0)
 +YELLOW = (255, 150, 0)
 +GREEN = (0, 255, 0)
 +CYAN = (0, 255, 255)
 +
 +BLUE = (0, 0, 255)
 +PURPLE = (180, 0, 255)
 +WHITE = (255, 255, 255)
 +
 +Maintenant (page suivante, en haut à droite), nous pouvons créer quelques fonctions de soutien dont nous aurons besoin pour nous faciliter la vie.
 +
  
 **We will use the Red color to mark North (LED[0]) and Blue to mark East, South and West.  When we get to it, the color that marks the heading will be in Green (shown bottom left). **We will use the Red color to mark North (LED[0]) and Blue to mark East, South and West.  When we get to it, the color that marks the heading will be in Green (shown bottom left).
Ligne 56: Ligne 109:
  
 Now the real worker function is set_heading(). This function (shown middle right) embodies the logic from the pseudo code we created earlier.** Now the real worker function is set_heading(). This function (shown middle right) embodies the logic from the pseudo code we created earlier.**
 +
 +Nous utiliserons la couleur Rouge pour marquer le Nord (LED[0]) et le Bleu pour marquer l'Est, le Sud et l'Ouest. Lorsque nous y arriverons, la couleur qui marque le cap sera en Vert (montré en bas à gauche).
 +
 +La fonction turn_off_all() met simplement tous les pixels de l'anneau en NOIR (ou éteint).
 +
 +Nous avons placé les marqueurs (qui devraient rester allumés à moins que le cap ne soit l'une de ces directions) du Nord, du Sud, de l'Est et de l'Ouest dans une liste afin de pouvoir vérifier si nous nous trouvons sur une LED de marqueur. Le Nord mettra la LED[0] en rouge et les trois autres en bleu.
 +
 +Maintenant, la véritable fonction de travail est set_heading(). Cette fonction (illustrée au milieu à droite) incarne la logique du pseudo-code que nous avons créé plus tôt.
 +
  
 **Finally, we create the logic to control everything (shown bottom right). To simulate moving around in a circle, we use a for loop, stepping from 0 to 361, and pass that value into our set_heading() function to light the correct LED. Then we reverse the for loop to simulate moving in an anti-clockwise circle. **Finally, we create the logic to control everything (shown bottom right). To simulate moving around in a circle, we use a for loop, stepping from 0 to 361, and pass that value into our set_heading() function to light the correct LED. Then we reverse the for loop to simulate moving in an anti-clockwise circle.
Ligne 66: Ligne 128:
  
 Until next time, as always; stay safe, healthy, positive and creative!** Until next time, as always; stay safe, healthy, positive and creative!**
 +
 +Enfin, nous créons la logique pour tout contrôler (en bas à droite). Pour simuler un déplacement en cercle, nous utilisons une boucle for, allant de 0 à 361, et nous passons cette valeur dans notre fonction set_heading() pour allumer la bonne LED. Puis nous inversons la boucle for pour simuler un déplacement en cercle dans le sens inverse des aiguilles d'une montre.
 +
 +Enregistrez ce programme sous CompassDisplay1.py. Lorsque vous l'exécutez, vous devriez voir les quatre DEL de marquage, puis après un court délai, vous devriez voir la DEL verte marquant notre cap se déplacer autour de l'anneau puis revenir à 0 (la DEL rouge). C'est un peu bancal, mais cela fait l'affaire.
 +
 +Vous pouvez trouver le code du programme sur mon dépôt à https://github.com/gregwa1953/FCM-181_MicroThisMicroThat .
 +
 +La prochaine fois, nous ajouterons le code qui supporte le LSM303 pour finaliser notre projet.
 +
 +Jusqu'à la prochaine fois, comme toujours, restez en sécurité, en bonne santé, positif et créatif !
 +
issue181/micro-ci.1653890507.txt.gz · Dernière modification : 2022/05/30 08:01 de d52fr