Tout d'abord je suis totalement novice ici, donc tout est bon à prendre ^^
J'ai actuellement une arduino Uno et un powershield (Ka03 de Velleman), dans le but de réaliser un pendule inversé mais je n'en suis pas encore à la. Pour l'instant je souhaiterai déjà faire fonctionner mon moteur
J'ai donc récupéré un petit moteur a courant continu d'une imprimante (RS 545PH les références). Cependant j'aurai besoin d'une puissance plus élevée que les 5V délivrée par la carte arduino. J'ai donc récupéré l'alimentation de mon imprimante (16V, 625mA). Je suis maintenant confronté à un problème : je ne comprend pas (malgré les heures de recherches...) comment alimenter mon moteur avec cette alimentation externe
Je précise que le moteur fonctionne, l'alimentation aussi (le moteur branché directement à l'alim tourne très bien). J'ai pour l'instant branché mon alimentation sur les bornes + et - de mon power shield, j'ai mi le petit cavalier juste à côté sur EXT, mais lorsque je branche mon moteur aux bornes normalement dédiées à ça. Il ne se passe rien, il ne tourne même pas. Probablement un problème d'affectation dans mon script, mais je ne sais vraiment pas comment faire
Voilà mon script (je l'ai récupéré ici il me semble et j'ai simplifié quelques trucs). Lorsque je branche mon moteur sur les pins 3 GND des sorties DIGITAL (via le power shield ^^), mon moteur tourne, mais avec les 5V et non les 16
const int
PWM_A = 3;
void setup() {
// Open Serial communication
Serial.begin(9600);
pinMode(PWM_A, OUTPUT);
Serial.println("Motor shield DC motor Test:\n");
}
void loop() {
// Set the outputs to run the motor forward
analogWrite(PWM_A, 255); // Set the speed of the motor, 255 is the maximum value
delay(5000); // hold the motor at full speed for 4 seconds
// now stop the motor by inertia, the motor will stop slower than with the brake function
analogWrite(PWM_A, 0); // turn off power to the motor
Serial.println("End of the motor shield test with DC motors. Thank you!");
while(1);
}
Merci beaucoup de l'aide apportée et bonne soirée!
Oui je suis déjà tombé plusieurs fois dessus. La partie théorique sur les moteurs a été légérement abordée en cours (je suis en deuxième année de prépa actuellement), j'ai donc lu essentiellement la partie concernant arduino
"La broche EnA sera reliée à une sortie de PWM (dans mon cas la broche 3) et les broches In1 et In2 seront reliées à n’importe quelles broches numériques (2 et 4 pour moi). Il ne nous reste plus qu’à nous occuper de l’alimentation. Tout d’abord, je mets un fil entre la masse du shield et celle de l’Arduino"
Si j'ai bien compris, cette partie ne concerne que les shield non officiels c'est cela ? Avec mon shield arduino, je n'ai normalement pas besoin de faire ces branchements, ils sont fait directement en "clipsant" le shield sur la carte c'est bien ça ?
A tu la doc du shield moteur Ka03 de Velleman, car tu n'a pas le choix des affectations au niveaux des pins Arduino, généralement tu une relation entre les fonctions et les pins: genre In1 --> PIN XX, In2 --> Pin YYY, ect, c'est comme ça que cela se passe avec les shield moteurs, officiel ou pas.
Dans le programme tu doit utiliser DirA, car même si tu utilise qu'un sens, il faut dans tous les cas, activité cet PIN avec un etat logique 0 ou 1, sinon le moteur ne se mettra en marche.
Dans le programme tu doit utiliser , EnA, DirA, PWM_A, au minimum pour que le moteur puisse tourner.
D'accord en effet, je n'avais pas pris cela en compte. Une question, cette ligne
const int vitesseMotA=3;
const int sensMotA=12;
signifie que j'attribue au pin 12 la commande de direction c'est bien cela ? Mais comment je branche mon moteur ? Le cable rouge sur la sortie 3, le cable noir sur la sortie GND ? Ou bien je branche mon moteur sur les sorties du power shield (https://www.velleman.eu/downloads/0/infosheets/datasheet_ka03_fr.pdf là ou il y a écrit Sortie A)
EDIT : A quoi sert la variable EnA du coup ? Comment la "brancher" au reste ?
Je reprécise que mon shield est directement "clipsé" sur l'arduino
Merci d'avance!
Voilà le code complet :
// --- Déclaration des constantes des broches E/S numériques ---
const int vitesseMotA=3; // Constante pour la broche 3
const int sensMotA=12; // Constante pour la broche 12
const int freinMotA=9; // Constante pour la broche 9
// ////////////////////////// 2. FONCTION SETUP = Code d'initialisation //////////////////////////
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme
void setup() { // debut de la fonction setup()
Serial.begin(115200);
// ------- Broches en sorties numériques -------
pinMode (vitesseMotA,OUTPUT); // Broche vitesseMotA configurée en sortie
pinMode (freinMotA,OUTPUT); // Broche freinMotA configurée en sortie
pinMode (sensMotA,OUTPUT); // Broche sensMotA configurée en sortie
// ------- Broches en entrées numériques -------
// ------- Activation si besoin du rappel au + (pullup) des broches en entrées numériques -------
// ------- Initialisation des variables utilisées -------
// ------- Codes d'initialisation utile -------
digitalWrite(vitesseMotA,LOW); // a l'arret
digitalWrite(sensMotA,LOW);
digitalWrite(freinMotA,LOW); // frein off
} // fin de la fonction setup()
// ********************************************************************************
////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension
void loop(){ // debut de la fonction loop()
//------ test initial du moteur A ----
//- sens 1
digitalWrite(sensMotA,LOW); // sens 1
digitalWrite(vitesseMotA, HIGH); // vitesse maximale
delay(2000); // 2 secondes
digitalWrite(vitesseMotA, LOW); // vitesse maximale
//- sens 2
digitalWrite(sensMotA,HIGH); // sens 2
digitalWrite(vitesseMotA, HIGH); // vitesse maximale
delay(2000); // 2 secondes
digitalWrite(vitesseMotA, LOW); // vitesse maximale
while(1); // stop loop
}
Le moteur se branche sur le bornier A, borne 1 : GND (câble noir) et borne 2 : VCC moteur (câble rouge), Alimentation du shield bornier PWR, Batterie + sur +, Batterie - sur -.
Suivant position du cavalier, la carte arduino est alimenté par le shield ou par USB ou prise noir, si alimenté par shied la tension maxi qui alimente celui-ci (batterie) ne peut pas dépasser 12V.
Que se passe t'il quand tu utilises le programme Ka03_sample_code qui se trouve sur le site welleman, sans modifier celui-ci. Dans leur code il ne font pas référence à EnA, c'est franchement étrange.
Suivant position du cavalier, la carte arduino est alimenté par le shield ou par USB ou prise noir, si alimenté par shied la tension maxi qui alimente celui-ci (batterie) ne peut pas dépasser 12V
.
Ma tension d'entrée est de 16V. Le max autorisée sur le shield n'est pas de 55V comme indiqué sur la doc?
Si j'utilise le code "Ka03_sample_code" sans le modifier et que je fais les branchement que tu m'as dis, il ne se passe rien. Le cavalier est mis en "EXT", l'alimentation est bien branché sur le bornier + et - respectifs (y'a écrit PWR ^^) et j'ai testé le moteur sur les deux borniers moteurs A (bornes 1 et 2), et B (bornes 3 et 4) et il ne se passe rien. Le moteur ne tourne pas du tout
EDIT : Je précise que lorsque je tourne manuellement le moteur, la LED correspondante s'allume (vert dans un sens, rouge dans l'autre)
Je me suis mal exprimé concernant l'alimentation du shield et de la carte arduino, il y deux 2 cas :
1 cas : cavalier sur INT : dans ce cas, le shiel moteur alimente aussi la carte arduino, donc il n'y a plus qu'une souce d"alimentation pour les deux cartes, mais cette source ne doit pas dépasser 12 V.
2cas : cavalier sur Ext, il faut un source pour le shield, qui peut aller jusqu’à 55 V , et un source d'alim pour la carte arduino USB ou connecteur noir 12 V maxi.
En haut à droite de la carte il y 4 blocs de connecteurs avec 1 cavalier par bloc, peut tu donner la position des cavaliers, car cela impacte l'affectation des pins dans le programme.
Quand tu teste, la carte arduino est bien branché en USB, et l'alim 16 V sur le bornier PWR.
D'accord merci pour les précisions. Dans mon cas je suis donc alimenté en externe par les 16V de mon alimentation + le cable USB (celui ci alimente la carte j'imagine, alors que les 16V alimentent les moteurs)
Ok pour les cavaliers. Donc celui de l'alim est bien sur EXT. Et ceux des pins sont sur 3, 2, 9 et 8 (respectivement pour pwmA, dirA, pwmB et dirB)
Il me semble donc que ca correspond aux affectations du programme
int pwm_a = 3; //PWM control for motor outputs 1 and 2
int pwm_b = 9; //PWM control for motor outputs 3 and 4
int dir_a = 2; //direction control for motor outputs 1 and 2
int dir_b = 8; //direction control for motor outputs 3 and 4
La si cela ne fonctionne pas , c'est très étrange, de plus on ne trouve pas d'autre exemple que celui de velleman sur le Net, il doit manquer ?? quelques choses dans le code, car j'ai déjà mis en ouvre d'autre shield moteur pour arduino en version officiel ou autre sans soucis.
Je vais essayer de brancher un oscillo. Est ce que quelqu'un saurait me dire comment vérifier que les borniers moteurs sont bien reliés à l'alimentation ? Ou quoique ce soit pour avoir une idée d'où vient le problème ^^ ?