Bonsoir à tous,
Je suis en train de réaliser un projet à base de raspberry pi 3 et d’une carte Stepper Motor HAT, qui permet d’ajouter jusqu’à 4 moteurs à courant continu et 4 servo. (descriptif en PJ)
Pour faire fonctionner ce petit monde j’utilise Domoticz. Un logiciel de domotique qui gère l’activation des scripts python selon l’activation de capteur et ça marche très bien.
MAIS, j’ai un problème pour faire fonctionner mon moteur CC et les servos en même temps.
Je ne peux pas exécuter le script moteur et servo en même temps, car lors de l’exécution il réinitialise l’adresse I2C, ce qui a pour conséquence de couper le script en cours.
Ce qu’il fraudrait c’est d’exécuter un script en arr!ère plan qui serait toujours actif avec les différentes commandes du servo et du moteur, et un autre script qui viendrait dire au script actif,
lance la partie moteur et ou servo.
Voici le script test qui intègre la bibliothèque du moteur et du servo qui permet de lancer les deux en même temps sans coupure.
Est-il possible de faire ce genre de chose en faisant appelle aux variables ou à d’autre fonctions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 #!/usr/bin/python from Raspi_MotorHAT import Raspi_MotorHAT, Raspi_DCMotor from Raspi_PWM_Servo_Driver import PWM import time # create a default object, no changes to I2C address or frequency mh = Raspi_MotorHAT(addr=0x6f) pwm = PWM(0x6f) servoMin = 150 # Min pulse length out of 4096 servoMax = 600 # Max pulse length out of 4096 def setServoPulse(channel, pulse): pulseLength = 1000000 # 1,000,000 us per second pulseLength /= 60 # 60 Hz print "%d us per period" % pulseLength pulseLength /= 4096 # 12 bits of resolution print "%d us per bit" % pulseLength pulse *= 1000 pulse /= pulseLength pwm.setPWM(channel, 0, pulse) pwm.setPWMFreq(60) # Set frequency to 60 Hz while (True): # Change speed of continuous servo on channel O pwm.setPWM(0, 0, servoMin) time.sleep(1) pwm.setPWM(0, 0, servoMax) time.sleep(1) ################################# DC motor test! myMotor = mh.getMotor(3) #Initialise le moteur en marche avant myMotor.run(Raspi_MotorHAT.FORWARD); #Demarre le moteur a la vitesse 70 a 255 if (True): for i in range(70,255): myMotor.setSpeed(i) time.sleep(0.02)
Votre aide me serait d’un grand secours.
Si vous avez besoin de plus de précision n’hésitez pas.
En vous remerciant par avance et espérant trouver une solution à mon problème.
Bonne soirée.
Partager