Souhaitez-vous participer à la création d'un jeu vidéo inspiré de Stardew Valley, ou le tester lorsque la version bêta sera disponible ? Remplissez notre sondage ou inscrivez-vous à notre lettre d'information (en bas de page)
1

Arduino redondance securité naissance d'un projet

le 12-03-2017 à 19:03 #
Salut,

Comment j'aborde un projet en temps réel xF signifie point x vérifier la Faisabilité

Il s'agit d'un projet dont je n'ai pas encore tous les détails domaine réparation des gros moteurs marine

une barre équipée avec une pierre rotative se balade verticalement dans un cylindre qui peut faire 7 mètres de haut
actuellement un ouvrier est présent et balade la pierre de haut en bas
un encodeur donne la position
on ne peut pas mettre de détecteur en bas (pas compris vraiment pourquoi on peut probablement utiliser un détecteur de proximité mais pour l'instant je dois considérer que ce n'est pas possible 0F)
Cet outil peut être mortel il ne doit en aucun cas sortir du cylindre en rotation
Pas de détail sur la détection de bris de pierre de variations de RPM ou de vibrations anormale cela fait il partie de ma partie?

le système qui le gère doit donc être sur à 99.999999%.
basiquement aucune difficulté technique faire fonctionner un moteur dans un sens ou dans l'autre d'une position à une autre en donnant la position. La précision est de l'ordre du mm autant dire que c'est de l'approximatif

Arduino n'est pas fiable !
A vrai dire rien n'est fiable en électronique et encore moins en connectique. On vas donc utiliser plusieurs arduino une 2 CV susceptible de casser est moins dangereuse à conduire si on sais qu'elle n'est pas fiable qu'une mercédes dont on pense qu'elle est fiable à 100%

Cependant arduino ne chauffe pas et l'expérience m'a montré que la bête bouffe poussière y compris métallique sans trop de problèmes facteur chance aidant sans doute

Tous les câbles des arduinos seront soudés puis coulés avec la carte dans de la résine méthode éprouvée pour l'automobile pas de réparation possible
les alimentations électrique seront différentes et doublée avec des batteries elle même mesurées en temps réel



les risques
fils coupés === doubler avec un système sans fil 1F
panne de courant de la logique === utilisation de batteries 2F
1 arduino deviens dingue === utiliser 3 arduino + un arbitre chaque arduino juge l'arbitre et l'arbitre juge les 3 arduinos 3F
l'encodeur n'est pas branché et balance n'importe quoi === faire un test ampéremétrique de l'encodeur pour vérifier qu'il est branché 4F
le déplacement calculé par l'encodeur n'est pas cohérent ==== en fonction de l'ordre et de la direction calculer la cohérence du déplacement 5F
le switch de dépassement du haut du cylindre ne fonctionne pas ==== utiliser deux switchs un NO et l'autre NC sur le circuit d'arrêt d'urgence donc indépendant de la logique mais vérifiée par elle et un troisième un peu plus haut qui provoque un court circuit 6F

Si une panne est détectée le système doit pouvoir fonctionner en manuel ===circuit électrique indépendant manuel automatique 7F

Je vais donc regarder les différents points de faisabilité dans ce projet le coût est négligeable c'est la sécurité la facilité de réparer n'importe où ce qui implique la mise à disposition des sources du schéma électronique et des moules de protection pour le coulage de la résine

Je prendrai ensuite plus de détail et les exigences du gars qui a la machine sur la programmation des déplacements




Re: Arduino redondance securité naissance d'un projet
le 14-03-2017 à 06:30 #
Voilà ce qu'il faut faire mais en plus gros


Le seul vrai risque pour la personne c'est une mise en rotation de la pierre hors du cylindre cela détruirait aussi la machine en raison du balourd
le mouvement vertical est électrique mais la pression sur la pierre et le mouvement rotatif est à air comprimé.

L'autre risque c'est la ruine du cylindre en raison du prix du cylindre mais encore beaucoup plus cher du prix de l'immobilisation du navire

Le système grec c'est tu fais comme tu veux mais faut pas que cela ♥♥♥♥


(Modifié par rokag3 le 14-03-2017 à 07:12)
Re: Arduino redondance securité naissance d'un projet
le 29-03-2017 à 04:21 #
bon on vas attaquer Note si je n'utilise que peu d'abréviation c'est que je n'ai pas de mémoire et que mon petit cerveau n'est pas capable de fonctionner avec je remarque cependant que le cerveau des autres à tendance à mieux fonctionner avec des répétitions d'appellation complète donc je garde mon système verbeux mais efficace

soit un cylindre de 30cm de DiamètreDuCylindre et de 200cm de haut
cela me fait un PerimetreDuCylindre de 94.25cm

disons un angle de croisement de AngleDeCroisement 60 degré
par rapport à l'horizontal cela me fait AngleDeDescente= AngleDeCroisement/2 donc 30
la hauteur de mon déplacement pour un tour d'outil sera donc de
HauteurdeDescenteOutilParTour = tan(AngleDeDescente)*PerimetreDuCylindre soit 54.41

Je dois donc parcourir dans ce cas 54.41cm en montée ou en descente chaque fois que mon outil fera un tour

disons que mon encodeur de rotation d'outil me donne encodeurRotationOutil 1024 positions par tour
soit valeurDuStepBaxe PerimetreDuCylindre/1024 0.53134765625
j'ai la position angulaire de l'outil par l'encodeur mais je ne maitrise pas la vitesse de rotation


j'ai un encodeur rotatif sur le moteur de descente de encodeurMoteurDescente 4096 positions pour un tambour de diametreDuTambour 20cm
j'ai donc un trajet vertical de 62.83185307179586476925286766559 cm pour 4096 points soit (diametreDuTambour*pi ) /encodeurMoteurDescente soit valeurDuStepZaxe 0.1533980787885641229718087589492 mm par step
Pour Arduino et parce que la précision ici est grossière je prendrai 0.153398

par contre je maitrise la vitesse de montée descente de l'outil il vas donc me falloir convertir la vitesse de rotation en vitesse de plongée

je vais utiliser un timer et lire tous les cinquantième de seconde mes positions
exemple
mon timer est à .25sec dernierePositionAaxe 2100 PositionActuelleaxeA 2170 distance parcourue (dernierePositionAaxe -PositionActuelleaxeA)*valeurDuStepBaxe 37,1943359375 mm parcourue en 1/50 eme de sec (ou moins paramètre frequenceDeCalcul) donc en 1 minute je parcourerai 3000 fois cette distance je suis à
11158.30078125 cm minute




(Modifié par rokag3 le 29-03-2017 à 05:21)

Ajout du 29-03-2017 à 13:56:

vous n'oublierez pas de faire un petit test en demandant la tan (1)
Tangent en degrés: tan (1) = 0,0174550649
Tangente en radians: tg (1) = 1,5574077247 histoire d'établir vos formules en fonction

ici un petit topo sur arduino avec des exemples https://forum.snootlab.com/viewtopic.php?f=18&t=1371

Ajout du 29-03-2017 à 15:41:

En fait ce que je dois faire c'est une synchronisation entre l'axe z (vertical) et l'axe b (la rotation de l'outil)
je n'ai pas un servo moteur en step mais un moteur assynchrone commandé par un Variable Frequency Drive de ce genre
http://www.invertekdrives.com/client-uploads/download-manager/user-guides/82-E2MAN-IN%20Optidrive%20ODE-2%20IP20%20%20IP66%20User%20Guide%20v3.30.pdf



ces Variable Frequency Drive utilisent une commande 0-10v très facile à produire à partir d'un signal Pulse Width Modulation
Donc mon but vas être de fabriquer un signal Pulse Width Modulation pour accélérer ou ralentir l'axe z et l'inverser/arrêter
il existe une belle bibliothèque Proportional Integral Derivative sur arduino que j'utiliserai peut être

je dois donc maintenant trouver une méthode RAPIDE de pilotage








(Modifié par rokag3 le 29-03-2017 à 15:50)

Ajout du 29-03-2017 à 20:05:

Bon on vas maintenant faire un ratio encoder
en clair si je me déplace de nstep en 1/frequenceDeCalcul sur l'axeB de combien mon axe Z doit il s'être déplacé
pour le calculer
ratioEncoder=((PerimetreDuCylindre *ratioz/b )/valeurDuStepZaxe )/encodeurRotationOutil
dans mon exemple
((94.2477796077*0.5773502692)/0.0153398079)/1024=3.4641016151
pour un diamètre de 70cm avec le même angle et les même encodeurs j'aurai
ratioEncoder=38.4646838724

si maintenant je lis que j'ai parcouru 70 steps sur mon axe B nombreStepAxeBFait
je sais que la valeur nombreStepAxeZideal est de nombreStepAxeBFait*ratioEncoder soit 242 pour un diamètre de 30 et serait de 2692 pour un diamètre de 70

Pratique une simple multiplication en float et j'ai ma position de référence les autres calculs sont réalisés une fois dans une fonction que j'appellerai InitialParameters() par exemple

Il faut maintenant que je détermine le nombre de RPM pour suivre l'axe B

la vitesse vitesseEnRevPerSecForB m'est donnée par (nombreStepAxeBFait *frequenceDeCalculHz)/encodeurRotationOutil
ici 70 steps représente 3.417 Revolution Per Seconde (205 rpm)

la vitesse vitesseIdealeEnRevPerSecForZ m'est donnée par (nombreStepAxeZIdeal*frequenceDeCalculHz)/encodeurMoteurDescente
ici les 70 steps représentent une vitesse de 2.9541015625 Revolution Per Seconde (177rpm)
pour un diamètre de 70cm avec la même vitesse angulaire de B cela ferait 32.86 Revolution Per Seconde (1971rpm )




(Modifié par rokag3 le 29-03-2017 à 20:58)

Ajout du 29-03-2017 à 21:11:

Copiez ci dessous en un bloc et collez en position A2 dans votre tableur préféré avec collage spécial vous avez les formules en texte colonne C pour mettre en colonne B en enlevant l'espace devant



frequenceDeCalculHz 50
DiamètreDuCylindre 70 70
HauteurDuCylindre 200 200
PerimetreDuCylindre 219.9114857513 =+b3*PI()
AngleDeCroisement, 60, 60
AngleDeDescente 30 =+b6/2
HauteurdeDescenteOutilParTour 604.2018413804 =TAN(RADIANS(b3))*b5
DiametreDuTambourCable 20 20
distanceUnTourDeZ 62.8318530718 =+b9*PI()
encodeurRotationOutil 1024 1024
encodeurMoteurDescente 4096 4096
valeurDuStepBaxe 0.2147573103 =+b5/b11
valeurDuStepZaxe 0.0153398079 =+b10/b12
ratioz/b 2.7474774195 =+B8/B5
ratioencoder 38.4646838724 =((+B5*B15)/B14)/B11
exemple
nombreStepAxeBFait 70 70
nombreStepAxeZIdeal 2692 =ENT(+B18*B16)
vitesseEnRevPerSecForB 3.41796875 =(+B18*B2)/B11 205.078125
vitesseIdealeEnRevPerSecForZ 32.861328125 =(+B19*B2)/B12 1971.6796875



(Modifié par rokag3 le 29-03-2017 à 21:18)

Ajout du 29-03-2017 à 23:29:

Donc je sais quelle vitesse je veux je dois la transcrire sur une échelle de pwm


j'ai une vitesse maximum vMaxMoteurZ disons 800RPM en général sur les Variable Frequency Drive la linéarité est excellente
on donnera donc pour la variable PwmBaseAxeZ 800 RPM pour 255 en fait 13.33 RPSeconde et zéro pour zéro le reverse se fera par un flag

comment corriger ?

je vais prendre nombreStepAxeZFait et soustraire avec nombreStepAxeZIdeal et mettre le résultat dans variationAjustement

si l'écart est < 2 je ne corrige pas si cette variable est plus grande que +-2 ou 3 j'augmente ou je diminue ma consigne de PwmBaseAxeZ





(Modifié par rokag3 le 30-03-2017 à 02:45)

(Modifié par rokag3 le 30-03-2017 à 02:55)




Ces discussions pourraient vous intéresser également:


arduino ampli op et potentiomètre digital
programmation carte arduino et relier au détecteur
arduino rotative welding table à vitesse constante
pied à coulisse électronique affichage déporté DRO arduino
Aide pour démarrer avec arduino pour des enfants