couper alim servomoteur

bonsoir à tous,

je suis débutant dans le domaine de l’électronique et de l'arduino.

j'ai comme projet de faire un aquarium automatisé avec dosage du produit automatiquement.

j'ai fait un montage avec une seringues pour le produit à mettre dans l'aquarium qui fonctionne très bien en manuel mais j'aurais aimé le faire en automatique avec un servomoteur.

le servomoteur va fonctionner environ 30 secondes par jour.

j'ai donc essayé de programmer pour que ça fonctionne mais celui-ci fait toujours du bruit (on dirais qu'il cherche sa position).

comment pourrais-je faire pour couper son alimentation jusqu’à la prochaine utilisation?

transistors? comment le placer? raccordement?

merci d'avance

Ton servo fait du bruit parce qu'il est mal alimenté. Je suis presque sur que tu passe en direct sur ton arduino?

Alimente le en 5V à part, (via USB direct par exemple) en reliant les masses, le servo ne devrait plus grésiller

Bonsoir Jambe,

merci pour ta réponse très rapide.

Effectivement, il était branché directement sur l'arduino

je vais essayer a partir d'un autre usb

et dans le cas ou j'utilise un chargeur style chargeur de téléphone, ou je prend mon 5v?

Sur les côtés les deux broches du milieu c'est data + et data -

Bonjour,
un peu de lecture : http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.COMPRENDREAlimentationArduinoServomoteurs

Lien intéressant mais toutefois j'ai une objection, dans la théorie il est effectivement possible d'alimenter un servo directement avec la carte Arduino.

Sauf qu'en pratique et expérience personnelle (avec des mini 9G), le servo grésille quand il est alimenté par la carte. Problème résolu passant par un USB a part.

J'ai eu le même problème en pilotant un servo par un potentiomètre relié sur une entrée analogique de l'arduino, tous deux alimentés par l'arduino
Quand le servo bougeait, la tension du potentiomètre changeait et le servo bougeait, il grésillait toujours sans que je touche le potentiomètre.
J'ai alimenté le servo par une autre alim et le problème a disparu.

bonjour,
pour piloter via un potar, la solution la plus simple est de passer par un mofset ou équivalent.
l'alim du servo étant faite via une autre source, plus de soucis.

idem pour couper l'alim sur le servo, un transistor et le tour est joué.

Oui bien sûr mais la volonté de couper l'alimentation venait du fait que le servo grésille, autant solutionner la vrai cause du problème

xave_be:
et dans le cas ou j'utilise un chargeur style chargeur de téléphone, ou je prend mon 5v?

bonsoir,

je reviens sur ma question, lorsqu'on utilise une alim connectée directement sur la prise "style jack" en 12v,ou je prend mes 5volts pour alimenter mon servo?

le mieux c'est d'ajouter un régulateur type 7805 qui transformera le 12v en 5v comme ça ce n'est pas l'arduino mais le régulateur qui fourni le 5v au servo.

Bonsoir,

dans la théorie il est effectivement possible d'alimenter un servo directement avec la carte Arduino.

Sauf qu'en pratique

... ok, c'est la pratique qui fait la décision

bonsoir à tous,

J'ai alimenté le servomoteur avec une autre alimentation mais il fait toujours ce fameux "grésillement" alors je ne sais plus quoi faire.

help me !!

merci d'avance

slt tu à essayer de modifier les valeurs d'angle mini ou maxi ? - si le servo n'arrive pas se caler à la valeur demandée il peut grésiller.

et à tu essayer de couper l'alim du servo avec soit un relais soit un transistor suivant la puissance de ton servo ?

Donne nous ton code alors

voici le code de la page generale

#include <Servo.h>



/*****************************************************************************************************************
Librairie
*****************************************************************************************************************/
#include <Wire.h>
#include <RTClib.h>
#include <Servo.h>//include <SoftwareServo.h>
#include <LiquidCrystal.h>
#include <OneWire.h> // Inclusion de la librairie OneWire


/*****************************************************************************************************************
Variables Temperature ( Chauffage + ventilation )
*****************************************************************************************************************/
//const int chauffage = A1; // pour futur systeme de ventilation et coupure chauffage
const int consigne_temp_max_aqua = 27.0; // 27°
const int consigne_temp_min_aqua = 22.0; //22°
const int delta_t = 1.00;
const int DS18S20_Pin = 6; //DS18S20 
OneWire ds(DS18S20_Pin);  
float temperature;
boolean ventilation_statut;

/*****************************************************************************************************************
Variables Horloge
*****************************************************************************************************************/
RTC_DS1307 RTC; //Classe RTC_DS1307
int hour;
int minute;
int second;
int day;
int month;
int year;

/*****************************************************************************************************************
Variables Ecran LCD
*****************************************************************************************************************/
LiquidCrystal lcd(13,11,5,4,3,2);

const int retroeclairage_lcd = A3;
int heure_depart_retroeclairage_lcd = 7;
int heure_fin_retroeclairage_lcd = 23;
// Definition du caractere °
byte degrees[8] = {
  
  B01100,
  B10010,
  B10010,
  B01100,
  B00000,
  B00000,
  B00000,
  B00000,
}; // byte degrees

/*****************************************************************************************************************
Variables Nourriture
*****************************************************************************************************************/
const int heure_nourriture = 17;
const int minute_depart_nourriture = 0;
const int minute_fin_nourriture = 30;
boolean nourriture_statut;

/*****************************************************************************************************************
Variables Servomoteur pour serringues ( EASY CARBO ) tous les jours à 8:00:00 jusquà 8:00:15
*****************************************************************************************************************/
Servo seringue1; // easy carbo
const int pin_seringue_1 = 10;
const int angle_max=160; //valeur en degré pour reglage fin servomoteur
const int angle_min=10;  //valeur en degré pour reglage fin servomoteur
const int heure_seringue= 19;
const int minute_seringue = 1;
const int seconde_depart_seringue = 0; // 0 seconde et non 00
const int seconde_fin_seringue = 15;
boolean easycarbo_statut;

/*****************************************************************************************************************
Variables Capteurs Niveau + Pompes 
*****************************************************************************************************************/
const int niveau_max = 8; // flotteur niveau max contact ouvert quand eau au max
const int niveau_min = 9; // flotteur niveau min contact ouvert quand eau au min
const int bp_vidange = A0;
boolean niveau_max_statut = true; //etat repos = true
boolean niveau_min_statut = true; //etat repos = true
boolean bp_vidange_statut = true; //etat repos = true
const int pompe_vidange = 12;
const int pompe_remplissage = 7;
const int pompe_filtration = A2;
boolean pompe_vidange_statut = true; // etat repos = true
boolean pompe_remplissage_statut = true; // etat repos = true


/*****************************************************************************************************************
Variables Eclairage
*****************************************************************************************************************/
const int eclairage = A1;
const int heure_depart_eclairage = 12;
const int heure_fin_eclairage = 22;
boolean eclairage_statut;

void setup(void) {

/*****************************************************************************************************************
Setup Capteurs Niveau + Pompes
*****************************************************************************************************************/
//capteurs niveau + pompes ///////////////////////////////////////////////////////////////////////////////////
pinMode(niveau_max, INPUT);
pinMode(niveau_min, INPUT);
pinMode(pompe_vidange, OUTPUT); //relais 1
pinMode(pompe_remplissage, OUTPUT); //relais 2
pinMode(pompe_filtration, OUTPUT); // relais 3
digitalWrite(pompe_vidange,HIGH);  // attention est HIGH a l'etat repos
digitalWrite(pompe_remplissage,HIGH);  // attention est HIGH a l'etat repos
digitalWrite(pompe_filtration,HIGH);  // attention est HIGH a l'etat repos


/*****************************************************************************************************************
Setup Ecran LCD
*****************************************************************************************************************/  
pinMode (retroeclairage_lcd, OUTPUT);
lcd.begin(16,2);
digitalWrite(retroeclairage_lcd, HIGH);
lcd.setCursor(1,0);
lcd.print ("AQUADUINO V1.0");
lcd.setCursor(4,1);
lcd.print ("by  Xave");
delay (5000);
lcd.clear();

/*lcd.setCursor(0,0);
lcd.print ("Nom du programme:");
lcd.setCursor(0,1);
lcd.print ("Flotteur V13");
delay (4000);
lcd.clear();*/
lcd.noDisplay();
digitalWrite(retroeclairage_lcd, LOW);
// initialiser le caractère ° dans le LCD
  lcd.createChar( 0, degrees );
  
  
/*****************************************************************************************************************
Setup Horloge
*****************************************************************************************************************/  
  
Serial.begin(57600); //Démarrage de la communication
Wire.begin(); //Démarrage de la librairie wire.h
RTC.begin(); //Démarrage de la librairie RTClib.h
  
  //Si RTC ne fonctionne pas
  if (! RTC.isrunning()) {
     Serial.println("RTC ne fonctionne pas !");}
    
  //Met à l'heure à date à laquelle le sketch est compilé
  RTC.adjust(DateTime(__DATE__, __TIME__)); 
          
  
/*****************************************************************************************************************
Setup Servomoteur pour serringues ( EASY CARBO )
*****************************************************************************************************************/  
seringue1.attach(pin_seringue_1);
seringue1.write(angle_min);
//seringue1.detach(pin_seringue_1);

/*****************************************************************************************************************
Setup Temperature ( Chauffage + ventilation )
*****************************************************************************************************************/
/*pinMode(chauffage, OUTPUT); // relais 4
digitalWrite(chauffage,HIGH);  // attention est HIGH a l'etat repos
*/


/*****************************************************************************************************************
Setup Eclairage
*****************************************************************************************************************/
pinMode(eclairage, OUTPUT); // relais 4
digitalWrite(eclairage,HIGH);  // attention est HIGH a l'etat repos


} // void setup


void loop(void) {
  
Horloge();
Niveau_Aqua_Pompes();
Lcd_Serial();
Eclairage();
Nourriture();
EasyCarbo();
Chauffage_Ventilation(); 
//seringue1.detach(pin_seringue_1);

} // void loop

voici maintenant le code pour le servo

/*****************************************************************************************************************
Loop Servomoteur pour serringues ( EASY CARBO )
*****************************************************************************************************************/  
void EasyCarbo(){
     
    if( hour == heure_seringue && minute == minute_seringue && second >= seconde_depart_seringue && second < seconde_fin_seringue) { 
    //seringue1.attach(pin_seringue_1);
    seringue1.write(angle_max);
    easycarbo_statut = true;
    }else{
    seringue1.write(angle_min);
    easycarbo_statut = false;}//delay(5000);
    //seringue1.detach();

} // void EasyCarbo

en esperant que j'ai fait mon programme correctement :confused:
merci d'avance

Aquaduino_V1.0.ino (7.59 KB)

EasyCarbo.ino (675 Bytes)

modifier les valeurs d'angle mini ou maxi ?

Bonsoir,
+1,

d'après mes expériences et un rapide calcul, il est probable que tes valeurs 10 et 160 vont au delà des possibilités du servo

stp mets les deux à 90 et dis nous s'il y a encore le bruit