[PYTHON] [Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi

introduction

J'ai acheté une tarte aux râpes en pensant que je pourrais trouver un nouveau passe-temps que je peux pratiquer à l'intérieur pendant le verrouillage. Je pensais que si je pouvais contrôler le moteur, ce serait utile dans des expériences plus tard, alors j'ai acheté un moteur pas à pas ensemble, donc je vais essayer de le contrôler. Il est intéressant de le faire tourner à une vitesse constante, mais je voulais pouvoir faire n'importe quel exercice. Connaissance des circuits électriques et électroniques Je suis parti de presque zéro, mais je pouvais facilement le faire car il y avait beaucoup d'informations sur le net. J'apprécie vraiment cela. Il semble que cela puisse être contrôlé de différentes manières, mais j'aimerais vous présenter la méthode que j'ai trouvée la plus simple.

Matériel

Vous trouverez ci-dessous une liste du matériel utilisé.

Rotation à vitesse constante

Le premier est la rotation de base à vitesse constante. Utilisez RpiMotorLib, A Raspberry pi python motor library sur GitHub. Il semble que vous puissiez contrôler non seulement les moteurs pas à pas, mais également les moteurs à courant continu et les servomoteurs. Vous pouvez l'installer depuis le terminal avec sudo pip install rpimotorlib. Après avoir installé la bibliothèque, connectez-la selon Tutoriel très poli, et copiez et collez simplement le code pour faire tourner le moteur. Je vais. J'ai câblé comme suit (désolé pour le dessin approximatif dessiné à la main). La résolution de l'image est médiocre et difficile à voir, mais le câblage est comme indiqué dans le tableau ci-dessous.

GPIO Raspeye chauffeur moteur
17 IN1 -
18 IN2 -
27 IN3 -
22 IN4 -
- OUT1 A-
- OUT2 B-
- OUT3 A+
- OUT4 B+

La fonction principale est motor_run (GpioPins, wait, steps, ccwise, verbose, steptype, initdelay). L'explication de chaque argument est la suivante.

Par exemple, si vous souhaitez faire pivoter 5 Hz dans le sens antihoraire avec une vitesse de rotation de 0,5 Hz en mode demi-pas, le code est le suivant. C'est très simple.

python


import time 
import RPi.GPIO as GPIO
from RpiMotorLib import RpiMotorLib  
    
GpioPins = [17, 18, 27, 22]  #Broche GPIO. IN1 de la gauche, IN2, IN3,Broche pour se connecter à IN4.

f = 0.5  #Vitesse rotationnelle[Hz]
Rev = 5  #Faire pivoter 5 fois
s_angle = 1.8  #Angle de pas[deg]
wait = (1/f)*(s_angle/360)/2  #Temps entre les impulsions. Moitié-Divisez par 2 pour le mode pas à pas

#Donnez le nom au moteur et précisez le type de moteur (Nema ou 28BYJ).
mymotortest = RpiMotorLib.BYJMotor('MyMotorOne', 'Nema') 

#Principale. Les arguments sont la broche GPIO, l'attente, le nombre de pas, la rotation inverse, le mode détaillé, le mode pas à pas, le premier délai à partir de la gauche[ms]
mymotortest.motor_run(GpioPins, wait, Rev*50, True, False, 'half', 0.05)

#Enfin nettoyer les broches
GPIO.cleanup()

stepper_test.gif

agréable!

Je veux faire n'importe quel exercice

Depuis que j'ai pu le tourner, je pense que je peux faire n'importe quel exercice en fonction du code. Je voudrais faire bouger le moteur arbitrairement. À titre d'exemple, faisons un mouvement de hauteur sinusoïdale. 7 en 1 étape.Puisqu'il tourne de 2 °, l'amplitude\theta_0Devrait être un multiple de cela. Cette fois, ce sera 72 °. périodeTA été réglé sur 2 secondes. La vitesse angulaire est\omega = \dot{\theta}(Dans cet exemple\cos)mais,waitNe peut prendre qu'une valeur positive, alors prenez une valeur absoluewait = (1/2)\times(1/|\omega|)\times(1.8/360)Est passé. Et\omega < 0QuandccwiseÀ'True'Tout ce que vous avez à faire est de réussir.\theta\omega|\omega|waitは下図のようÀなります.

Le code est comme suit.

python


GpioPins = [17, 18, 27, 22]

T = 2  # Period [s]
N_period = 2  # No. of periods
amp = 72
unit_angle = 7.2
s_angle = 1.8  # [deg]
N = int(4*amp/unit_angle)

theta = amp*sin(np.linspace(0, 2*pi, N))  # Angle time history [deg]
dt = T/len(theta)  # time-step [s]
omega = np.gradient(theta, dt)/360  # [Hz]
omega_pos = abs(omega)
pm = omega < 0  # boolean for CW/CCW 
wait = (1/omega_pos)*(s_angle/360)/2

mymotortest = RpiMotorLib.BYJMotor, 'MyMotorOne', 'Nema')
time.sleep(0.002)

for _ in np.arange(N_period):
    for k in np.arange(N):
        mymotortest.motor_run(GpioPins, wait[k], 1, pm[k], False, "half", 0)

GPIO.cleanup()

Sinu_Pitch.gif

l'a fait!

Autres sites référencés

Recommended Posts

[Raspberry Pi] Contrôle du moteur pas à pas avec Raspberry Pi
Commande de servomoteur avec Raspberry Pi
Exécuter le servomoteur SG-90 avec Raspberry Pi
GPGPU avec Raspberry Pi
DigitalSignage avec Raspberry Pi
Contrôlez le moteur avec un pilote de moteur en utilisant python sur Raspberry Pi 3!
Plantes Mutter avec Raspberry Pi
Contrôlez les moteurs sans balais avec GPIO de Raspberry Pi Zero
Utilisez vl53l0x avec RaspberryPi (python)
Communication série avec Raspberry Pi + PySerial
Configuration du système d'exploitation avec Raspberry Pi Imager
Production de système de contrôle de température avec tarte aux framboises et ESP32 (1)
Essayez L Chika avec raspberrypi
Construire un serveur VPN avec Raspberry Pie
Essayez de déplacer 3 servos avec Raspeye
Utiliser une webcam avec Raspberry Pi
J'ai appris comment la télécommande infrarouge fonctionne avec Raspberry Pi
Mesurer la force du signal SIM avec Raspberry Pi
Surveillance des animaux avec Rekognition et Raspberry pi
Bonjour le monde avec Raspberry Pi + Minecraft Pi Edition
Créer un environnement Tensorflow avec Raspberry Pi [2020]
Essayez de pêcher le Wakasagi avec Raspberry Pi
Programmation normale avec la programmation Node-RED avec Raspberry Pi 3
Capteur humain amélioré fabriqué avec Raspberry Pi
Essayez la détection d'objets avec Raspberry Pi 4 + Coral
Travailler avec des capteurs dans Mathematica sur Raspberry Pi
Utiliser le capteur de mouvement PIR avec Raspberry Pi
Faire une minuterie de lavage-séchage avec Raspberry Pi
Modèle Infer Custom Vision avec Raspeye
Faites fonctionner l'oscilloscope avec le Raspberry Pi
Créez un compteur de voiture avec Raspberry Pi
Enregistrement de la valeur d'Inkbird IBS-TH1 avec Raspberry Pi
Travailler avec le GPS en Python pour Raspberry Pi 3
Utilisez python sur Raspberry Pi 3 pour éclairer la LED avec le contrôle du commutateur!
Production d'un système de contrôle de température avec tarte aux framboises et ESP32 (2) Production d'un appareil de transmission
Discord bot raspberry pi zéro avec python [Note]
Contrôlez l'écran EL organique connecté I2C d'Akizuki à partir de Raspberry Pi
Programmation média avec Raspeye (préparation audio)
J'ai essayé L-Chika avec Razpai 4 (édition Python)
Profitez du travail électronique avec GPIO de Raspberry Pi
MQTT Radicon Car avec Arduino et Raspberry
Allumez / éteignez votre PC avec Raspberry Pi
Sortie CSV des données d'impulsion avec Raspberry Pi (sortie CSV)
Observez le groupe de météores Futago avec RaspberryPi4
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Obtenez la température et l'humidité avec DHT11 et Raspberry Pi
Application d'analyse des investissements boursiers avec tarte aux framboises
Enregistrement de la valeur d'Inkbird IBS-TH1 mini avec Raspberry Pi
Connectez-vous à MySQL avec Python sur Raspberry Pi
Suivi GPS avec Raspeye 4B + BU-353S4 (Python)
Mesurer la température du processeur de Raspeye avec Python
Création d'un système de contrôle de température avec tarte aux framboises et ESP32 (3) Réception d'un fichier Python
Enregistrez la température et l'humidité avec systemd sur Raspberry Pi
Apprentissage automatique avec Raspberry Pi 4 et Coral USB Accelerator
Exécutez la matrice LED de manière interactive avec Raspberry Pi 3B + sur Slackbot
Utilisez le capteur d'éclairement numérique TSL2561 avec Raspberry Pi
Qu'est-ce que Raspberry Pi?