Go Down

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

Philppe

merci pour la réponse je fais regarder cela et essayer de comprendre , si je n'y parviens pas je posterais un nouveau message 

Zlika

OK mais la modification du premier post est impérative sinon tout va partir à la poubelle.  :-X
Si ça coince, forcez. Si ça casse, ça devait probablement être réparé, de toute façon.

Philppe

#317
Jun 15, 2019, 10:53 pm Last Edit: Jun 16, 2019, 11:32 am by Philppe
j'ai essayer de modifier mon code mais maintenant j'ai une erreur quand je teste le programme
error: 'position2' was not declared in this scope
comment je dois la declaree
pardon mais je debute alors j'ai mal fais quelque chose

merci
ph







Code: [Select]

#include <Servo.h>
// global variables
int bp1 = 1;
int bp2 = 2;
int bp3 = 3;
int bp4 = 4;


int initial_position1 = 0;
int initial_position2 = 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);
monServomoteur1.write (initial_position1);
monServomoteur2.write (initial_position2);


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(position1);
  position1 = position1 + 1;
  if (position1 > 180) {
    position1 = 180;
  }
  delay(10);
}

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

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

Serial.print("Position du servo1 : "); Serial.println(position1);
 Serial.print("Position du servo2 : "); Serial.println(position2);
}


void loop() {
}

lesept

Ce code aussi doit être entre balises

Ajoute la déclaration de tes variables position avant le setup, comme tu le fais pour les positions initiales


Code: [Select]
int position1 = 0;
int position2 = 0;


Pour quatre servos, tu devrais envisager d'utiliser des joysticks plutôt que des boutons. On en trouve assez facilement pour pas cher chez Ali.

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Philppe

merci pour la réponse
concernant le bouton joysticks j'en aient mais je les trouvent un peux petit je voulais utiliser des bouton arcades
toute fois je fais faire le code pour les boutons joysticks

Ph

lesept

Ok, modifie ton message #4 pour ajouter les balises autour du code, sinon ta discussion risque de finir à la poubelle avant que tu aies fini ton programme...
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Pi_xel

Salut,
J'aimerai monter une ouverture automatisé pour un enclos. Je chercherai à avoir des conseils à ce sujet.
Je m'explique :
Le but est que l'ouverture d'un enclos soit automatisé en fonction des horaires et/ou du couché du Soleil.
Pour cela, j'envisage d'utiliser une carte Arduino Uno avec un Shield Grove, un capteur de luminosité et un moteur.
Mon problème se situe au niveau de ce dernier. Je ne sais pas comment intégrer ce dernier au système. J'ai déjà des moteurs 9V chez moi mais je ne sais pas comment faire le lien entre ces derniers et ma carte.
Du coup, je me demande s'il n'est pas mieux d'en acheter un compatible. Mais dans ce cas, je ne sais pas comment le choisir. Il faut bien sûr qu'il soit capable de d'assurer un couple minimal afin d'entraîner l'ouverture de la trappe.
J'aimerai donc savoir ce que vous en pensez ^^
Au passage, si vous avez des préférences sur les sites/modes d'achat n'hésitez pas à les partager.

Ps : Je n'ai pour l'instant aucun équipement hormis les moteurs Si cela possible, je voudrai éviter tout achat inutile, donc difficile de tester tout ça.  :D

Le capteur de luminosité envisagé :
https://boutique.semageek.com/fr/1205-capteur-de-lumiere-grove-v12.html

La carte arduino envisagée :
https://www.gotronic.fr/art-carte-arduino-uno-12420.htm

Et le shield grove :
https://fr.rs-online.com/web/p/products/1743233/?grossPrice=Y
ou
https://www.gotronic.fr/art-module-grove-base-shield-103030000-19068.htm

Pour la programmation, une fois le tous compatible, je pense pouvoir me débrouiller

68tjs

Bonjour,
Tu as choisi le sous forum "Réalisations et Produits FINIS" qui est destiné à la présentation des réalisations qui FONCTIONNENT.

Je ne pense pas que tu n'entres pas encore dans cette catégorie.
Tu fais défiler l'écran et tu trouvera le forum général là où les questions se posent.

Utilise le lien "Report to Moderator" pour faire déplacer ce message, n'en créé pas un autre.

Tu n'obtiendra pas de réponse tant que le message ne sera pas déplacé.
Profites en pour lire les messages épinglés "Règles du forum rancophone" et "Faire un nouveau sujet"

A bientôt.

AdrienBodin

Bonjour à tous,
Dans le cadre d'une mission sur le Maroni en Guyane nous avons créé une sonde. Son but est essentiellement de mesurer le débit de l'eau sur une pirogue où l'on sera. On utilise pour cela débimètre et module GPS. Curieusement le module GPS ne se connecte pas
Voici le code

#include <OneWire.h> //Librairie du bus OneWire
#include <DallasTemperature.h> //Librairie du capteur DS18B20
#include <SPI.h>        //Librairie SD + radio : miso/mosi
#include <SD.h>         //Librairie SD
#include <SimpleDHT.h>  
#include <Wire.h>
#include <nRF24L01.h>   //Librairie radio
#include <RF24.h>       //Librairie radio
#include <TinyGPS++.h>


File monFichier;        //Fichier sd  

static const int RXPin = 31, TXPin = 33;
static const uint32_t GPSBaud = 4800;

/*Variables + pin Flow sensor*/
volatile int FlowPulse; //measuring the rising edges of the signal
int Pulse;
int CalcFlow;                        
int flowsensor_pin = 2;    //On utilise l'entree logique D2 pour detecter les fronts du capteur de débit
/*Variables + pin PHmeter*/
//int ph_pin = A0;           //On utilise A0 pour lire la tension Po du caapteur de PH

/*Variables + pin SD*/
int CS_pin = 4;
String EtatSD;

long last=0;               /* Variable pour memoriser le temps courant */
int milisegundos=3000;     /* On configure la lecture, l'enrigistrement et l'envoie toutes les secondes */

/*Module radio NRF24*/
RF24 radio(8, 9);          /* Le module radio utilise D8 pour le CE et D9 pour le CSN*/
const byte address[6] = "00001"; /* Addresse du module radio. Doit être identique sur l'emetteur et le récepteur */

OneWire oneWire(3);                   /*Le Bus One Wire est connecté sur la pin D3 de l'arduino*/
DallasTemperature sensors(&oneWire);  //Utilistion du bus Onewire pour les capteurs
DeviceAddress sensorDeviceAddress;    //Vérifie la compatibilité des capteurs avec la librairie
int brochesonde = 7;
SimpleDHT11 sonde;
   byte temperature = 0;
   byte humidity = 0;
   byte data[40] ={0};
   
// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device



void rpm()     //Cette fontion est appelée par l'interruption
{
 FlowPulse++;  //On compte les fronts montants
}
 void displayInfo()
{
 Serial.print(F("Location: "));
 if (gps.location.isValid())
 {
   Serial.print(gps.location.lat(), 6);
   Serial.print(F(","));
   Serial.print(gps.location.lng(), 6);
 }
 else
 {
   Serial.print(F("INVALID"));
 }

 Serial.print(F("  Date/Time: "));
 if (gps.date.isValid())
 {
   Serial.print(gps.date.month());
   Serial.print(F("/"));
   Serial.print(gps.date.day());
   Serial.print(F("/"));
   Serial.print(gps.date.year());
 }
 else
 {
   Serial.print(F("INVALID"));
 }

 Serial.print(F(" "));
 if (gps.time.isValid())
 {
   if (gps.time.hour() < 10) Serial.print(F("0"));
   Serial.print(gps.time.hour());
   Serial.print(F(":"));
   if (gps.time.minute() < 10) Serial.print(F("0"));
   Serial.print(gps.time.minute());
   Serial.print(F(":"));
   if (gps.time.second() < 10) Serial.print(F("0"));
   Serial.print(gps.time.second());
   Serial.print(F("."));
   if (gps.time.centisecond() < 10) Serial.print(F("0"));
   Serial.print(gps.time.centisecond());
 }
 else
 {
   Serial.print(F("INVALID"));
 }

 Serial.println();
}
void setup()
{
 Serial.begin(9600);
 Serial.begin(9600);
 radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MAX);
  radio.stopListening();

  /* Initialisation capteur temperature (one wire)*/
  sensors.begin();                                //Activation des capteurs
  sensors.getAddress(sensorDeviceAddress, 0);     //Demande l'adresse du capteur à l'index 0 du bus
  sensors.setResolution(sensorDeviceAddress, 12); //Résolutions possibles: 9,10,11,12
 
  /* Initialisation aquisition Flow sensor */
  pinMode(flowsensor_pin, INPUT);                         //initialise la pin digitale 2 en entree
  attachInterrupt(digitalPinToInterrupt(2), rpm, RISING); //et on y attache une interruption a chaque front montant du signal
 
  /* Initialisation de la carte SD */
  if (!SD.begin(4)){                                      //On teste la communication avec la carte(pin 4)
       Serial.println("Communication impossible avec la carte micro-sd");
       //return; //stoppe le programme
       EtatSD="SD_NoCom";
   }
   else{
        Serial.println("Communication ok !");
        Serial.println("Ouverture du fichier");
        if (!(monFichier = SD.open("DATA.txt",FILE_WRITE))){
           Serial.println("Erreur de fichier");
           //return; //stoppe le programme
           EtatSD="SD_ErrFile";
        }
        else {
           Serial.println("Fichier ouvert");
           monFichier = SD.open("DATA.txt",FILE_WRITE);
           monFichier.println("New record ...");
           monFichier.close();                           /* On referme le fichier */
           EtatSD="SD_Ok";
        }
   }
   last=millis();
}

void loop()
{

 char text[32] = "";
 String CalcStr;
 float Po;
 
 if((millis()-last) >= milisegundos){
   /*Code ici execute toute les secondes */

   /* Aquisition de la température */
   sensors.requestTemperatures();            //Demande la température aux capteurs
   Serial.print("La température est: ");
   Serial.print(sensors.getTempCByIndex(0)); //Récupération de la température en celsius du capteur n°0
   Serial.println(" °C");


   int err = SimpleDHTErrSuccess;
   if ((err = sonde.read(brochesonde, &temperature, &humidity, data))== SimpleDHTErrSuccess) {

     Serial.print ("temp :");
     Serial.print (temperature);
     Serial.print (", Humid :");
     Serial.println ((int)humidity);
 
    }
   
 if (Serial1.available() > 0){
   if (gps.encode(Serial1.read()))
     displayInfo();
 }
 if (millis() > 5000 && gps.charsProcessed() < 10)
 {
   Serial.println(F("No GPS detected: check wiring."));
   while(true);
 }

CalcFlow = (FlowPulse*0.29);            //(Pulse frequency x 60) / 7.5Q, = flow rate in L/hour ==> Ici juste nbr de tours (impulsions)
   Serial.print (CalcFlow, DEC);                 //Prints the number calculated above
   Serial.println (" mètres");                   //Prints "L/hour" and returns a  new line
   Pulse = FlowPulse;
   FlowPulse = 0;                                //Set NbTops to 0 ready for calculations ==> attention pour ne pas perdre un evenement/impulsion
                                                 //il faut faire une soustraction
   Serial.print(" Température de l'air : "); Serial.print((int)temperature); Serial.println(" *C, ");
   Serial.print(" Humidité de l'air : "); Serial.print((int)humidity); Serial.println(" %");
   /* Enregistrement dans la carde SD */
   Serial.println("SD Record");
   if (EtatSD=="SD_Ok") {
     monFichier = SD.open("DATA.txt",FILE_WRITE);  /* Overture du fichier */

     if (gps.date.isValid())
         {
         monFichier.print(gps.date.month());
         monFichier.print(F("/"));
         monFichier.print(gps.date.day());
         monFichier.print(F("/"));
         monFichier.print(gps.date.year());
         }
    else
         {
         monFichier.print(F("**/**/**"));
         }
     monFichier.print(";");
     monFichier.print(Pulse);
     monFichier.print(";");
     monFichier.print(CalcFlow);                   /* Ecriture du Flow */
     monFichier.print(";");
     monFichier.print(sensors.getTempCByIndex(0)); /* Ecriture de la température en celsius du capteur n°0*/
     monFichier.print(";");
     monFichier.print(humidity);                       /* Ecriture du Ph */  
     monFichier.print(";");
     monFichier.println(temperature);  
     monFichier.close();                           /* On referme le fichier */
   }    
//    Serial.println("SD Record END");
   last=millis();
//    Serial.println("SD Record END 2");
   /* Envoie des donnees par radio */
   /* Etat SD / Flow / Temp / PH */
   CalcStr = EtatSD+";"+String(CalcFlow)+";"+sensors.getTempCByIndex(0)+";"+humidity+";"+temperature;
   CalcStr.toCharArray(text, 32);                  /* Le module radio attend un tabeau de char */
   Serial.println (text);
   radio.write(&text, sizeof(text));               /* On envoie le buffer */
//    Serial.println ("END");
 }
}


Un code assez conséquent mais si quelqu'un pourrait nous aider assez vite ça serait super car nous partons demain ...  :smiley-sweat:
Je vous remercie par avance

lesept

Il faudrait mettre ton code entre balises CODE pour en faciliter la lecture. Édite ton message pour faire ça.

As-tu testé les exemples simples de la bibliothèque TinyGPS++? S'ils fonctionnent, ça veut dire que ce n'est pas un problème de connexion ni du module lui même. Sinon vérifie...

Tu devrais partir d'un code simple autour du GPS et qui fonctionne, et ajouter un par un tes capteurs pour voir à partir de quel moment ça ne marche plus. De proche en proche, tu pourras ainsi isoler ce qui pose problème.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

savoriano

#325
Jul 05, 2019, 08:38 pm Last Edit: Jul 05, 2019, 08:41 pm by savoriano
Je pense que le problème vient de la:
Code: [Select]
Serial.begin(9600);
 Serial.begin(9600);
 


T'as pas oublié un "1" ou autre? Ca dépend comme vous avez branché le GPS sur l'arduino

Code: [Select]
Serial.begin(9600);
 Serial1.begin(9600);
 


Pardonnez moi pour mon français, ce n'ai pas ma langue maternelle.

lesept

#326
Jul 06, 2019, 10:03 am Last Edit: Jul 06, 2019, 12:30 pm by lesept
Comme dit savoriano, le GPS semble utiliser Serial1 qui n'est pas initialisé. J'ai relevé d'autres erreurs :
  • last et milisegundos devraient être des unsigned long
  • Le fichier dans la carte SD est ouvert deux fois dans le setup puis encore dans la loop
  • Il y a un test avec = au lieu de == dans la loop pour le capteur DHT
  • Les accents ne seront pas affichés sur la console
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Go Up