Recent Posts

Pages: [1] 2 3 ... 10
1
Français / Re: Module Peltier
Last post by Col68 - Today at 10:53 pm
Bonjour je ne suis pas pro en la matière comme Artouste par ex.,

mais j'avais lu un projet similaire ou l'on conseiller d'alimenter le système peltier avec une alim. de PC (genre ATX)

et justement d'utiliser un potentiomètre afin de régler la puissance ainsi la température, 

vu la conso. en électricité cela ne valait pas trop le coup, mais rien n'empêche de testé l'expérience.

J'avais trouvé des Kits à monté pas chère

pare contre pour refroidir le peltier côté chaud fallait un ventirad avec liquide de refroidissement,

voilà en gros ce que je peut t'apporter comme réponse, Cordialement.
2
Project Guidance / Re: Can't get my 433MHZ pair t...
Last post by DrAzzy - Today at 10:53 pm
Those spring antennae are utter garbage. I use solid core wire from ethernet cable for antennae.

I would also try swapping in different transmitter and receiver modules. Yours *looks* like a good receiver (is that a SYN470 IC on there? Those work very well); I didn't try any transmitters with an IC in SOIC-8 package when I was testing these, so can't comment on that.

Also, try touching the two antennae together, and see if that works.
4
Sensors / MOVED: Ayuda para el ajuste de...
Last post by AWOL - Today at 10:53 pm
5
Audio / Re: MIDI Library not working
Last post by el_supremo - Today at 10:51 pm
What is the real, maximum size of a sysex message sent by the keyboard? Some sysex messages can be far larger than the MIDI library allows. If I read the code correctly the default maximum is 128 bytes but it can be overridden. Or the message may be larger than the available free ram. Which Arduino are you using?
You may be running into a problem with malloc not being able to maintain sufficient unfragmented memory. You also don't check that receivedSysExArray contains a valid pointer - i.e. that it is not NULL - which will happen if you ask for too much space. You may find it safer to figure out the maximum possible size of a received sysex message and then allocate a static array of that size.

Pete
6
Quote
So, I'm trying to wire 3 5V WS2811s...

...So intuitively, it seems like I'd have to put 15V into the power rail.
Do you mean 5V?

Quote
But figuring out voltage in parallel is never ever intuitive,
Actually, it's no problem.   ...Everything in your house is wired in parallel to 120V or 240V (through different switches & circuit breakers) and everything in your car is wired in parallel to 12 (through different switches & fuses).

Just make sure your power supply can provide (at least) the required current (Amps).
7
Français / Re: Comment bien comprendre/ut...
Last post by pierrot10 - Today at 10:51 pm
(suite 2)
Voilà, maintenant, je traite les données pour l'envoi. Le délème, et je crois que c'étais a base de ce post, est d'avoir une virgule qqui sépare les mesures sauf pour la dernière, en tenant compte des capteurs actifs ou pas, comme ceci (merci J-M-L)

Quote
Valeurs:{431,23,970,424,43,,7,,,,}
Le vide entre les virgules sont les capteurs inactifs


Ja'ffiche les états des capteurs, pour info (toujours dans la fonctions do_send()
Code: [Select]

byte nbCapteurActif = 0;
    for (byte i = 0; i < nbMaxCapteurs; i++) {
      sprint(F("Capteur: ["), 2);
      sprint(mesCapteur[i].nomDuCapteur, 2);
      sprint(F("]\t"), 2);
      sprint(F("actif: "), 2); sprint(mesCapteur[i].actif ? F("VRAI") : F("FAUX"), 2);
      if (mesCapteur[i].actif)nbCapteurActif++;
      sprint(F("\tID: "), 2); sprintln(mesCapteur[i].idDuCapteur, 2);
    }

Ce qui donne
Quote
Liste des capteurs
---------------------------------------
Capteur: [ba] actif: VRAI ID: 0
Capteur: [te] actif: VRAI ID: 1
Capteur: [pr] actif: VRAI ID: 2
Capteur: [al] actif: VRAI ID: 3
Capteur: [hu] actif: VRAI ID: 4
Capteur: [mo] actif: FAUX ID: 5
Capteur: [lu] actif: VRAI ID: 6
Capteur: [uv] actif: FAUX ID: 7
Capteur: [la] actif: FAUX ID: 8
Capteur: [lo] actif: FAUX ID: 9
Capteur: [da] actif: FAUX ID: 10

J'affiche les valeurs
Code: [Select]

sprintln(F("\nValeurs des capteurs actifs"), 2);
    sprintln(F("---------------------------------------"), 2);
    sprint(F("Nombre de capteurs: "), 2);
    sprintln(nbMaxCapteurs, 2);
    sprint(F("Nombre de capteurs actifs: "), 2);
    sprintln(nbCapteurActif, 2);

    sprint(F("Valeurs:"), 2);

    // Loop la strcture des capteurs
    sprint(F("{"),2);
    for (byte i = 0; i < nbMaxCapteurs; i++) {
      if (mesCapteur[i].actif) { // si le capteur n'est pas actif on n'imprime pas
        sprint(mesCapteur[i].nomDuCapteur, 0);
        sprint(F(":"), 0);
        sprint(mesMesures[i][mesCapteur[i].idDuCapteur].valeur, 0);
        if (i < nbMaxCapteurs-1) sprint(F(","), 0);
      }
      else
      {
        sprint(mesCapteur[i].nomDuCapteur, 0);
        sprint(F(":"), 0);
        sprint(mesMesures[i][mesCapteur[i].idDuCapteur].valeur, 0);
        if (i < nbMaxCapteurs-1) sprint(F(","), 0);
      }
     }
     sprintln(F("}"),2);

Ce qui donne (ce n'est pas envoyé, c'est juste pour le suivi, ou du debugage
Quote
Valeurs des capteurs actifs
---------------------------------------
Nombre de capteurs: 11
Nombre de capteurs actifs: 6
Valeurs:{ba:431,te:22,pr:970,al:424,hu:43,mo:-99,lu:0,uv:-99,la:-99,lo:-99,da:-99}
On voit bien les -99 qui témoigne qu'ils sont inactifs

Maintenant j'empile et j'affiche le contenu de payload
Code: [Select]

sprintln(F("\nEmpilations des valeurs capteurs"), 2);
     sprintln(F("---------------------------------------"), 2);

    uint8_t * ptr = payload;

    for (byte i = 0; i < nbMaxCapteurs; i++) {
      if (mesCapteur[i].actif) { // si le capteur n'est pas actif on n'imprime pas

        // PRINT LES MESURES MESUREES
        itoa(mesMesures[i][mesCapteur[i].idDuCapteur].valeur, (char *) ptr, 10); // on écrit à partir de ptr la représentation ASCII en base 10 de la valeur de ibatt
        ptr += strlen((char *) ptr);
       
        if (i < nbMaxCapteurs-1)
        {
          *ptr = ','; // virgule
           ptr += sizeof(char);
        }
        else
        {
          *ptr = 0 ; // Je ferme
        }
      }
      else
      {
        if (i < nbMaxCapteurs-1)
        {
          *ptr = ','; // virgule
          ptr += sizeof(char);
        }
        else
        {
          *ptr = 0; // Je ferme. Pas de bouger le pointeur
        }
      }
     }

    // DEBUG Affiche le contenu de payload
    sprint(F("payload = {"),2);
    for (byte i = 0; i < payloadSize; i++) {
      //Serial.print("0x");
      if (payload[i] <= 0xF) sprint(F("0"),2);
      sprint(payload[i], HEX, 2);
      sprint(F(" "),2);
    }
    sprintln(F("}"),2);

 

Ce qui donne
Quote
Empilations des valeurs capteurs
---------------------------------------
payload = {34 33 31 2C 32 32 2C 39 37 30 2C 34 32 34 2C 34 33 2C 2C 30 2C 2C 2C 2C 00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 }

Vous remarquerez que je ferme bein ma chaine à envoyer grâce au 00

Et maintenant j'envoi
(Ca rien à voir avec ce que l'ona  vu ensemble, c'est ma librairie)
Code: [Select]

sprint(F("\nOpmode check: "), 2);
    LMIC_setTxData2(1, payload, strlen((char *)payload), 0);

os_setTimedCallback(j, os_getTime() + sec2osticks(WAIT_SECS), do_send);

  sprint(F("Sent: "), 2); sprintln((char *)payload, 2);

  sprint(F(" Time: "), 2); sprint((millis() - timer) / 1000, 2); sprintln(F("s"), 2);


et voilà ce qui est affiché dans mon terminal
Quote
Opmode check: Sent: 431,22,970,424,43,,0,,,,
 Time: 0s
EV_TXCOMPLETE, time: 17
DEBUG dataLen: 0

On voit bien que les 0x23 ne sont pas pris en compte

Et maintenant, si je vais voir dans ma console TTN


Et si je regarde les valeurs enregistrées, ceci
Quote
3433322C32332C3937302C3432342C34342C2C362C2C2C2C
est bien égal à
Quote
432,23,970,424,44,,6,,,,
COOOOOLLLL!!!

Maintenant, il me reste plus qu'a traiter les données reçue au serveur. Je pense qu'avec
Code: [Select]
{432,23,970,424,44,,6,,,,}
je vais trouver un truc avec javascript et json.


Voilà, j'espère avoir bien fait. Sîl y a des trucs à perfectionner, je suis à l'écoute, surtout si j'ai mal fait un passage  :)  :(  :o  :smiley-confuse:

En tout cas là, je vois que le serveur continue à recevoir des données..  :)


MILLES MERCIS J-M-L!!!!!!!
8
Français / Re: Comment bien comprendre/ut...
Last post by pierrot10 - Today at 10:51 pm
(Suite)
J'ai maintenant une fonction do_send(). Elle est appelée tous les 120sec. A caque fois qu'elle est applée, les fonctions "capteurs" sont applés..

Code: [Select]

void do_send(osjob_t* j)
{
  uint8_t payload[payloadSize];
  memset(payload,'#',payloadSize);

// Ici la partie du code qui prépare LoRa a l'envoi

/*
* Je fais appelle à mes fonctions qui me retorune tous des float.
* J'ai décidé ne pas garder les décimal, sauf pour la batterie et poue les latitude et longitude
* Je dois encore étudier la date. Ce que j'ai fais c'est du brouillon.
* Pour la batterie je garde 2 décimal
* pour lat et lon, je garde 4 décimal
* pour les autres, je garde rien
* Si le moduel est inactif, je garde la valeur de -99. Cette valeur ne sera jamais envoyée. Elle ne s'affiche que si il ya un problème...
*/

   /*
    * Getting battery value
    */
    float fbatt;
    int ibatt;
    if(battery_active)
    {
      fbatt = get_battery(battery);
      fbatt = fbatt*100;
      ibatt = fbatt;
    }
    else
    {
      ibatt = -99;
    }
    mesMesures[c_battery][capteur_battery_id].valeur = ibatt;

/*
     * Get temperature, pression, altitude value
     */
    float ftemp, fpres, falti;
    int itemp, ipres, ialti;
    
    if(temperature_active)
    {
      ftemp = get_temperature(temperature);
      itemp = ftemp;
    }
    else
    {
      itemp = -99;
    }
    mesMesures[c_temperature][capteur_temperature_id].valeur = itemp;

    if(pression_active)
    {
      fpres = get_pression(pression);
      ipres = fpres;
    }
    else
    {
      ipres = -99;
    }
    mesMesures[c_pression][capteur_pression_id].valeur = ipres;

    if(alt_active)
    {
      ialti = ALTITUDE;
    }
    else
    {
      ialti = -99;
    }
    mesMesures[c_alt][capteur_alt_id].valeur = ialti;

 /*
     * Get humidity value
     */
    float fhumi;
    int ihumi;
    if(humidity_active)
    {
      fhumi = get_humidity(humidity);
      ihumi = fhumi;
    }
    else
    {
      ihumi = -99;
    }
    mesMesures[c_humidity][capteur_humidity_id].valeur = ihumi;

    /*
     * Get moisture value
    */
    float fmois;
    int imois;
    if(moisture_active)
    {
      fmois = get_moisture(moisture);
      imois = fmois;
    }else{
      imois = -99;
    }
    mesMesures[c_moisture][capteur_moisture_id].valeur = imois;


    /*
     * Get luminosity value
     */
    int ilumi;
    float flumi;
    if(luminosity_active)
    {
      flumi = get_luminosity(luminosity);
      ilumi = flumi;
    }
    else
    {
      ilumi = -99;
    }
    mesMesures[c_luminosity][capteur_luminosity_id].valeur = ilumi;


    /*
     * Get UV value
     */
    float fuv;
    int iuv;
    if(uv_active)
    {
      fuv = get_uv(uv);
      iuv = fuv;
    }else{
      iuv = -99;
    }
    mesMesures[c_uv][capteur_uv_id].valeur = iuv;
    
  /*
     * Getting GPS value
     */
    float flati, flong, fdate;
    int ilati, ilong, idate, itime;    
    if(latitude_active)
    {
      flati = get_latitude(latitude);
      flati = flati*10000;
      ilati = flati;
    }
    else
    {
      ilati = -99;
    }
    mesMesures[c_latitude][capteur_latitude_id].valeur = ilati;

    if(longitude_active)
    {
      flong = get_longitude(longitude);
      flong = flong*10000;
      ilong = flong;
    }
    else
    {
      ilong = -99;
    }
    mesMesures[c_longitude][capteur_longitude_id].valeur = ilong;

    if(datetime_active)
    {
      fdate = get_time(datetime); // 170927.2356
      idate = fdate;   // 170927
    
      uint16_t item, item2;

      fdate = fdate*10000;  // 1709272356.00
      item = fdate;         // 1709272356
      item2 = idate*10000;  // 1709270000
      
      itime = item-item2;   // 2356
      
    }else{
      idate = -99;
      itime = -99;
    }
    mesMesures[c_datetime][capteur_datetime_id].valeur = idate;


9
Programming Questions / Re: NeoPixel Ring
Last post by PaulS - Today at 10:50 pm
Quote
What I am trying to accomplish is that after the ring makes one revolution, it add's one LED onto the start
I don't understand that this means. Do you want to turn 24 LEDs on, one at a time, with a definite interval between them, then turn all but one off. On the next iteration, turn 23 LEDs on, with the same interval between them? Or a different interval?

Please try again, to describe what you want to do.

PS: Whatever it is, it is possible.
10
Français / Re: Comment bien comprendre/ut...
Last post by pierrot10 - Today at 10:50 pm
Voilà, j'espère qu'il n'y aura rien à redire  :)

(J'espère ne rien oublier)

Code: [Select]


//---------------------------------------------------------
// Sensor activation
//---------------------------------------------------------

#define SENSOR_BATTERY      // Battery Voltage
//#define SENSOR_GPS        // latitude, longitude, datetime
#define SENSOR_BMP180       // Barometer (temperature/pression/alt)
#define SENSOR_DTH22        // Humidity (Temrature)
//#define SENSOR_MOISTURE
#define SENSOR_TSL2561      // Luminoisty
//#define SENSOR_UV
//#define SENSOR_MEMORY     // Free memory

const byte capteur_battery_id = 0;
const byte capteur_temperature_id = 1;
const byte capteur_pression_id = 2;
const byte capteur_alt_id = 3;
const byte capteur_humidity_id = 4;
const byte capteur_moisture_id = 5;
const byte capteur_luminosity_id = 6;
const byte capteur_uv_id = 7;
const byte capteur_latitude_id = 8;
const byte capteur_longitude_id = 9;
const byte capteur_datetime_id = 10;

// JE NE LES METS PAS TOUS...
#ifdef SENSOR_BATTERY
bool battery_active = true;
#else
bool battery_active = false;
#endif

struct capteur
{
  uint8_t idDuCapteur;
  boolean actif;
  const char * nomDuCapteur;
};
capteur mesCapteur[] = {
  {capteur_battery_id, battery_active, "ba"},
  {capteur_temperature_id, temperature_active, "te"},
  {capteur_pression_id, pression_active, "pr"},
  {capteur_alt_id, alt_active, "al"},
  {capteur_humidity_id, humidity_active, "hu"},
  {capteur_moisture_id, moisture_active, "mo"},
  {capteur_luminosity_id, luminosity_active, "lu"},
  {capteur_uv_id, uv_active, "uv"},
  {capteur_latitude_id, latitude_active, "la"},
  {capteur_longitude_id, longitude_active, "lo"},
  {capteur_datetime_id, datetime_active, "da"},
};



enum : byte {c_battery = 0, c_temperature, c_pression, c_alt, c_humidity, c_moisture, c_luminosity, c_uv, c_latitude, c_longitude, c_datetime}; // dans le même ordre que mesCapteurs
const byte nbMaxCapteurs = sizeof(mesCapteur) / sizeof(mesCapteur[0]);

struct mesure {
  uint16_t id_capteur;
  int valeur; // valeur mesurée (adapter le type)
  // autre chose de pertinent à mémoriser lors d'une mesure ?
};

const byte tailleHistorique = 11; // Ce chiffre doit correspondre aux nombres de capteurs. Voir capteur mesCapteur[] = {
mesure mesMesures[nbMaxCapteurs][tailleHistorique];


Je ne peux pas mettre tout mon code dans un post, je le split
Pages: [1] 2 3 ... 10