Contrôle moteur DC rpi

Bonjour je voudrai commander des moteurs DC avec une rpi de façon à ce que quand mon joystick est vers le haut les moteurs tournent pour faire avancer mon petit bateau
http://electroniqueamateur.blogspot.com/2014/09/controler-un-moteur-dc-en-python-avec.html
Pour l’instant j’ai trouvé ce genre de choses, je suis encore nouveau sur rpi mais j’arrive un peu à comprendre ce qui est écris, je vois comment faire tourner les moteurs mais ce n’est que pour pas longtemps. Je voudrai que les moteurs tournent tant que le joystick est dans sa position.
(C’est pour un projet scolaire, je précise car certains s’énervent en l’apprenant plus tard…)

Bonjour,

Il faut déjà récupérer la position du joystick. En suite appliquer une fonction de transformation du signal du joystick pour le tensformer en pwm1.

A+

Ok merci je vais essayer qq chose j’envoie le code dès que je le fait pour confirmation

Dans la logique, disons plutôt qu’un projet scolaire est une étape (importante) d’apprentissage qui nécessite d’une part un travail personnel de la part de l’étudiant et une pédagogie adapté. C’est donc bien de le dire avant.

Ce n’est pas aussi simple que ça :slight_smile:

Le propos de @Alynx me convient.
Sous d’autres termes, c’est comme la différence entre le client qui demande à un électricien de lui coller une prise électrique et une prise réseau dans la pièce du fond et le « jeune » en apprentissage qui demande à son maître de stage de lui apprendre à tirer et raccorder ces 2 types de câbles.
En gros,
Si tu es client, je t’explique succinctement et fais le job.
Si tu es en apprentissage, je te laisse chercher puis te montre puis te laisse faire puis le fais avec toi.
(je ne suis pas électricien, mais je tire mes câbles élec et réseau moi-même qd c’est de ma compétence :wink: )

import RPI.GPIO as GPIO
import time
import spidev
import os

GPIO.setmode(GPIO.BCM)

MS1 = ("PIN") ## Première sortie du moteur
MS2 = ("PIN") ## Deuxième sortie du moteur
ME = ("PIN")  ## enable du moteur
vrx_channel = 1
vry_channel = 2

GPIO.setup(MS1,GPIO.out)
GPIO.setup(MS2,GPIO.out)
GPIO.setup(ME,GPIO.out)

def readChannel(channel):
	val = spi.xfer2([1,(8+channel)<<4,0])
	data = ((val[1]&3) << 8) + val[2]
	return data


pwm = GPIO.PWM(ME,50)  ## fréquence à 50Hz
pwm.start(100)  ##rapport cyclique à 100%

while true:
	vrx_pos = readChannel(vrx_channel)
	vry_pos = readChannel(vry_channel)

if vry_pos > 650:
	GPIO.output(MS1,true)
	GPIO.output(MS2,false)
	GPIO.output(ME,true)

ifelse vry_pos < 350:
GPIO.output(MS1,false)
GPIO.output(MS2,true)
GPIO.output(ME,true)

GPIO.cleanup

time.sleep(0.5)

J’ai ça comme code pour l’instant (c’est un exemple) est-ce que ce code me permettrai de faire tourner mon moteur en ayant le joystick vers le haut? et tourner dans l’autre sens si le joystick est vers le bas?
https://tutorials-raspberrypi.com/raspberry-pi-joystick-with-mcp3008/
https://gist.githubusercontent.com/ypelletier/67ea06d002fd7d0bc042/raw/8497e0b2f362249a0a550cf9618253a5a07c1914/moteur_un.py
Je me suis servi de ces codes pour modèle et pouvez vous m’expliquer la partie « def readChannel… » svp je n’ai pas tout bien compris.

EDIT: j’ai un problème avec la mise en forme du code dsl j’espère que c’est lisible

Je ne peux que dégrossir, car pas spécialiste.

l’instruction « def fonction(variable): » permet de définir une fonction qui peut être réutilisée par le programme (un sous-programme, en fait)

le SPI est un bus de communication dont les Raspberry sont dotés.
« readchannel » avec un petit coup d’anglais, tu devines le but de cette fonction :wink:

Merci :sweat_smile: je demandais surtout ce qu’il y avait à l’intérieur de la fonction (et si le code semble bon aussi) x)

c’est là que s’arrêtent mes modestes compétences… :yum:

Ok merci quand même x)
Quelqu’un saurai me dire si mon code est bon svp.

SVP j’ai vraiment besoin de quelq’un qui pourrai vérifier le code que j’ai fait et me dire si il y a des erreurs je suis pas vraiment sûr qu’il est bon et je peux pas encore le tester

Bonjour,

MS1, MS2 et ME ne sont pas initialisé avec des numéro de port GPIO, il faut mettre les numéros des ports (GPIO.BCM) sur lesquels sont branchés les fils.

que donne le code si il est lancé dans un terminal ?
En cas de plantage, ajouter une ligne « print » pour visualiser ce qui se passe.

Par exemple pour la fonction readChannel

def readChannel(channel):
	val = spi.xfer2([1,(8+channel)<<4,0])
        print "val = %s" % (val)
	data = ((val[1]&3) << 8) + val[2]
        print "data = %s" % (data)
	return data

Bonne bidouilles

A+

oui c’est normal je vais les mettre après car je ne peux pas les tester x)
merci de la réponse quand même si il n’a que ça c’est que le programme devrai aller :slight_smile: