Contrôler sa voiture GO par ordinateur

Pour faire des tests concernant les performances des voitures, j’ai cherché le moyen de contrôler une voiture par ordinateur. Après un premier montage qui s’est mal terminé (le petit ordinateur n’a pas survécu, que ses transistors reposent en paix). J’ai trouvé le solution grâce à un autre fan de circuit routier, PiSlot qui propose tout cela sur son site http://pislot.net . L’avantage de la solution proposée par Pislot est que la partie électrique du circuit est totalement isolée de la partie ordinateur.

Notre objectif est donc de contrôler la vitesse de la voiture à partir de l’ordinateur. Nous contrôlerons la voiture avec le déplacement d’un curseur à l’écran.

Voyons comment cela fonctionne pour faire varier la vitesse. On utilise la fonction PWM du Raspberry. Le principe est de faire un signal carré, avec 0V au niveau bas et 12V au niveau haut. Il suffit de faire varier le rapport niveau haut, niveau bas de 0% à 100% d’un temps donné. On définit le nombre de variations en hertz. Ainsi pour 50Hz, on aura 50 fois niveau haut et niveau bas. Le nombre de 0 à 100 envoyé comme paramètre PWM correspond donc à la puissance moteur.

L’interface :

Note : pour éviter les sorties de route lors des tests, la vitesse maximum a été limité à 40%.

Le matériel :

  • Rapberry Pi 3B+ (ou Raspberry Pi Zero WH)
  • Nappe et plaque d’expérimentations
  • 4N33
  • TIP122 TO-220
  • Résistance 220 ohms
  • Résistance 10k ohms
  • Diode 1N4007
  • Alimentation 12V

Le Schéma :

Shéma : pislot.net

Scripte Python 3 :

import RPi.GPIO as GPIO
from math import *
from tkinter import *
from tkinter.messagebox import *
from tkinter import ttk
import tkinter as tk
#import bme280

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
piste_1_pin_pwm = 37  # PIN 37

GPIO.setup(piste_1_pin_pwm, GPIO.OUT)  # pin configurée en sortie
pwm1 = GPIO.PWM(piste_1_pin_pwm, 50)  # pwm à une fréquence de 50 Hz
rapport = 0       # rapport cyclique initial de 0%
pwm1.start(rapport) 

def change_power(f):
    #y=int(echelle.get())
    y=int(f)
    pwm1.ChangeDutyCycle(y)
    print (f)

## Interface Graphique
## -------------------
fenetre = Tk()

fenetre.minsize(width=400, height=200)
fenetre.maxsize(width=400, height=200)
fenetre.wm_title("Slot Python Control Speed - V01 ")

p = PanedWindow(fenetre, orient=HORIZONTAL)
p.pack(side=TOP, expand=Y, fill=BOTH, pady=2, padx=2)
Frame1 = Frame(p, borderwidth=2, relief=GROOVE,width=300)
Frame1.pack(side=LEFT, padx=2, pady=2)
Frame_tortue = Frame(p, borderwidth=2, relief=GROOVE,width=650)
Frame_tortue.pack(side=LEFT, padx=2, pady=2)

p.add(Frame1)
p.pack()

nb = ttk.Notebook(Frame1)
onglet1 = ttk.Frame(nb)
nb.add(onglet1, text='Commandes')
nb.pack(expand=1, fill="both")
lignes_droites = LabelFrame(onglet1, text="Controle", padx=2, pady=2,height=30)
lignes_droites.pack(fill="both", expand="yes")
pa = PanedWindow(lignes_droites, orient=HORIZONTAL)
pa.pack(side=TOP, expand=Y, fill=BOTH, pady=1, padx=1)

echelle=Scale(onglet1, orient='horizontal', from_=0, to=40,
      resolution=1, tickinterval=20, length=350,
      label='Voiture 1', command=change_power)
pa.add(echelle)
fenetre.mainloop()

Le résultat est identique à la vidéo suivante, la différence étant simplement que le curseur est sur l’écran du Raspberry sur un programme Python, alors que dans la vidéo, c’est une page Internet.

Voilà nous contrôlons la vitesse de la voiture par l’intermédiaire d’un ordinateur, on peut maintenant imaginer beaucoup dérivés.