Je vous ai réaliser une petite vidéo mettant en fonctionnement l’électronique et en parallèle le code qui ce déroule au fur et à mesure des opérations réalisée :
Fabrication et montage de la motorisation, moteur et poulie central d’entraînement. J’ai également centré le plateau et la poulie avec deux roulements à billes pour skateboard. Le tout fonctionne assez bien, le moteur (9/12v) récupéré manque peut être de pêche, on verra plus tard s’il fallait le changer avec un autre. Le disque tourne assez vite, mais la vitesse ralenti dès lors qu’on y met du produit et l’aspiration, ce qui est normal mais qu’il faut prendre en compte.
Clean-Maggie aura besoin de faire tourner le disque dans les deux sens de rotations. Ayant du courant continu pour alimenter le moteur il me faut créer un système pouvant envoyer du courant dans un sens et également dans l’autre, sans faire de court-circuit bien évidemment.
Après pas mal de réflexion et de schéma sur papier, tout en tenant compte qu’il me faut utiliser seulement le matériel que j’ai en stock, j’ai trouver une solution en utilisant 3 relais commandés par l’Arduino.
Le relai “CH1” gère l’alimentation en 5 volt, donc ( 2 + 1 = On & 2 + 3 = Off ). Les relais “CH2” et “CH3” fonctionne en binôme, ce qui donne ( 5 + 6 & 8 + 9 = sens de rotation A ) et ( 5 + 4 & 8 + 7 = sens de rotation B). Ce qui donne se code Arduino :
#define CH1 2 #define CH2 3 #define CH3 4 void setup() { pinMode(CH1, OUTPUT); pinMode(CH2, OUTPUT); pinMode(CH3, OUTPUT); digitalWrite(CH1, HIGH); digitalWrite(CH2, HIGH); digitalWrite(CH3, HIGH); } void loop() { // Rotation A digitalWrite(CH1, HIGH); // Alimentation OFF /* delay(1000); // Pause de 1 seconde */ digitalWrite(CH2, HIGH); // Relai 5 + 6 digitalWrite(CH3, HIGH); // Relai 8 + 9 /* delay(1000); // Pause de 1 seconde */ digitalWrite(CH1, LOW); // Alimentation ON /* delay(30000); // Rotaion de 30 secondes */ // rotation B digitalWrite(CH1, HIGH); // Alimentation OFF /* delay(1000); // Pause de 1 seconde */ digitalWrite(CH2, LOW); // Relai 5 + 4 digitalWrite(CH3, LOW); // Relai 8 + 7 /* delay(1000); // Pause de 1 seconde */ digitalWrite(CH1, LOW); // Alimentation ON /* delay(30000); // Rotaion de 30 secondes */ }
J’ai commenté les “delay” car ils ne sont pas indispensable au bon fonctionnement de l’échangeur de sens de rotation, cependant je ne peut que conseiller de marquer des pauses entre chaque phase d’ouverture ou de fermeture des relais, afin d’éviter le moindre court-circuits même s’il ne serai que d’une fraction de seconde. Il est à noter que les relais Arduino ont 3 connecteurs “1” “2” “3” (attention ça n’est pas inscrit comme cela sur les relais, c’est pour l’exemple suivant) qui donne :
Relai ouvert (non alimenté) par défaut :
Relai fermer (sous tension via 5 v) :
Sur les photos on vois écris “12 v” ce qui est normal car j’ai fait les tests avec une alimentation de 12 volts, mais le disque tourne “trop” vite (le produit de nettoyage par force centrifuge ne reste pas sur le disque). Je suis en train de modifier une “petite” alimentation ATX au format (PRRRRrrrr) 😀 que j’ai récupéré dans un vieux mini pc. J’utiliserai donc le 5 v qui aura un bon ampérage. Mais également d’autres tensions comme le 12 et le 3,3 volts.
Modification de la micro alimentation : Après avoir dessoudé tout les fils du bloc, j’ai installé de nouveaux fils plus long et d’une section un peu plus importante. J’ai conserver sur l’alim le 12v, le 5v et le 3,3v. Masse comprise seul le 3,3v n’a pas été doublé. J’ai également câblé le fils pour l’allumage de l’alimentation.
Ayant reçus mon imprimante 3D depuis quelques jours, j’ai pu m’attaquer à la conception et à l’impression des premières pièces sur mesure pour Clean-Maggie. Je me suis rendu à l’évidence que le gonfleur était trop bruyant et peu efficace, j’ai donc entrepris la fabrication d’une turbine qui fonctionnera avec l’aide d’un moteur de disque dur (de type brushless).
Montage sur breadboard de l’électronique permettant de gérer le moteur du disque dur. Il fait savoir que les moteurs de disque dur, comme beaucoup de moteurs (Ventilateurs Informatique, Moteurs de drone …), sont des moteurs de type “Brushless” (sans balais). Ces moteurs fonctionne avec des impulsions sur des phases grace à un signal carré … Enfin grossièrement, le moteur n’est pas polarisé (pas de bornes + et -), il ne fonctionne qu’avec plusieurs phase (Fils rouge +) qui impulse un courant électrique dans un ordre circulaire. Dans mon cas, le moteur HDD que j’ai récupéré, à 3 phases et un point commun. Il me faut donc pour faire tourner le moteur :
Le bruit du moteur m’a de suite fait rappeler l’un des premier tube de le “Sweedish House Mafia”, je me suis d’ailleurs précipité pour le signale sur Twitter 😀
Composants utilisés :
Code Arduino (mis à jour à chaque étape) :
#include #include LiquidCrystal_I2C lcd(0x3f,16,2); #define CH1 2 #define CH2 3 #define CH3 4 #define CH4 5 void setup(){ pinMode(CH1, OUTPUT); pinMode(CH2, OUTPUT); pinMode(CH3, OUTPUT); pinMode(CH4, OUTPUT); digitalWrite(CH1, HIGH); digitalWrite(CH2, HIGH); digitalWrite(CH3, HIGH); digitalWrite(CH4, HIGH); lcd.init(); lcd.init(); lcd.backlight(); // Bienvenue lcd.setCursor(0,0); lcd.print("Clean-Maggie"); lcd.setCursor(0,1); lcd.print("bilougates.fr"); delay(5000); // Rotation lcd.init(); lcd.setCursor(0,0); lcd.print("Rotation"); lcd.setCursor(0,1); lcd.print("Start in 05"); delay(1000); lcd.setCursor(0,1); lcd.print("Start in 04"); delay(1000); lcd.setCursor(0,1); lcd.print("Start in 03"); delay(1000); lcd.setCursor(0,1); lcd.print("Start in 02"); delay(1000); lcd.setCursor(0,1); lcd.print("Start in 01"); delay(1000); lcd.init(); digitalWrite(CH1, LOW); delay(5000); // Mouillage lcd.init(); lcd.setCursor(0,0); lcd.print("Mouillage"); lcd.setCursor(0,1); lcd.print("du disque"); delay(7000); lcd.init(); lcd.setCursor(0,0); lcd.print("Laissez le"); lcd.setCursor(0,1); lcd.print("produit agir"); delay(7000); lcd.init(); // Aspiration lcd.print("Aspiration"); lcd.setCursor(0,1); lcd.print("Start in 05"); delay(1000); lcd.setCursor(0,1); lcd.print("Start in 04"); delay(1000); lcd.setCursor(0,1); lcd.print("Start in 03"); delay(1000); lcd.setCursor(0,1); lcd.print("Start in 02"); delay(1000); lcd.setCursor(0,1); lcd.print("Start in 01"); delay(1000); lcd.init(); digitalWrite(CH4, LOW); lcd.setCursor(0,0); lcd.print("Aspiration"); lcd.setCursor(0,1); lcd.print("Fin dans 30"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 29"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 28"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 27"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 26"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 25"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 24"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 23"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 22"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 21"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 20"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 20"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 19"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 18"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 17"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 16"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 15"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 14"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 13"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 12"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 11"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 10"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 09"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 08"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 07"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 06"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 05"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 04"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 03"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 02"); delay(1000); lcd.setCursor(0,1); lcd.print("Fin dans 01"); delay(1000); lcd.setCursor(0,1); lcd.print("Terminer "); digitalWrite(CH4, HIGH); // Arrêt Rotation delay(3200); lcd.init(); digitalWrite(CH1, HIGH); lcd.setCursor(0,0); lcd.print("Rotation"); lcd.setCursor(0,1); lcd.print("Terminer"); // Message de Fin delay(3200); lcd.init(); lcd.setCursor(0,0); lcd.print("Vinyl Clean"); lcd.setCursor(0,1); lcd.print("bonne ecoute"); lcd.noBacklight(); lcd.noDisplay(); } void loop() { }