Pages: [1] 2   Go Down
Author Topic: moteur pas à pas qui chauffe  (Read 1301 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
j'ai réalisé un montage avec un moteur pas à pas branché comme ceci


et avec ce code
Quote
#include <Stepper.h> // inclusion de la librairie Stepper

const int nbr_pas = 200; // définit le nombre de pas pour un tour complet
Stepper mon_moteur(nbr_pas, 0, 1);// déclare un moteur pas à pas appelé mon_moteur,
       // 200 pas/tour, utilisant les broches 0 et 1 
       
       
void setup() {
 
   mon_moteur.setSpeed(20); // définit la vitesse de rotation à 20 tr/min
}
void loop()
{
  mon_moteur.step(400); // deux tour  ;
     delay(2000);
     
  mon_moteur.step(-800); // quatre tour dans l'autre sens ;
     delay(2000); }


le moteur et le code fonctionne mais le moteur fait des petits clic sans cesse et chauffe.. je ne sais pas pourquoi?
Logged

Toulouse
Offline Offline
Jr. Member
**
Karma: 0
Posts: 96
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Inverse 2 fils de ton moteur, il est peut-être mal cablé.
Logged

N'attendez pas de savoir pour entreprendre.
Drawall, le robot qui dessine : http://drawall.cc/

Sherbrooke, Québec, Canada
Offline Offline
Full Member
***
Karma: 1
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Pourriez-vous nous fournir une photo de votre montage ?

L'ami René
Logged

Tous pour un et un pour tous !

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Voici mon code et mon schéma aprés quelques modifications.
Le code fonctionne, mais le servo moteur ou le moteur pas à pas ont tendance à chauffer. Je pense que c'est du à des parasites; Mais je n'arrive pas à trouver comment y remedier.
C'est le montage qui ne doit pas étre optimal.
Pourriez vous aider un novice un peu perdu  smiley-wink
Je vous remercie

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
#include <Servo.h> // inclusion de la librairie Servo
#include <Stepper.h> // inclusion de la librairie Stepper

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
RTC_DS1307 RTC;

Servo myservo; // déclaration d'une variable de type Servo
int pos = 14; // variable contenant la position du servomoteur

const int nbr_pas = 200; // définit le nombre de pas pour un tour complet
Stepper mon_moteur(nbr_pas, 9, 10);// déclare un moteur pas à pas appelé mon_moteur,
       // 200 pas/tour, utilisant les broches 9 et 10 

int comled=6;     // init de la sortie de commande du retroeclairage du LCD (vers la base du transistor)
int bouton1=7;   // init entrée correspondant au bouton 1 = +
int bouton2=8;   // init entrée correspondant au bouton 2 = -
int bouton3=13;  // init entrée correspondant au bouton 3 = heure de distribution


int var1=0;  // variables pour le test des boutons
int var2=0;   
int var3=0;
int ancvar1=0;
int ancvar2=0;
int ancvar3=0;   


int compteurallumage=300; // variable temps retroeclairage (en dixième de secondes)
int heure1=0; // variable pour heure première distribution
int heure2=0; // variable pour heure deuxieme distribution
int heure3=0; // variable pour heure troisieme distribution
int heure4=0; // variable pour heure quatrieme distribution
int dist=0; // mode d'affichage 0=> affichage normal ; 1=> heure distribution 1 ; 2=> heure distribution 2 ; 3=> heure distribution 3 ; 4=> heure distribution 4


void setup() {
 
  myservo.attach(14); // attache la variable Servo à la broche 14 (A0)
  myservo.write(20);  // set servo a 20°
 
  mon_moteur.setSpeed(20); // définit la vitesse de rotation à 20 tr/min
 
  // set up de l'écran LCD
  pinMode(comled,OUTPUT);   // déclaration des sorties
 



  pinMode(bouton1,INPUT);  // déclaration des entrées
  pinMode(bouton2,INPUT);
  pinMode(bouton3,INPUT);
 
  digitalWrite(bouton1, HIGH);  // entrées par défaut à 1, évite une résistance de pull-UP.
  digitalWrite(bouton2, HIGH);
  digitalWrite(bouton3, HIGH);
 
  Serial.begin(9600);
  Wire.begin();
  RTC.begin();
  lcd.begin(16, 2);
 
  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
   RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}




void loop() {
   
 
  DateTime now = RTC.now();
    long time_mil = now.hour()*10000 + now.minute()*100 + now.second();
 
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
 
    if (compteurallumage>0)
    {
      compteurallumage=compteurallumage-1;
      digitalWrite(comled,HIGH);
    }
    else
    {
       digitalWrite(comled,LOW);
    }

 
  // reglage des distributions ;
  switch (dist) {
   
    case 0:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(now.hour());
      lcd.print(":");
      if (now.minute() < 10) {
      lcd.print("0");
      }
      lcd.print(now.minute());
      lcd.print(":");
      if (now.second() < 10) {
      lcd.print("0");
      }
      lcd.print(now.second());
      break;
   
    case 1:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Heure distrib 1?");
      lcd.setCursor(0, 1);
      lcd.print(heure1);
      lcd.print("H");
      break;
   
    case 2:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Heure distrib 2?");
      lcd.setCursor(0, 1);
      lcd.print(heure2);
      lcd.print("H");
      break;
     
    case 3:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Heure distrib 3?");
      lcd.setCursor(0, 1);
      lcd.print(heure3);
      lcd.print("H");
      break;
     
    case 4:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Heure distrib 4?");
      lcd.setCursor(0, 1);
      lcd.print(heure4);
      lcd.print("H");
      break;
  }

 
   // check des boutons
 
   var1=1-digitalRead(bouton1);
   var2=1-digitalRead(bouton2);
   var3=1-digitalRead(bouton3);
 
   if (var1==1) ancvar1=1;
   if (var2==1) ancvar2=1;
   if (var3==1) ancvar3=1;
 
 
 
   if (var1!=ancvar1) // relache du bouton 1
   {
      ancvar1=0;
     if (compteurallumage!=0)
     {
         switch (dist) {
            case 1:
              heure1=heure1+1;
              if (heure1==24) heure1=0;
              break;
            case 2:
              heure2=heure2+1;
              if (heure2==24) heure2=0;
              break;
            case 3:
              heure3=heure3+1;
              if (heure3==24) heure3=0;
              break;
            case 4:
              heure4=heure4+1;
              if (heure4==24) heure4=0;
              break;
          }
         
     }
     compteurallumage=300;
   }


if (var2!=ancvar2) // relache du bouton 2
   {
      ancvar2=0;
     if (compteurallumage!=0)
     {
         switch (dist) {
            case 1:
              heure1=heure1-1;
              if (heure1<0) heure1=23;
              break;
            case 2:
              heure2=heure2-1;
              if (heure2<0) heure2=23;
              break;
            case 3:
              heure3=heure3-1;
              if (heure3<0) heure3=23;
              break;
            case 4:
              heure4=heure4-1;
              if (heure4<0) heure4=23;
              break;
          }
         
     }
     compteurallumage=300;
   }

if (var3!=ancvar3) // relache du bouton 3
   {
     ancvar3=0;
     if (compteurallumage!=0)
     {
     
        dist=dist+1;
     }
       if (dist==5)
       {
         dist=0;
       }
    compteurallumage=300;
   }




//commande des moteurs ;

    if (heure1!=0 && heure1*10000 == time_mil) // distribution 1 ;
    { myservo.write(140); //tourne servo a 140°;
      delay (5000);
      mon_moteur.step(200); // un tour vis sans fin ;
      delay (5000) ;
     myservo.write(20); // remet servo en position neutre;
    }
 
    if (heure2!=0 && heure2*10000 == time_mil) // distribution 2 ;
    { myservo.write(140); //tourne servo a 140°;
      delay (5000);
      mon_moteur.step(200); // un tour vis sans fin ;
      delay (5000) ;
     myservo.write(20); // remet servo en position neutre;
    }
   
    if (heure3!=0 && heure3*10000 == time_mil) // distribution 3 ;
    { myservo.write(140); //tourne servo a 140°;
      delay (5000);
      mon_moteur.step(200); // un tour vis sans fin ;
      delay (5000) ;
     myservo.write(20); // remet servo en position neutre;
    }
   
    if (heure4!=0 && heure4*10000 == time_mil) // distribution 4 ;
    { myservo.write(140); //tourne servo a 140°;
      delay (5000);
      mon_moteur.step(200); // un tour vis sans fin ;
      delay (5000) ;
     myservo.write(20); // remet servo en position neutre;
    }
 
   
   delay(100);

}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sinon, pour expliquer le projet : c'est pour réaliser un distributeur de nourriture pour animaux.
Un module horloge ds 1307, un ecran LCD , les boutons pour regler les heures de distributions (possibilite de faire 4 distributions par jour) et un servo moteur pour ouvrir une trappe (ou la nourriture s'écoulera) ainsi qu'un moteur pas à pas (pour réaliser une vis sans fin pour pousser la nourriture dans la trappe).
Logged

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1238
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
C'est quoi le plat de nouille ci-dessus ?
C'est illisible smiley-sad
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3430
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ce moteur pas-à-pas, quelle tension? et quel courant dans les bobines? Pour se faire une idée de la puissance.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

voila, j'ai essayé de refaire plus propre.
Le moteur pas à pas 12V ; 0.3A (celui qui chauffe)
Et le servo c'est un futaba S3003 (lui il vibre)
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Petite info supplémentaire : ma led TX clignote sans cesse
Logged

france
Offline Offline
God Member
*****
Karma: 15
Posts: 846
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tx clignote normalement lors de chaque Serial.print pour passer des infos sur le serial monitor.

Le moteur pas à pas cherche à verrouiller sa position, il consomme du courant pendant qu'il ne tourne pas.
Avec une vis sans fin qui ne peut pas tourner toute seule, ça ne me semble pas utile de maintenir le couple statique en permanence.
Logged

Christian

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci beaucoup.
Du coup, comment je fais pour ne pas maintenir le couple statique en permanence?
Logged

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1238
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
merci beaucoup.
Du coup, comment je fais pour ne pas maintenir le couple statique en permanence?
La seule façon de maintenir le couple c'est d'alimenter le moteur.
Quand tu dis que le moteur chauffe, quelle température ?
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3430
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci beaucoup.
Du coup, comment je fais pour ne pas maintenir le couple statique en permanence?
Tu coupes le moteur tout simplement.

En même temps qu'une bobine chauffe quand on passe du courant dedans n'a rien de choquant en soit.

Mais pour ton application, il n'y a, à priori, pas besoin de tenir le moteur alimenté entre deux distributions. Je doute que le poids de la nourriture puisse entraîner la vis sans fin.
Logged

Pages: [1] 2   Go Up
Jump to: