Go Down

Topic: Bac-Ka-Poux-Bêle 2019 (Read 17902 times) previous topic - next topic

nachwa

bonjour à tous,
Comme indiqué dans le titre, j'ai un probleme avec l'arduino. Pour info, je l'utilise dans le cadre d'un projet scolaire (controler un transformateur leur temperature courant tension et puissance), et je suis débutant dans la programmation.

Voici le code :

#include <SPI.h>
#include <Ethernet.h>

#include "lm35.h"
#define LM35PIN 0
#define LM35
#define LM35TYPE  lm35

#include "ACS712.h"
#define acsPIN 1
#define ACS712

#include "ZMPT101B.h"
#define zmpt101bPIN 2
#define ZMPT101B

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192 , 168 , 1 , 101 }; //Enter the IP of ethernet shield
byte serv[] = { 192 , 168 , 1 , 100 } ; //Enter the IPv4 address
EthernetClient cliente;
float temp;
int tempPIN= 0;

float courant;
int courantPIN=1;

float tension;
int tensionPIN=2;
double sensorValue=0;
double sensorValue1=0;
int crosscount=0;
int climbhill=0;
double VmaxD=0;
double VeffD;
double Veff;

#define pin_courant A1
#define pin_tension A2



void setup() {
Serial.begin(9600); //setting the baud rate at 9600
Ethernet.begin(mac, ip);

}
void loop () {
  String data ;
  temp=analogRead(tempPIN);
  temp= (5.0 * temp * 100.0)/1024.0;
 
  float average=0;
  for (int i=0; i < 1000; i++)
   ( courant = average + (.044*analogRead(A1) -3.78)/1000);

   sensorValue1=sensorValue;
delay(100);
sensorValue = analogRead(A0);
if (sensorValue>sensorValue1 && sensorValue>511){
  climbhill=1;
  VmaxD=sensorValue;
  }
if (sensorValue<sensorValue1 && climbhill==1)
 { climbhill=0;
  VmaxD=sensorValue1;
  VeffD=VmaxD/sqrt(2);
  Veff=(((VeffD-420.76)/-90.24)*-210.2)+210.2;
  Serial.println(Veff);
  VmaxD=0;}

 
 if (cliente.connect(serv,8080)) { //Connecting at the IP address and port we saved before
Serial.println("connected");

cliente.println(" POST /ethernet/data.php? "); //Connecting and Sending values to database
cliente.print("temperature=");
cliente.print(temp);
cliente.print("courant=");
cliente.print(courant);
cliente.print("tension=");
cliente.print(tension);
cliente.println( " HTTP/1.1 ");
cliente.println( " Host: 192 , 168 , 1 , 101 " );
cliente.println ();
cliente.println ();
//Printing the values on the serial monitor
Serial.print("Temperature=  ");
Serial.println(temp);
Serial.print("courant=   ");
Serial.println(courant);
Serial.print("Tension=   ");
Serial.println(tension);

cliente.stop(); //Closing the connection
}
else {
// if you didn't get a connection to the server:
Serial.println(" Connection failed");
}
delay(5000);
}

Rommm1

Bonjour je m'adresse à vous aujourd'hui car je dois réaliser un projet dont le but est de pouvoir faire varier la hauteur de coupe d'une tondeuse(30 mm 50 mm 70 mm) a distance a partir d'un logiciel que j'ai déjà crée(sur App Inventor 2). J'ai besoin d'utiliser 4 servomoteurs (1 par roue).Deux d'entre eux on une rotation inverse. J'ai déjà réaliser mon programme mais je n'arrive pas a comprendre pourquoi il ne fonctionne pas car les servos font la rotation de la partie "setup" mais ne font rien lorsque sur internet je clique sur le bouton "30 mm","50 mm" ou "70mm" , si certains sont assez fort en arduino j'aimerai bien votre aide ^^
(J'utilise une carte méga ainsi qu'un shield ethernet V2)

Code :
  #include <SPI.h>
  #include <Ethernet2.h>
  #include <Servo.h>
  Servo ServoAVG;
  Servo ServoAVD;
  Servo ServoARG;
  Servo ServoARD;
  int pos = 0;     
  int posi = 0;
  byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0xF6, 0x22 };
  byte ip[] = { (mon IP que je cache) };
  byte subnet[] = { 255, 255, 255, 0 };               
  EthernetServer server(80);                             
  String readString;





void setup() {
  Serial.begin(9600);
    ServoAVG.write(pos);
    ServoAVD.write(posi);
    ServoARG.write(posi);
    ServoARD.write(pos);
    ServoAVG.attach(5);
    ServoAVD.attach(9);
    ServoARG.attach(7);
    ServoARD.attach(6);
  Ethernet.begin(mac, ip, subnet);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
              }

void loop() {
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {   
      if (client.available()) {
        char c = client.read();
     
        if (readString.length() < 100) {
              readString += c;
       
         }
 
         if (c == '\n') {         
           Serial.println(readString);
             client.println("HTTP/1.1 200 OK");
             client.println("Content-Type: text/html");
             client.println();
             client.println("<HTML>");
             client.println("<HEAD>");
             client.println(" <meta name='apple-mobile-web-app-capable' content='yes' />");
             client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />");
             client.println("<link rel='stylesheet' type='text/css' href='https://randomnerdtutorials.com/ethernetcss.css' />");
             client.println("<TITLE>Hauteur de coupe de la tondeuse</TITLE>");
             client.println(" </HEAD>");
             client.println(" <BODY>");
             client.println(" <H1>TONDEUSE</H1>");
             client.println(" <hr />");
             client.println("<br />");
             client.println("<H2>Hauteurs:</H2>");
             client.println(" <br />");
             client.println(" <a href=\"/?button1on\"\">30mm</a>");
             client.println("<a href=\"/?button2on\"\">50mm</a>");
             client.println(" <a href=\"/?button3on\"\">70mm</a>");
             client.println(" <br />");
             client.println(" <br />");
             client.println(" <br />");
             client.println("</BODY>");
             client.println(" </HTML> ");   
           
     
           delay(1);
           
           client.stop();
           //POSITION 1 30mm
           if (readString.indexOf("?button1on") >0){
              ServoAVG.write(pos = 0);
              ServoAVD.write(posi = 180);
              ServoARG.write(posi = 180);
              ServoARD.write(pos = 0);
              delay(50);
               for(pos = 0; pos < 80; pos += 3) 
                {                               
                  ServoAVG.write(pos);   
                  ServoARD.write(pos);         
                 delay(50);
                }
               for(posi = 180; posi > 100; posi -= 3)
               {
                  ServoAVD.write(posi);
                  ServoARG.write(posi);
                 delay(50);
               }
           }
           //POSITION 2 50mm
           if (readString.indexOf("?button2on") >0){
              ServoAVG.write(pos = 0);
              ServoAVD.write(posi = 180);
              ServoARG.write(posi = 180);
              ServoARD.write(pos = 0);
              delay(50);
               for(pos = 0; pos < 45; pos += 3)
               
                {                                 
                  ServoAVG.write(pos);   
                  ServoARD.write(pos);           
                 delay(50);
                }
              for(posi = 180; posi > 135; posi -=3)
              {
                 ServoAVD.write(posi);
                 ServoARG.write(posi);
                delay(50);
              }
              }
           }
           //POSITION 3 70mm
           if (readString.indexOf("?button3on") >0){
              ServoAVG.write(pos = 0);
              ServoAVD.write(posi = 180);
              ServoARG.write(posi = 180);
              ServoARD.write(pos = 0);
              delay(50);
                for(pos = 0; pos < 10; pos += 3)
                {                               
                  ServoAVG.write(pos);     
                  ServoARD.write(pos); 
                 delay(50);                     
                }
               for(posi = 180; posi >170; posi -=3)
               {
                ServoAVG.write(posi);
                ServoARG.write(posi);
               delay(50); 
               }
           }
         
       
            readString=""; 
           
         }
       }
    }
}

blodewedd

Bonjour

je souhaite détecter un seuil (une distance) à l'aide d'un capteur ToF (time of flight ou temps de vol).
pour l'instant je veux juste allumer une led si je dépasse le seuil.

je mets plus bas le code utilisé.
(je suis partie de l'exemple fourni par la librairie)

la partie affichage de la distance fonctionne mais je n'arrive pas à commander la led.
pouvez-vous m'aider ?
Merci
 

#include "Adafruit_VL53L0X.h"
#include <SoftwareSerial.h>
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
unsigned int mesure;
int Pin = 2;
//int analogPin = A4;
int val = 0;
#define seuil 200

void setup() {
  Serial.begin(115200);

  // wait until serial port opens for native USB devices
  while (! Serial) {
    delay(1);
  }
 
  Serial.println("Adafruit VL53L0X test");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
  // power
  Serial.println(F("VL53L0X API Simple Ranging example\n\n"));

pinMode(Pin,OUTPUT);
digitalWrite(Pin, LOW);
}


void loop() {
  VL53L0X_RangingMeasurementData_t measure;
   
  Serial.print("Reading a measurement... ");
  lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!

  if (measure.RangeStatus != 4) {  // phase failures have incorrect data
    Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
  } else {
    Serial.println(" out of range ");
  }
  val=analogRead(A4);
  Serial.println(val);
if (val > seuil)
 {
  digitalWrite(Pin,HIGH);
 }   

  delay(100);
}





hbachetti

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

al1fch

#304
May 20, 2019, 08:56 pm Last Edit: May 20, 2019, 09:03 pm by al1fch
Quote
je suis partie de l'exemple......
Encore une  qui a 'tout faux' (où poster ? comment publier le code ?) et qui n'a pas eu l'idée de se renseigner sur le fonctionnement du forum avant de poster

vincentD67

Bonjour,
je suis en train de réaliser une commande de moteur via une communication RF (2,4GHz) mais j'utilise ces modules: https://www.mikroe.com/nrf-t-click

D'un côté j'ai connecté ce shield (https://www.robotshop.com/en/joystick-shield-v24.html) à une arduino UNO qui sert de joystick. Sur cette même UNO je branche un des modules RF.

De l'autre côté j'ai une arduino MEGA-2560 qui est connecté au second module pour recevoir l'instruction du joystick.

Je me suis basé sur un mix de ces 2 codes là:
- partie RF = http://educ8s.tv/nrf24l01/
- partie Joystick = https://skyduino.wordpress.com/2012/03/27/arduino-utiliser-un-joystick-pour-controler-la-directionvitesse-dun-robot/

J'ai déjà testé la partie Joystick en sortant sur la liaison série ce que le programme sort en fonction de la position du joystick donc a priori pas d'erreur.

Mon problème c'est que la 2e carte ne reçoit a priori pas les bonnes infos... En suivant via le Moniteur Série ce qu'elle reçoit de la 1ere c'est pas du tout bon. Il reçoit des "nan" ou des "ovf" et des nombres qu'ils ne devraient pas.

Je voulais donc savoir s'il y avait de grosses erreurs dans mon code ou s'il faut rajouter certaines précisions pour la liaison RF...
Egalement il y a-t-il une distance minimum entre les 2 modules ?

Merci d'avance pour votre aide.

Benoitwoodland

Bonjour,

J'aurai besoin d'aide pour crée un programmateur d'arrosage pour faire fonctionner 3 électrovannes controlés par des relais

j'ai réeussi a faire quelque chose que je règle dans le code directement avant de compilé, mais je cale pour la posibilité de réglage avec plusieurs bouton avec petit écran LCD.

voici mon code sans possibilité de réglage manuel   :smiley-confuse:

merci d'avance.

#include <Wire.h>
#include "RTClib.h"



RTC_DS3231 rtc;

int relais = 2; //definition du pin N°7 comme connection avec mon relais
int relais1 = 3;
int relais2 = 4;
int relais3 = 5;
int pressurecontrol = A0;



void setup () {
 
  Wire.begin(); //Démarrage de la librairie wire.h
  rtc.begin(); //Démarrage de la librairie RTClib.h
  pinMode(relais, OUTPUT); //definis relais comme sortie
  pinMode(relais1, OUTPUT);
  pinMode(relais2, OUTPUT);
  pinMode(relais3, OUTPUT);
  pinMode(pressurecontrol, INPUT);
 
  digitalWrite(relais, LOW);
  digitalWrite(relais1, LOW);
  digitalWrite(relais2, LOW);
  digitalWrite(relais3, LOW);

   if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    rtc.adjust(DateTime(2019, 4, 13, 17, 24, 0));
  }
} /*//Si RTC ne fonctionne pas
  if (! rtc.begin()) {
    Serial.println("RTC ne fonctionne pas !");

    //Met à l'heure à date à laquelle le sketch est compilé
    //rtc.adjust(DateTime(__DATE__, __TIME__));
  }
}*/

void loop() {
     
  //Heure actuel
  DateTime now = rtc.now();

  //la pompe se déclenchera tout les jours à 19h30
  if (now.dayOfTheWeek() == 1, 3, 5, 7 && now.hour() == 20 && now.minute() == 0)
   {
    //Day of week : 1 pour lundi, 2 pour mardi, ...
        digitalWrite(relais1, HIGH);
        delay(900000); // 15 minutes
    //
  }
  if  (now.dayOfTheWeek() == 1, 3, 5, 7 && now.hour() == 20 && now.minute() == 30)
   {
    //Day of week : 1 pour lundi, 2 pour mardi, ...
    digitalWrite(relais2, HIGH);
    delay(900000); // 15 minutes
    //
  }
  if  (now.dayOfTheWeek() == 1,  3, 5, 7 && now.hour() == 21 && now.minute() == 0)
   {
    //Day of week : 1 pour lundi, 2 pour mardi, ...
    digitalWrite(relais3, HIGH);
    delay(900000); // 15 minutes
    //
  }
 
  else {
   
    digitalWrite(relais1, LOW);
    digitalWrite(relais2, LOW);
    digitalWrite(relais3, LOW);

  }

  delay(1000);
}

pedro_eld

bonjour

je boss sur un mini robot arduino mais voila mais il se fait que quand je ne donne pas la valeur de 255 aux pins EN du moteurs, la roue gauche ne tourne. et quand le pdonne la valeur 255, les roues tournent trop vite. j'aimerai pouvoir réguler la puissance des moteurs. j'utilse une carte Arduino UNO et un shield BB-L298 pour la gestion des moteurs


PS le code que j'utilse

#include <Servo.h>


/*DECLARATIONS EN LIEN AVEC LE MOTEUR*/
const int DOUT_MOTEUR_GAUCHE_EN  = 6;
const int moteurGaucheA = 5;
const int moteurGaucheR = 7;
const int DOUT_MOTEUR_DROIT_EN   = 9;
const int moteurDroitA = 8;
const int moteurDroitR = 10;
//DECLARATION EN LIEN AVEC LE CAPTEUR DISTANCE ET LE SERVOMOTEUR*/
const byte TRIGGER = 4; // broche TRIGGER
const byte ECHO = 2; // broche ECHO
//const unsigned long MEASURE_TIMEOUT = 25000UL;
//const float SOUND_SPEED = 340.0 / 1000;



float intervalle;
int distanceAvant;
float distanceDroite;
float distanceGauche;
const int delay_time = 250;

Servo myservo;


//DECLARATION VARIABLE DHT

void setup() {
 // put your setup code here, to run once:

 // initialisation de la communication série:
 Serial.begin(115200);
 pinMode(moteurGaucheA, OUTPUT);
 pinMode(moteurGaucheR, OUTPUT);
 pinMode(moteurDroitA, OUTPUT);
 pinMode(moteurDroitR, OUTPUT);
 digitalWrite(moteurGaucheA, LOW);
 digitalWrite(moteurGaucheR, LOW);
 digitalWrite(moteurDroitA, LOW);
 digitalWrite(moteurDroitR, LOW);
 // inialisation du capteur de distance et du servomoteur

 pinMode(TRIGGER, OUTPUT);
 //digitalWrite(TRIGGER, LOW);
 pinMode(ECHO, INPUT);
 myservo.attach(3);
 myservo.write(30);
 
  pinMode(DOUT_MOTEUR_GAUCHE_EN, OUTPUT);
 pinMode(DOUT_MOTEUR_DROIT_EN, OUTPUT);
}




//FONCTION MOTEURS
void avancer()
{
 analogWrite(DOUT_MOTEUR_GAUCHE_EN, 255); // les deux moteurs tournent à la même vitesse//
   analogWrite(DOUT_MOTEUR_DROIT_EN, 255);
   digitalWrite(moteurGaucheA, HIGH);
 digitalWrite(moteurGaucheR, LOW);


 digitalWrite(moteurDroitA, HIGH);
 digitalWrite(moteurDroitR, LOW);

}

void reculer()
{
 analogWrite(DOUT_MOTEUR_GAUCHE_EN , 255); // les deux moteurs tourne dans le sens opposé à celui qu'ils avait dans la commande pour avancer en ligne droite//
 analogWrite(DOUT_MOTEUR_DROIT_EN, 255);
 digitalWrite(moteurGaucheA, LOW);
 digitalWrite(moteurGaucheR, HIGH);
 
  //
 
 digitalWrite(moteurDroitA, LOW);
 digitalWrite(moteurDroitR, HIGH);
}
void arreter()
{
 analogWrite(DOUT_MOTEUR_GAUCHE_EN , 0); // les deux moteurs s'arrêtent //


 analogWrite(DOUT_MOTEUR_DROIT_EN, 0);
 digitalWrite(moteurGaucheA, LOW);
 digitalWrite(moteurGaucheR, LOW);
 
 digitalWrite(moteurDroitA, LOW);
 digitalWrite(moteurDroitR, LOW);
}
void pivoterGauche()
{
 analogWrite(DOUT_MOTEUR_GAUCHE_EN , 0); // le moteur gauche frenne en tournant dans le sens opposé à celui du moteur droit //
 digitalWrite(moteurGaucheA, LOW);
 digitalWrite(moteurGaucheR, HIGH);
 
 analogWrite(DOUT_MOTEUR_DROIT_EN, 255);
 
 digitalWrite(moteurDroitA, HIGH);
 digitalWrite(moteurDroitR, LOW);

 delay(250);
 
 analogWrite(DOUT_MOTEUR_GAUCHE_EN , 0); // les deux moteurs s'arrêtent //


 analogWrite(DOUT_MOTEUR_DROIT_EN, 0);
 digitalWrite(moteurGaucheA, LOW);
 digitalWrite(moteurGaucheR, LOW);
 
 digitalWrite(moteurDroitA, LOW);
 digitalWrite(moteurDroitR, LOW);
}
void pivoterDroite()
{
 analogWrite(DOUT_MOTEUR_GAUCHE_EN , 255); // le moteur gauche continue à tourner avec la même vitesse //
 digitalWrite(moteurGaucheA, HIGH);
 digitalWrite(moteurGaucheR, LOW);
 
 analogWrite(DOUT_MOTEUR_DROIT_EN, 0);
 
 digitalWrite(moteurDroitA, LOW);
 digitalWrite(moteurDroitR, HIGH);
 
 delay(250);

 analogWrite(DOUT_MOTEUR_GAUCHE_EN , 0); // les deux moteurs s'arrêtent //


 analogWrite(DOUT_MOTEUR_DROIT_EN, 0);
 digitalWrite(moteurGaucheA, LOW);
 digitalWrite(moteurGaucheR, LOW);
 
 digitalWrite(moteurDroitA, LOW);
 digitalWrite(moteurDroitR, LOW);
}

//FONCTIONs UTRASONs

void mesurerDistanceAvant()//controle direction droit du servocommande
{
 myservo.write(30);
 delay(delay_time);

 digitalWrite(TRIGGER, LOW);
 delayMicroseconds(10);
 digitalWrite(TRIGGER, HIGH);
 intervalle = pulseIn(ECHO, HIGH);

 /* 3 calcul la distance a partir du temps mesuré */

 distanceAvant = ((intervalle / 2) / 29.1);
 Serial.print(" Distance ");
 //distanceAvant = distance_mm / 10.0, 2;
 Serial.print(distanceAvant);
 //Serial.println("cm");


// delay(300);
}

void mesurerDistanceGauche()//controle direction droit du servocommande
{
 myservo.write(0);
 delay(delay_time);

 digitalWrite(TRIGGER, LOW);
 delayMicroseconds(10);
 digitalWrite(TRIGGER, HIGH);
 intervalle = pulseIn(ECHO, HIGH);

 /* 3 calcul la distance a partir du temps mesuré */

 distanceGauche = ((intervalle / 2) / 29.1);
 /*Serial.println("distance Gauche ");
 Serial.print(distanceGauche);
 Serial.print("cm de ");*/


 delay(300);
}

void mesurerDistanceDroite()//controle direction droit du servocommande
{
 myservo.write(60);
 delay(delay_time);

 digitalWrite(TRIGGER, LOW);
 delayMicroseconds(10);
 digitalWrite(TRIGGER, HIGH);
 intervalle = pulseIn(ECHO, HIGH);

 /* 3 calcul la distance a partir du temps mesuré */

 distanceDroite = ((intervalle / 2) / 29.1);
 /*Serial.println("distance Droite ");
 //distanceAvant = distance_mm / 10.0, 2;
 Serial.print(distanceAvant);
 Serial.print("cm de ");*/


 delay(300);
}
//FONCTION UTASONS

void modeUltrason()
{
 mesurerDistanceAvant();
 delay(delay_time);

 if (distanceAvant < 25) //Si la distance avant est de moins de 25cm
 {
   arreter();
   //"Obstacle à l'avant")
   
   delay(delay_time);
   mesurerDistanceGauche();
   delay(delay_time);
   mesurerDistanceDroite();
   delay(delay_time);
   //delay(delay_time);
   //reculer();
   //delay(delay_time);
   //pivoterGauche();
   //delay(delay_time);
   //avancer();
   if (distanceGauche < 15 && distanceDroite < 15) //Si la distance à gauche et la distance à droite sont de moins de 15cm
   {
     //Obstacles à gauche et à droite, reculer
     reculer();
     delay(500);
     pivoterGauche();
     delay(250);
   }
   else if (distanceGauche > distanceDroite) //Si la distance gauche est plus grande que la distance droite
   {
     //Obstacle à droite, tourner à gauche
     pivoterGauche();
     delay(250);
   }
   else if (distanceGauche <= distanceDroite) //Si la distance gauche est plus petite ou égale à la distance droite
   {
     //Obstacle à gauche, tourner à droite
     pivoterDroite();
     delay(250);
   }
 }

 else //Si la distance avant est de plus de 15cm
 {
  /* Serial.println("Aucun obstacle, continuer tout droit");
   Serial.println();*/
   
   avancer();
 }

}
void loop() {
 // put your main code here, to run repeatedly:
  modeUltrason();
}

J-M-L

lisez comment utiliser le forum (les posts épinglés en haut du forum comme « Bien éditer son post pour les nuls » , « Faire un Nouveau Sujet ou le corriger avec les Balises... » et « Règles du forum francophone »), et faites un post « propre »
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

jfs

ça aurait été mieux de rééditer le premier message plutôt que de refaire un autre sujet.....
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

BANGDZN

Bonjour a tous, j'ai un petit soucis concernant mon programme pour mon projet de fin d'année pour le Bac, a vrai dire, l'épreuve est dans 5 jours, et c'est la panique !

Mon rôle est d'inverser le sens de rotation d'un moteur a courant continu tout en captant le courant traversant ce dernier : le problème est que je n'arrive pas a faire concorder ces deux fonctions et rien ne va... Ah oui, je ne connais vraiment pas grand chose d'arduino, si ce n'est les grandes lignes.

Votre aide me serait précieuse, je vous mets ci dessous mon programme :

( Programme qui sert a capter le courant, qui marche ^^)

------------------------

#include "Grove_I2C_Motor_Driver.h"

// default I2C address is 0x0f

#define I2C_ADDRESS 0x0f

#define CURRENT_SENSOR A0 // Analog input pin that sensor is attached to

 float amplitude_current;               //amplitude current

 float effective_value;       //effective current

void setup() {

  Serial.begin(9600);   

  Motor.begin(I2C_ADDRESS);

  pins_init();

}

void loop(){

  int sensor_max;

   sensor_max = getMaxValue();

   Serial.print("sensor_max = ");

   Serial.println(sensor_max);

   //the VCC on the Grove interface of the sensor is 5v

   amplitude_current=(float)(sensor_max-512)/1024*5/185*1000000;

   effective_value=amplitude_current/1.414;

   //minimum_current=1/1024*5/185*1000000/1.414=18.7(mA)

   //Only for sinusoidal alternating current

   Serial.println("L'amplitude du courant est (en mA)");

   Serial.println(amplitude_current,1);//Only one number after the decimal point

   Serial.println("La valeur effective du courant est (en mA)");

   Serial.println(effective_value,1);

}

void pins_init()

 {

   pinMode(CURRENT_SENSOR, INPUT);

 }

 /*Function: Sample for 1000ms and get the maximum value from the S pin*/

 int getMaxValue()

 {

   int sensorValue;             //value read from the sensor

   int sensorMax = 0;

   uint32_t start_time = millis();

   while((millis()-start_time) < 1000)//sample for 1000ms

   {

       sensorValue = analogRead(CURRENT_SENSOR);

       if (sensorValue > sensorMax)

       {

           /*record the maximum sensor value*/

           sensorMax = sensorValue;

       }

   }

   return sensorMax;

 ------------------------------------

( Programme qui sert a controller le moteur, qui marche aussi ^^)

#include "Grove_I2C_Motor_Driver.h"

// default I2C address is 0x0f

#define I2C_ADDRESS 0x0f

void setup() {

  Serial.begin(9600);

  Motor.begin(I2C_ADDRESS);

}

void loop() {

  Motor.speed(MOTOR1, 50);

  delay(2000);

  Motor.speed(MOTOR1, -100);

  delay(2000);

  Motor.stop(MOTOR1);

}

-----------------------------

Je ne sais pas si cela est tâche facile, mais dans tous les cas, je vous remercie du fond du coeur <3

pierrewallaert

Bonjour,
Dans le cadre d'un projet en école nous souhaitons faire tourner des moteurs de 12V-2A grâce à une Arduino MEGA. Pour l'instant, nous avons fait notre algo et notre projet avec des petits moteurs 5V controlés via un pont en H et une pile mais nous souhaitons passer à des moteurs plus puissants reliés au secteur pour l'alimentation. Est-ce que vous pourriez m'aider pour le circuit et les composants qui permettraient d'effectuer cela? Un grand merci

Pierre Wallaert

Arzou

Bonsoir, tu es sur la mauvaise rubrique
Demande a Un administrateur de deplacer ton post. Et surtout lit les mode d'emplois du forum.

Sinon pour la commande moteur, pour - de 2A tu as ca tres bien et pas cher , c'est un double pont en h


https://s.click.aliexpress.com/e/cAxCitXa


Pour beaucoup plus tu as ca
https://s.click.aliexpress.com/e/10fne5a  simple pont en h de forte puissance

Pour l'alimentation tu peux utiliser une alim de box ou autre chose, a toi de voir.

Essaye dans la mesure du possible d'avoir une alimentation séparée pour l'arduino

L'important est que les masses soient reliés

Philppe

#313
Jun 15, 2019, 08:18 pm Last Edit: Jun 15, 2019, 09:22 pm by Philppe
bonjour,

je débute avec la programmation pour realiser un bras robotique avec carte uno
j'essaie de réaliser un programme qui comporte 4 servos ( servos récupérés sur des voiture Rc , les boutons poussoir ont étés récupérés ce sont des BP borne arcade joysticks.
j'ai chercher comme faire , j;ai commencer par 1 servo et 2 boutons poussoir ( Bp1 le servo va dans 1 sens et Bp2 dans l'autre sens ) cela fonctionne correctement.
j'ai essayer de de faire evoluer le programme  pour ajouter un servo et 2 boutons pousoir
mais ça fonctionne pas.
j'ai commis une erreur en programment, je ne sais pas trop comment ajouter les nouveaux servos et les nouveaux Bp.
2 Bp commande un servo
quelque peux m;expliquer ce que j'ai mal fais

Ps  je veux pas de programme tout prêt je veux juste comprendre comment faire

merci

P


Code: [Select]

// le code
void setup() {
}
#include <Servo.h>

int bp1 = 1;
int bp2 = 2;
int bp3 = 3;
int bp4 = 4;

int position = 0;

/* control servo */
Servo monServomoteur1;
Servo monServomoteur2;

void setup()
{
  // Bouton poussoir
  pinMode(bp1, INPUT_PULLUP);
  pinMode(bp2, INPUT_PULLUP);
  pinMode(bp3, INPUT_PULLUP);
  pinMode(bp4, INPUT_PULLUP);


  // Attache le servomoteur
  monServomoteur1.attach(9);
  monServomoteur1.write(0);
  monServomoteur2.attach(10);
  monServomoteur2.write(0);
  Serial.begin(9600);
}

void loop()
{
  // Récuperer valeur de bp
  int b1 = digitalRead(bp1);
  int b2 = digitalRead(bp2);
  int b3 = digitalRead(bp3);
  int b4 = digitalRead(bp4);

  // Si Appuie BP1
  if (b1 == LOW) {
    monServomoteur1.write(position);
    position = position + 1;
    if (position > 180) {
      position = 180;
    }
    delay(10);
  }

  // Si Appuie BP2
  if (b2 == LOW) {
    monServomoteur1.write(position);
    position = position - 1;
    if (position < 0) {
      position = 0;
    }
    delay(10);
  }

// Si Appuie BP3
  if (b3 == LOW) {
    monServomoteur2.write(position);
    position = position + 1;
    if (position > 180) {
      position = 180;
    }
    delay(10);
  }
  // Si Appuie BP4
  if (b4 == LOW) {
    monServomoteur2.write(position);
    position = position - 1;
    if (position < 0) {
      position = 0;
    }
    delay(10);
  }

  Serial.print("Position du servo : "); Serial.println(position);

}

Zlika

#314
Jun 15, 2019, 08:35 pm Last Edit: Jun 15, 2019, 08:44 pm by Zlika
Bonsoir,

La première chose à faire est d'éditer votre premier post pour mettre votre code entre balise comme expliqué ici.

Ensuite, dans votre programme, vous n'utilisez qu'une seule variable 'position' pour contrôler 2 servos moteur.
Donc, logiquement, les boutons de commande agissent sur les deux servos moteur en même temps et ils auront aussi la même position.

Pour commander 2 servos moteurs indépendamment, il faut 2 variables.
De plus il est logique de modifier déjà la variable avant de l'appliquer au servo moteur, sinon on se retrouve avec un décalage avec la commande.
Si ça coince, forcez. Si ça casse, ça devait probablement être réparé, de toute façon.

Go Up