Réparation d’une carte d’un four Brandt suite à un problème d’alimentation.
Composants à changer :
- Condensateur 10µF-400V – 105°C
- Condensateur 10µF-25V – 105°C
- DIP P1014P10 : contrôleur de l’alimentation SMPS (Switched-Mode Power Supply))
Un exemple d’utilisation d’un encodeur magnétique de référence AS5048 avec la carte Raspberry Pi Pico.
L’encodeur est relié en SPI au Pico via les pins :
[code language=”python”]
#include <SimpleFOC.h>
#include <SPI.h>
#define SPI_MISO 4
#define SPI_MOSI 3
#define SPI_SCK 6
#define SPI_CS 5
MagneticSensorSPI sensor = MagneticSensorSPI(SPI_CS, 14, 0x3FFF);
void setup()
{
SPI.setCS(SPI_CS);
SPI.setSCK(SPI_SCK);
SPI.setRX(SPI_MISO);
SPI.setTX(SPI_MOSI);
SPI.begin();
// initialise magnetic sensor hardware
sensor.init();
}
void loop()
{
sensor.update();
// display the angle and the angular velocity to the terminal
Serial.print(sensor.getAngle());
Serial.print("\t");
Serial.println(sensor.getVelocity());
delay(1000);
}
[/code]
FIN !
Ce tutoriel a pour objectif d’apprendre la programmation en langage microPython en utilisant la carte Raspberry Pi Pico. Cette carte est équipé d’un microcontrôleur RP2040. Le langage microPython est le portage du langage Python adapté aux microcontrôleurs.
Voici le pinout de la carte Pico :
Voici l’architecture du microcontrôleur RP2040 :
Voir la page : thonny.org
Un premier exemple très simple d’affichage de texte avec la fonction print() :
Un exemple de programmer pour allumer une led.
Vous pouvez essayer de taper ces lignes de code dans le shell :
Un exemple très simple de programme pour allumer une led :
[code language=”python”]
from machine import Pin
led = Pin(2, Pin.OUT) # configuration de la pin 2 en sortie
led.value(1) # mise à l’état haut de la pin 2, la led s’allume !
[/code]
Un exemple simple de programme pour allumer une led pendant 2 secondes et ensuite l’éteindre :
[code language=”python”]
from machine import Pin
import time
led = Pin(2, Pin.OUT) # configuration de la pin 2 en sortie
while True: # boucle infini
led.value(1)
time.sleep(2) # pause de 2 secondes
led.value(0)
time.sleep(1) # pause de 1 seconde
[/code]
Un autre exemple avec l’utilisation de la fonction toggle():
[code language=”python”]
from machine import Pin
import time
led = Pin(2, Pin.OUT)
while True:
led.toggle()
time.sleep(2)
[/code]
Utilisation de la fonction print() pour afficher du texte dans le shell :
[code language=”python”]
from machine import Pin
import time
print("Hello Raspberry Pi Pico ! ")
[/code]
Le résultat dans le shell :
Un exemple pour lire le manière continue l’état d’un bouton poussoir connecter sur la pin 3 de la carte Raspberry Pi Pico :
[code language=”python”]
from machine import Pin, ADC, PWM
import time
bouton = Pin(3, Pin.IN, Pin.PULL_UP) # configuration pin 3 en entrée
while True:
valeur = bouton.value() #Lecture de l’état du bouton
print(valeur)
time.sleep(1)
[/code]
Résultat sur le shell de l’appuie sur le bouton poussoir, passage de l’état haut à l’état bas :
Un autre exemple pour gérer l’allumage de la led avec le bouton :
[code language=”python”]
from machine import Pin, ADC, PWM
import time
led = Pin(2, Pin.OUT)
bouton = Pin(3, Pin.IN, Pin.PULL_UP)
while True:
valeur = bouton.value()
if valeur == 1:
led.value(1)
print("Bouton OFF")
else:
print("Bouton ON")
led.value(0)
time.sleep(0.5)
[/code]
Un exemple pour lire une entrée analogique :
[code language=”python”]
from machine import Pin, ADC
import time
adc = ADC(Pin(26)) # configuration pin 26 en entrée analogique
while 1:
print("Valeur adc = ", adc.read_u16())
time.sleep(0.2)
[/code]
Le résultat de la lecture de l’entrée analogique avec le Plotter :
Un exemple très simple d’écriture dans un fichier :
[code language=”python”]
import time
file = open("test.txt", "w") # Ouverture du fichier texte.txt en mode ecriture
file.write("Ecriture dans le fichier") # ecriture dans le fichier
file.close() # fermeture du fichier
[/code]
Écriture en boucle d’une variable :
[code language=”python”]
import time
file = open("test.txt", "w")
compteur = 0
while compteur < 10:
file.write("Bonjour, compteur = ")
file.write(str(compteur) + "\n")
print(compteur)
compteur+=1
file.close()
[/code]
C’est quoi un signal PWM ?
Un exemple sur la pin 4, d’un signal PWM. Ce signal PWM permet par exemple de contrôler l’intensité lumineuse d’une led ou encore la commande en vitesse d’un moteur à courant continu.
[code language=”python”]
from machine import Pin, ADC, PWM
import time
signal = Pin(4, mode=Pin.OUT)
signal = PWM(Pin(4))
signal.freq(500) # fréquence de 500 Hz
signal.duty_u16(32000) # rapport cyclique
[/code]
Un autre exemple de génération d’un signal PWM :
[code language=”python”]
from machine import Pin, ADC, PWM
import time
signal = Pin(4, mode=Pin.OUT)
signal = PWM(Pin(4))
signal.freq(500)
for rapport in range(0,65_536):
signal.duty_u16(rapport)
print(rapport)
time.sleep(0.001)
[/code]
Maintenant, passons au contrôle d’un servomoteur en microPython.
Connexion du servomoteur :
Un exemple de programme pour le contrôle d’un servomoteur :
[code language=”python”]
from machine import Pin, PWM
import time
servo = Pin(4, mode=Pin.OUT)
servo = PWM(Pin(4))
servo.freq(50)
while True:
servo.duty_u16(2314)
time.sleep(2)
servo.duty_u16(7600)
time.sleep(2)
[/code]
Un exemple d’utilisation d’un timer pour faire clignoter la led interne de la carte Raspberry Pi PICO toutes les secondes :
[code language=”python”]
from machine import Pin, Timer
led = Pin("LED", Pin.OUT)
timer_led = Timer()
def mon_timer_led(timer):
global led
led.toggle()
timer_led.init(freq=1, mode=Timer.PERIODIC, callback=mon_timer_led)
[/code]
Un exemple de programme pour gérer l’appui d’un bouton poussoir avec une interruption matérielle (IRQ). Une interruption matérielle est déclenchée par une entrée (GPIO) du microcontrôleur. Dans cet exemple, l’entrée 3 est configurée en interruption.
[code language=”python”]
from machine import Pin
import time
def mon_interruption(pin):
print("Bouton ON")
bouton = Pin(3, Pin.IN, Pin.PULL_UP) # configuration du bouton sur l’entée 3
bouton.irq(trigger=Pin.IRQ_FALLING,handler=mon_interruption)
# boucle infini
while True:
print("Boucle infini, attendre …") # attendre l’appuie sur le bouton
time.sleep(1)
[/code]
Le microcontrôleur RP2040 possédé 2 cœurs de processeur (ARM Cortex M0+) de 133 Mhz:
[code language=”python”]
from time import sleep
import _thread
def core0_thread():
compteur= 0
while True:
print("Hello, Je suis le core0 : ", compteur)
compteur+= 1
sleep(1)
def core1_thread():
compteur= 1
while True:
print("Hello, Je suis le core1 : ", compteur)
compteur+= 1
sleep(3)
thread_core1 = _thread.start_new_thread(core1_thread, ())
core0_thread()
[/code]
Fin du Tuto !
Un programme simple en microPython pour faire avancer, reculer et tourner le robot MR-Pico :
import time import robot # avancer le robot avec une vitesse de 20% robot.forward(20) time.sleep(2) # reculer le robot avec une vitesse de 30% robot.back(30) time.sleep(3) # tourner à droite avec une vitesse de 30% robot.turnRight(30) time.sleep(4) # tourner à droite avec une vitesse de 30% robot.turnLeft(30) # avancer le robot avec une vitesse de 50% robot.forward(50)
Un autre exemple, pour faire avancer le robot de 150 mm puis de 100 mm en ligne droite :
import time import robot robot.forwardmm(150,20) # avancer de 150 mm avec une vitesse de 20% time.sleep(2) robot.forwardmm(100,25) # avancer de 100 mm avec une vitesse de 25%
Maintenant dans l’autre sens, un autre exemple pour faire reculer le robot :
import time import robot robot.forwardmm(-300,20) # reculer le 300 mm
Exemple, pour faire tourner le robot de 90° vers la droite :
import time import robot robot.forwardmm(150,20) # Avancer de 150 mm time.sleep(2) robot.turnAngle(90,25) # Tourner à droite de 90° time.sleep(2) robot.turnAngle(-90,25) # Tourner à gauche de 90°
Exemple d’un programme en langage C/C++ d’ une minuterie répétitive appelée à plusieurs reprises à l’intervalle spécifié en millisecondes :
#include <stdio.h> #include "pico/stdlib.h" static uint compteur = 0; // Interruption bool repeating_timer_callback(struct repeating_timer *t) { printf("Compteur IRQ timer %d\n", compteur); compteur = compteur + 1; return true; }// Fin interruption int main() { struct repeating_timer timer; stdio_init_all(); // ajouter minuterie toute les 2000 microsecondes add_repeating_timer_ms(2000, repeating_timer_callback, NULL, &timer); // boucle infini while(1) { printf("wait irq ...\n"); sleep_ms(1000);// attendre 1 seconde } return 0; }
Résultat sous Putty :