FORUMAMONTRES › Forums › Forum de discussions sur les montres vintages et sujets techniques › fabrication d’une fraiseuse cnc home made
- Ce sujet contient 249 réponses, 16 participants et a été mis à jour pour la dernière fois par
Torzio, le il y a 1 année et 9 mois.
-
AuteurMessages
-
30 août 2024 à 12h10 #420004926042
Torzio
Membre- Cadrature a écrit:
- Remarquez que je ne donne pas d’avis, mais que j’essaie de justifier ma méthode.
Je n’ai pas dit que les GPIO n’étaient pas identifiés; j’ai donné deux points qui
posent problème:
– synchronisation de l’horlogeAucune importance ! Si l’horloge varie de quelques µS, cela n’aura absolument aucun effet sur le bon fonctionnement de la machine. On ne cherche pas à indiquer l’heure juste !.
– absence de bibliothèque pour améliorer la commande moteur (par exemple pour remise à zéro ou accélérations)On s’en passe facilement. Il suffit de mettre, une fois pour toutes, une petite tempo après le signal haut et bas, qui va bien, de façon à avoir un couple optimum avec la vitesse suffisante.
Il est possible de faire comme vous dites. Je n’ai pas essayé, il faudrait faire l’essai.Je parle par expérience, je ne subodore pas.
Peut-être en baissant la fréquence, quitte à faire un système bruyant (il me semble que vous êtes à 500Hz avec votre code).
Explication:
time.sleep(DELAY) n’est pas précis sous RaspberryPi, il dépendra de la charge du système d’exploitation.
Il faut plutôt utiliser un train d’impulsions généré par une horloge interne.
Le mieux pour faire comme vous faites, est d’utiliser l’hardware PWM de RaspberryPy.
Voyez ce lien : PWM périodiqueTout cela c’est bien pour faire suer le neurone et briller en société, mais n’a pas grand intérêt pour notre projet. « Au doigt mouillé » on cherche le bon timing pour un couple optimum. La vitesse est secondaire; il n’y a pas le feu au lac, on ne souhaite pas faire de la grande série!
L’IA nous aide considérablement, mais il faut la diriger et surtout l’exploiter avec une certaine critique.Quand ça fonctionne bien, c’est que tout est bon pour moi ! Après, bien sûr, on peu chipoter sur le style et/ou prétendre que c’est pas bien, parce que c’est une IA qui l’a crée, qui plus est, une IA chinoise, dans mon cas !
@Hypnos
Ce que j’observe avec les étudiants, c’est que l’usage de l’IA creuse les différences. Il y a ceux qui utilisent l’IA pour
faire leur travail à leur place, et ceux qui exploitent l’IA pour s’améliorer encore.
Nous accompagnons aujourd’hui les étudiants face à l’usage de cet outil, mais ce n’est pas gagné.Cadrature
ICI un lien très intéressant qui montre comment piloter un moteur PAP avec Raspberry.
En tous cas, merci pour cette discussion contradictoire, elle me donne beaucoup l’envie de reprendre ce vieux projet de piloter mes machines à tailler avec Raspberry et me permet d’aller beaucoup plus loin avec l’IA ! Je vais mourir moins idiot.
@+
JC
30 août 2024 à 12h44 #420004926043Cadrature
MembreCette question d’horloge m’inquiète si le système devait sauter des pas.
Briller en société ? Utiliser un système asynchrone est la solution sérieuse pour un tel projet.
Mais ok, avec une fréquence assez lente, c’est du bricolage, mais ça devrait marcher.
Sans accélération malheureusement (c’est indispensable pour éviter de rater un pas avec un matériel un peu lourd, ce qui n’est pas le cas ici).
Bref…Voici votre code (en français 😉 en m’inspirant du lien que vous avez donné…
Ça me fait réviser un peu, ça faisait longtemps que je n’avais pas fait de Python.
Bon je m’arrête là, le post de @Vir est assez rempli comme ça.Code: (Je ne l’ai pas essayé; je n’ai plus de RaspberryPi sous la main)
- Code:
-
from time import sleep # Importer la bibliothèque de gestion du temps
import RPi.GPIO as GPIO # Importer la bibliothèque de gestion des GPIO# Constantes de la machine
STEPS_PER_REV = 200 # nombre de pas du moteur par tour complet
GEAR_RATIO = 189 # rapport de réduction du système à vis sans fin
TOTAL_STEPS = STEPS_PER_REV * GEAR_RATIO # nombre total de pas pour un tour complet de la roueSTEP = 14 # La commande de pas est reliée au GPIO 14
DIR = 15 # La commande de direction est reliée au GPIO 15
vitesse = 0.0005 # à ajuster en fonction des essaisGPIO.setmode(GPIO.BCM) # Paramétrage de la numérotation des GPIO en mode BCM
GPIO.setwarnings(False) # Ne pas tenir comte des alertes
GPIO.setup(STEP, GPIO.OUT) # GPIO STEP configuré en sortie
GPIO.setup(DIR, GPIO.OUT) # GPIO DIR configuré en sortie# Tourner d’un nombre de pas en avance ou recul
def tourne(pas, sens, vitesse):
# Sens de rotation
if (sens == "avance"):
GPIO.output(DIR, GPIO.HIGH)
else:
GPIO.output(DIR, GPIO.LOW)# Avancer du nombre de pas
for x in range(pas):
GPIO.output(STEP, GPIO.HIGH)
sleep(vitesse)
GPIO.output(STEP, GPIO.LOW)
sleep(vitesse)def tailler(dents):
pas_par_dent = TOTAL_STEPS / dents # nombre réel de pas pour chaque dent
acc = 0 # accumulateur pour la partie fractionnaire des pas (algorithme de Bresenham)
for i in range(dents):
# Calcul du nombre de pas pour le diviseur (Bresenham-like)
acc += pas_par_dent
ecart = int(acc) # partie entière des pas à effectuer
acc -= ecart # partie fractionnaire restante pour la dent suivante# Attente confirmation utilisateur
while True:
choix = input(f"[Dent {i+1}/{dents}] Appuyer ‘O’ pour avancer ou ‘Q’ pour quitter : ").strip().upper()
if choix == "O":
tourne(ecart, "avance", vitesse)
break
elif choix == "Q":
print("Arrêt demandé par l’utilisateur.")
return
else:
print(":warning: Entrée invalide, recommencez (O ou Q).")# — Interface console —
def main():
try:
dents = int(input("Combien de dents voulez-vous tailler ? "))
tailler(dents)
print("Travail terminé.")
finally:
GPIO.cleanup()if __name__ == "__main__":
main()
30 août 2024 à 14h10 #420004926044Torzio
Membre- Cadrature a écrit:
- Cette question d’horloge m’inquiète si le système devait sauter des pas.
Briller en société ? Utiliser un système asynchrone est la solution sérieuse pour un tel projet.
Mais ok, avec une fréquence assez lente, c’est du bricolage, mais ça devrait marcher.
Sans accélération malheureusement (c’est indispensable pour éviter de rater un pas avec un matériel un peu lourd, ce qui n’est pas le cas ici).
Bref…Comme je l’ai dit, je m’intéresse aux moteurs PAP depuis bien longtemps. J’ai toujours travaillé en tout ou rien et je n’ai jamais eu de problème. Il est certain que pour la robotique ou des applications plus pointues, on a besoin de varier l’accélération.
Voici votre code (en français 😉 en m’inspirant du lien que vous avez donné…
Ça me fait réviser un peu, ça faisait longtemps que je n’avais pas fait de Python.
Bon je m’arrête là, le post de @Vir est assez rempli comme ça.Je suis persuadé que cela peut être bénéfique à Vir, afin qu’il fasse le bon choix.
Code: (Je ne l’ai pas essayé; je n’ai plus de RaspberryPi sous la main)
Merci beaucoup pour le code. Je vais essayer de mettre mon vieux Raspberry en route et tester tout cela.
- Code:
-
from time import sleep # Importer la bibliothèque de gestion du temps
import RPi.GPIO as GPIO # Importer la bibliothèque de gestion des GPIO# Constantes de la machine
STEPS_PER_REV = 200 # nombre de pas du moteur par tour complet
GEAR_RATIO = 189 # rapport de réduction du système à vis sans fin
TOTAL_STEPS = STEPS_PER_REV * GEAR_RATIO # nombre total de pas pour un tour complet de la roueSTEP = 14 # La commande de pas est reliée au GPIO 14
DIR = 15 # La commande de direction est reliée au GPIO 15
vitesse = 0.0005 # à ajuster en fonction des essaisGPIO.setmode(GPIO.BCM) # Paramétrage de la numérotation des GPIO en mode BCM
GPIO.setwarnings(False) # Ne pas tenir comte des alertes
GPIO.setup(STEP, GPIO.OUT) # GPIO STEP configuré en sortie
GPIO.setup(DIR, GPIO.OUT) # GPIO DIR configuré en sortie# Tourner d’un nombre de pas en avance ou recul
def tourne(pas, sens, vitesse):
# Sens de rotation
if (sens == "avance"):
GPIO.output(DIR, GPIO.HIGH)
else:
GPIO.output(DIR, GPIO.LOW)# Avancer du nombre de pas
for x in range(pas):
GPIO.output(STEP, GPIO.HIGH)
sleep(vitesse)
GPIO.output(STEP, GPIO.LOW)
sleep(vitesse)def tailler(dents):
pas_par_dent = TOTAL_STEPS / dents # nombre réel de pas pour chaque dent
acc = 0 # accumulateur pour la partie fractionnaire des pas (algorithme de Bresenham)
for i in range(dents):
# Calcul du nombre de pas pour le diviseur (Bresenham-like)
acc += pas_par_dent
ecart = int(acc) # partie entière des pas à effectuer
acc -= ecart # partie fractionnaire restante pour la dent suivante# Attente confirmation utilisateur
while True:
choix = input(f"[Dent {i+1}/{dents}] Appuyer ‘O’ pour avancer ou ‘Q’ pour quitter : ").strip().upper()
if choix == "O":
tourne(ecart, "avance", vitesse)
break
elif choix == "Q":
print("Arrêt demandé par l’utilisateur.")
return
else:
print(":warning: Entrée invalide, recommencez (O ou Q).")# — Interface console —
def main():
try:
dents = int(input("Combien de dents voulez-vous tailler ? "))
tailler(dents)
print("Travail terminé.")
finally:
GPIO.cleanup()if __name__ == "__main__":
main()
2 septembre 2024 à 10h09 #420004926045Torzio
MembreSalut à tous,
Je viens de trouver une vidéo intéressante qui explique comment se passer d’un PC pour piloter une CNC ou mon diviseur, avec Raspberry :
J’ai demandé à l’IA Génini de relooker mon avatar, le résultat est bluffant !
@+
JC2 septembre 2024 à 11h44 #420004926046Cadrature
Membre- Torzio a écrit:
- Salut à tous,
Je viens de trouver une vidéo intéressante qui explique comment se passer d’un PC pour piloter une CNC ou mon diviseur, avec Raspberry :
@+
JC
Je crois qu’il y a confusion.
En effet, dans cette vidéo, le RasberryPi remplace un ordinateur classique pour envoyer du G-Code.
Sa CNC est pilotée par un Arduino qui tourne grâce à GRBL.
On en revient au même point; je crois que vous n’aimiez pas cette configuration.Vous pouvez vous passer de votre ordi en remplaçant tout votre matériel par un bête Arduino et un écran LCD avec
clavier matriciel par exemple. C’est le plus simple pour l’électronique d’un diviseur. Mais je dis ça, je ne dis rien.@+
Cadrature2 septembre 2024 à 13h53 #420004926047Torzio
Membre- Cadrature a écrit:
- Je crois qu’il y a confusion.
En effet, dans cette vidéo, le RasberryPi remplace un ordinateur classique pour envoyer du G-Code.
Sa CNC est pilotée par un Arduino qui tourne grâce à GRBL.Moi aussi, je cherche à remplacer mon PC pour piloter ma machine à tailler ! De plus, je pourrai piloter directement les drivers des PAP sans passer par mon interface à PIC.
On en revient au même point; je crois que vous n’aimiez pas cette configuration.A ce jour j’ai réalisé plus de choses avec Arduino, qu’avec Raspberry. Mais, comme je souhaite ne plus utiliser de PC pour piloter ma machine et qu’avec Arduino je n’y suis pas encore parvenu de façon satisfaisante, je suis convaincu que le Raspberry remplacera au mieux le PC. Il a, de façon native, un port HDMI, un lecteur de mini carte SD. Etc. C’est donc plus simple pour moi, sauf qu’il faut que je me mette au Python. Mais l’IA est là !
Elle m’a beaucoup aider, hier, pour remettre à niveau, un vieux Raspberry qui dormait depuis des années, dans une armoire, en attendant le nouveau.
Vous pouvez vous passer de votre ordi en remplaçant tout votre matériel par un bête Arduino et un écran LCD avec
clavier matriciel par exemple. C’est le plus simple pour l’électronique d’un diviseur. Mais je dis ça, je ne dis rien.J’attends de voir !
@+
JC
3 septembre 2024 à 13h08 #420004926048Cadrature
Membre- Torzio a écrit:
- Moi aussi, je cherche à remplacer mon PC pour piloter ma machine à tailler ! De plus, je pourrai piloter directement les drivers des PAP sans passer par mon interface à PIC.
…
Votre montage ne sera pas très sûr comme ça. En plus des problèmes informatiques que j’ai mentionnés, il faudra obligatoirement monter des condensateur de découplage sur les Drivers. Bref de l’électronique et plein d’ennuis à venir…
- Torzio a écrit:
- …
J’attends de voir !
Ne doutez pas d’un montage Arduino. C’est très simple et ce serait moins d’une journée de travail, câblage compris.
J’ai déjà fait de même pour plusieurs machines (distributeur croquettes, machine à laver les montres).
Matériel (qui remplace à la fois votre ordi et votre interface à base de PIC):
Arduino Uno, CNC Shield, Drivers, Moteurs Nema 17, Alimentation 12V, Clavier matriciel IC2, Écran LCD 20×4, Boutons poussoir,
LEDs.
Le script demande le nombre de dents, la profondeur et l’avance, on rentre les données au clavier,
on allume la fraiseuse, on appuie sur le bouton vert, et hop, la machine taille les dents.
Archi-simple pour ce que vous voulez faire, non ?Je doute que ça intéresse des gens… Des amateurs ?
4 septembre 2024 à 10h40 #420004926049Torzio
Membre- Cadrature a écrit:
-
Je doute que ça intéresse des gens… Des amateurs ?
Bonjour,
Nous sommes au moins 3 à être intéressés !
J’ai trouvé un vidéo intéressante sur Arduino et la CNC :
En ce qui me concerne, je continue mon aventure avec Raspberry :

J’ai reçu mon écran 7 pouces, j’attends le clavier avec le Raspberry PI 4 intégré.
@+
JC7 septembre 2024 à 22h18 #420004926050Torzio
MembreLe talent c’est de donner l’impression que les choses sont simples :
@+
JC8 septembre 2024 à 13h38 #420004926051Cadrature
MembreBonjour
Oui programmer une interface TK sous Python est simple. C’est une bonne façon de faire pour avoir
une interface sympa sur un RaspberryPi si on aime Python.Vous nous direz si vous optez pour cette solution.
Allumer des leds est une chose, commander des pap en est une autre.
N’oubliez pas de programmer des vitesses assez lentes et de mettre des
condensateurs si vous commandez les pilotes de moteurs pas-à-pas directement avec la carte RaspberryPi.J’attends de lire la suite…
Cadrature8 septembre 2024 à 15h43 #420004926052Torzio
Membre- Cadrature a écrit:
- Bonjour
Oui programmer une interface TK sous Python est simple. C’est une bonne façon de faire pour avoir
une interface sympa sur un RaspberryPi si on aime Python.Vous nous direz si vous optez pour cette solution.
Je recherche effectivement un interface sympa et conviviale. Je suis complètement débutant en Python, mais les tutos et mon amie l’IA vont m’aider ! Il y en a bien que apprennent l’horlogerie de la sorte !
Allumer des leds est une chose, commander des pap en est une autre.
N’oubliez pas de programmer des vitesses assez lentes et de mettre des
condensateurs si vous commandez les pilotes de moteurs pas-à-pas directement avec la carte RaspberryPi.Comme je l’ai déjà dit souvent, j’ai fabriqué des machines à tailler qui tournent sous Basic depuis plus de 20 ans sans problème. Je ne vois pas pourquoi avec Raspberry sous Python il y en aurait !
J’attends de lire la suite…Je vais reprendre les travaux pratiques certainement à la fin du mois. Pour moi, rien ne presse, j’ai déjà deux machines à tailler qui fonctionnent parfaitement. Je souhaite juste remplacer mon vieux et imposant PC qui les commande par un Raspberry PI, qui prendra beaucoup moins de place. Cela fait longtemps que je souhaite le faire. Le projet de Vir a rallumé cette vieille idée !
@+
JCCadrature
9 septembre 2024 à 9h38 #420004926053Cadrature
MembreBonjour
- Citation :
- Torzio:
Comme je l’ai déjà dit souvent, j’ai fabriqué des machines à tailler qui tournent sous Basic depuis plus de 20 ans sans problème. Je ne vois pas pourquoi avec Raspberry sous Python il y en aurait !
Il est possible que « ça marche », mais combien de temps ? Et est-ce que ce sera juste en nombre de pas ?
Il faudrait essayer dans notre monde, peut-être que ça marche et que ça marche bien, mais dans le monde de la Théorie,
c’est problématique
Vous aimeriez vivre en Théorie vous dites ?
a) Pourquoi mettre une capacité sur l’alimentation du contrôleur (A4988) ? Parce que le moteur pas-à-pas va provoquer des
surtensions qui peuvent faire échouer des pas, chauffer le composant, voir griller le A4988. C’est d’ailleurs
l’intérêt de ces cartes CNC qu’on branche sur les cartes Arduino : en plus de proposer parfois des options et des
câblages simples, ils mettent un condensateur à chaque driver.
Un 100µF 35V électrolytique ira bien. Au plus près du Driver, sur son alimentation de puissance (VMOT).b) Pourquoi ça marche bien sous Basic avec un PIC et que ça pourrait éventuellement mal se passer avec un RaspberryPi ?
Parce que le RaspberryPi va faire plein de trucs en parallèle, comme s’occuper de l’affichage du logiciel pendant qu’il devrait
vous proposer des impulsions vers le moteur.
Si l’on veut un moteur rapide, fluide et silencieux (avec un TMC2208 par exemple), le moteur risque de se bloquer, ou de sauter des pas.
On peut simplement solutionner cela en réglant les vitesses en faisant tourner lentement le moteur, on est pas aux pièces !
On peut aussi essayer avec une programmation plus technique du RaspberryPi comme je disais.
Cela est dans le monde de la théorie, je n’ai pas essayé avec un RasperryPi récent.
La solution qu’on voit partout est qu’un microcontrôleur s’occupe de faire marcher les moteurs (avec un Arduino pour faire simple) et
que le RaspberryPi est là pour envoyer les ordres au microcontrôleur. Comme ça, on peut faire tourner fluidement, rapidement et précisément
plusieurs moteurs en même temps sans se casser la tête.D’où l’architecture que je recommandais en Théorie: une petite carte CNC sur un Arduino et une communication série
entre l’Arduino et le RaspberryPi.Bonne journée en Théorie 😉
Cadrature10 septembre 2024 à 13h57 #420004925969Vir
Membre10 septembre 2024 à 14h10 #420004925970fmartinez
MembreFélicitations!
Je ne comprends pas tout, car ce n’est pas du tout mon domaine.
Mais je suis vraiment admiratif de votre travail.
Cordialement
10 septembre 2024 à 15h00 #420004925971Vir
MembreMerci à vous fmartinez,
C’est un prototype de mini fraiseuse pilotée par ordinateur.
Pour fabriquer des pièces et pourquoi pas une montre complète
.
On verra une fois terminée si cette machine est à la hauteur de mes attentes.Ps:Je suis un simple amateur d’horlogerie

Bon après-midi à vous.
Vir -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.







