Bonjour tout le monde.
Je suis maraicher bio et je cherche à diminuer certaines tâches répétitives de notre métier.
En l'occurence, le semis de grandes séries. Par exemple : nous devons semer 105 caisses de 112 mottes avec 3 graines par motte.
Voilà 2 ans que je travaille par intermittence à la création d'une machine à états pour faire un semoir automatique pneumatique.
Celui-ci est composé d'un tapis de marche actionné par un moteur pas à pas (Nema 17 + TB6600), un bras actionné par un autre moteur pas à pas (Nema 17 + TB6600), 1 relais pour piloter un auget vibrant (électro aimant), 1 relais pour piloter une électro-vanne (aspiration Venturi), et 2 switchs pour le homing du bras et détection de caisse de motte, un écran LCD + 4 switchs pour gérer un menu de variables.
Les variables sont :
1 - le choix du nombre de graines semées par mottes
2 - le choix du type de caisse / plaque (tableau à 3 valeurs - nb mottes / nb rangs / nb pas moteur pour avance du tapis)
3 - démarrage de la séquence de semis : oui / non
J'étais assez content du résultat, n'étant pas programmeur à la base.
Voici un aperçu du fonctionnement en vidéo : Lien Youtube
Le gros problème que je rencontre maintenant, juste avant de passer en production... c'est que la carte reboot, généralement au début de l'état 5 de la séquence mais cela peut-être au premier rang comme au 11e rang aléatoirement... Cela arrive aussi parfois au démarrage de la carte.
Il arrive aussi que le retour moniteur série n'affiche plus les infos demandées.
Je pensais que ce pouvais être un bug de la carte mais je l'ai changé, toujours le problème (UNO ou MEGA).
Je me tourne vers parce que je crois que je vais craquer !
Merci d'avance pour votre aide !
pouvez vous décrire comment les différents éléments sont alimentés ? (notamment si vous avez une bonne séparation entre les moteurs, les relais et la carte et que tout le monde a la puissance nécessaire à ses opérations ?)
PS: c'est dommage d'utiliser la classe String pour ça
String screens[numOfScreens][2] = {{"Nombre graines", "par motte"},
{"Type de plaque", "0=112/1=150/2=240"}, {"Demarrage", "0=NON / 1=OUI"}
};
écrivez à la place
const char* screens[numOfScreens][2] = {{"Nombre graines", "par motte"},
{"Type de plaque", "0=112/1=150/2=240"}, {"Demarrage", "0=NON / 1=OUI"}
};
vous gagnerez sans doute plus d'un kilo-octet de mémoire programme....
Bonjour J-M-L, les moteurs sont alimentés par une alim en 24V / 4A.
L'électro-vanne à une alimentation en 12V, l'auget vibrant est en 220V.
Il y a juste l'arduino que j'alimente en USB sur l'ordinateur pour l'instant, je vais tester une alimentation indépendante.
Je me demande si le module de relais ne pose pas problème car lorsque je laisse les alimentations pour l'électro-vanne et pour l'auget branchées, je ne peux pas téléverser le code sur l'arduino.
Vérifiez que vos relais ont des diodes de protection.
Alimentez vous quelque chose depuis l’arduino (par la broche 5V par exemple) ou ce sont juste des broches de commande ?
Sinon je vois des plots verts sur votre breadboard à côté de l’arduino. Combien d’ampères passent dedans ? Il faut rester sous 1A max (moi j’essaye de ne pas dépasser 500mA) si vous ne voulez pas de soucis d’influence entre les rangs - la breadboard n’est pas faites pour bien isoler des courants forts.
Après plusieurs essais, le problème est créé uniquement lorsque je branche le 220V pour l'électro-aimant.
J'ai testé en faisant passer par le relais, soit la phase, soit le neutre, pas de changement.
J'ai tester un module relais à 1 voie pour cet électro-aimant, ça ne change rien.
Comment puis-je vérifier que les relais ont des diodes de protection ?
Sur le 5V de l'arduino, j'ai les 2 switchs de butée (que je peux enlever car la petite led rouge qui s'allume n'est pas vitale) et le module relais.
Je vais mesurer les ampères dans les plots verts mais je pense que cela reste bas, j'y est connecté les PIN pour les TB6600, les switchs, le ground et 5V.
Comment est il contrôlé et est-ce que son circuit a bien une diode de roue libre ? (Comme pour les relais faut regarder soit dans la spec, soit sur la carte directement)
Est-ce que vous n’avez que des commandes qui passent dans les plots verts ou est-ce que vous avez du courant de puissance pour les moteurs ou l’électroaimant ?
Ah oui j’ai raté qu’il était peut être directement alimenté en alternatif.
Il faut s’assurer que la commande ne soit pas polluée par les courants forts et que le courant nécessaire à l’ensemble des commandes des relais ne dépasse pas le courant max qu’un arduino peut fournir au travers de ses pins.
Leptro:
Il faut soit un réseau RC soit un varistor en parallèle de la bobine.
Ah, là c'est au-delà des mes connaissances :D...
J-M-L:
Il faut s’assurer que la commande ne soit pas polluée par les courants forts et que le courant nécessaire à l’ensemble des commandes des relais ne dépasse pas le courant max qu’un arduino peut fournir au travers de ses pins.
Des pistes pour que je teste le courant pour les relais ?
D'un coup je me sens largué !
L'autre solution, c'est que je laisse tourner l'auget vibrant en continu, plus de relais !
Une autre petite question qui me fait tourner en rond : j'aimerai attribuer des valeurs par défaut au tableau "parameters[]" comme pour le tableau screens[] mais je me retrouve avec des erreurs à la compilation.
Si vous avez une piste...
Je prendrais une photo des relais demain, je n'ai pas de lien à fournir.
Pour le schéma, je teste Frtizing mais j'ai un peu de mal, je bidouille car je ne trouve pas tous les composants.
Pour le schéma faites un truc à la règle à la main sur un bout de papier et faites une photo. c'est bien mieux qu'un Frtizing et c'est mieux si vous faites le dessin en suivant chaque fil du vrai montage (ie comme c'est câblé en réalité).
Voici le schéma de branchement ainsi que les photos des relais. J'utilise le relais 4 voies (voies 1 et 3). Le 1 voie a servi de test mais le résultat ets le même.
J-M-L:
le Fritzing c'est assez illisible, on s'en fiche de voir la tête des composants, ce qui compte ce sont les connexions électriques.
C'est mon ancien métier de graphiste qui ressort et qui rend plus lisible pour moi qui n'est aucune connaissance en électronique :).
J-M-L:
Le schéma ne montre pas non plus ce qui passe dans les plots verts
Dans les plots verts de droite, il y a le 5V de l'écran et des 2 switchs puis le grnd des TB6600, de l'écran, des 2 switchs et des 4 boutons poussoirs.
Dans les plots verts de gauches, il y a les pin des TB6600 et des switchs.
Pour l'alimentation des relais, il faudrait que j'en rajoute une nouvelle séparée ?
Ok, je vais séparer logique et puissance. Pour ma compréhension : quel est le problème de les laisser ensemble ?
Les moteurs sont assez éloignés de l'Arduino : il y a en a 1 au bout du tapis de marche et l'autre en haut du semoir, à minimum 50cm. Il faudrait les écartés plus ?
Merci pour le temps que vous prenez !
Leptro:
L'électroaimant qui pose problème est surement un vibreur fonctionnant en 240V.
Dans ce cas pas de diode en roue libre (sinon boum :o).
Il faut soit un réseau RC soit un varistor en parallèle de la bobine.
Artouste:
Réalisation intéressante qui a du t'occuper un bon moment
Tu utilise quoi comme source de vide ?
Bonjour, clair que j'y ai passé du temps en commençant à zéro connaissance...
J'utilise un petit module venturi avec un filtre. J'essaye de retrouver le fournisseur mais ça remonte à 3 ans, je me souviens juste que c'était en Allemagne.
Si tu es certain que le problème disparaît lorsque l'électro-aimant est débranché, le problème vient probablement de là. Toute charge inductive (électro-aimant) commutée (relais) sur le 230V est susceptible de générer un parasite qui peut passer à travers une alimentation, et planter l'ARDUINO.
J'ai eu le même problème avec un petit montage branché dans ma cuisine. En cause : le frigo.
J'ai simplement branché le montage sur une autre prise secteur, sur une autre ligne 230V que celle du frigo.
Et pourtant les deux lignes sont en parallèle dans le tableau, sur le même disjoncteur !
Explication probable : la longueur des fils, et donc leur résistance, suffit à absorber une partie de la surtension, et la rendre inoffensive.