Show Posts
Pages: 1 ... 102 103 [104] 105 106 ... 229
1546  International / Français / Re: interface arduino paneaux led on: July 08, 2013, 09:39:13 am
Ps : le terme c'est Matrix a led.
En anglais led matrix
En français matrice de LED (DEL pour les puristes)
1547  International / Français / Re: faire du PWM pour bouger une membrane de HP on: July 08, 2013, 09:37:24 am
Quant à ta solution je me pose des questions, je n'ai pas forcément raison c'est pourquoi je lance la discussion.
Il me semble que la décomposition de Fourier du signal que tu génère risque fort de donner un spectre de fréquence et non pas une fréquence discrète.
Il n'est pas interdit de filtrer la sortie du PWM pour supprimer les hautes fréquences

Concernant la synthèse de fréquence, si tu suis le lien que j'ai donné, il y a un relevé du spectre du signal généré et les résultats sont honorables étant donné la technologie mise en jeu.
1548  International / Français / Re: Entrée Reset et petit problème on: July 08, 2013, 08:40:56 am

Idée à la c.. ou pas ?
Oui idée à la con parce que là, tu as identifié le problème
Quote
Or lorsque l’alimentation de la UNO est coupée, la UNO est ‘semi alimentée’ par les liaisons avec la Mega.
Donc la bonne solution consisterait à trouver une solution technique qui résolve le problème identifié.

Il n'y a pas 36 solutions. Lorsqu'on a 2 montages interconnectés avec des alimentations distinctes, il faut assurer une forme d'isolation galvanique entre les 2 sinon il y aura toujours un cas ou l'un alimente l'autre au risque de fusiller les sorties de celui qui alimente d'ailleurs.
Les solutions:
 1) des buffers "hotswap" qui ne chargent pas les lignes lorsqu'une alimentation disparaît pas toujours facile à trouver et souvent en CMS et prévus pour des bus donc beaucoup de broches
 2) des optocoupleurs
 3) des diodes en inverses sur les entrées pour empêcher la tension de remonter vers le composant non alimenté (prévoir des pullup pour polariser les entrées)
1549  International / Français / Re: faire du PWM pour bouger une membrane de HP on: July 08, 2013, 08:23:47 am
Pourquoi vouloir faire simple quand on peut faire compliqué, il suffit de faire :

Code:
void loop(){
digitalWrite(Pin,LOW);
delay(1000/Frequence); //Frequence en khz
digitalWrite(Pin,HIGH);
delay(1000/Frequence);
}

Un signal carré pour faire bouger lentement une membrane de haut-parleur !!!!
1550  International / Français / Re: faire du PWM pour bouger une membrane de HP on: July 08, 2013, 08:19:11 am
Je pense que vous vous égarez.
Quelque soit la fréquence du PWM, on peut générer un signal à n'importe quelle fréquence qui lui soit inférieure.
Par exemple (méthode bourrin)
Code:
int i=0;
int out = 10;

void setup(void){
  pinMode(out,OUTPUT);
}

void loop(void){
   float val;
   
   //val = 127 + 127 * sin(2*PI/512*i);
   // pour aller plus vite on peut faire un tableau de sinus
   analogWrite(out,(int)(127 + 127.0* sin(2*PI/512*i)));
   i++;
   i= i & 0x1FF;
   delayMicroseconds(40);
}

Méthode plus subtile http://interface.khm.de/index.php/lab/experiments/arduino-dds-sinewave-generator/

Si c'est pas pour faire un sinus il suffit de changer la fonction qui synthétise le signal mais le principe reste le même.
1551  International / Français / Re: code moteur servo DIY on: July 07, 2013, 12:30:29 pm

il faudrait que tu gères la vitesse en fonction de la distance que tu as à parcourir, plus la distance est grande, plus tu augmentes la vitesse.
Ce n'est pas suffisant, son système est assez lourd, il faut tenir compte de son inertie. C'est pour cela que le PID est intéressant. Au démarrage même si la distance n'est pas importante tu peux avoir un peu de pêche pour vaincre l'inertie et dès que l'équipement est en branle la vitesse s'adapte. Et pareil au freinage la force d'inertie oblige à prévoir un vrai freinage actif.
1552  International / Français / Re: code moteur servo DIY on: July 07, 2013, 08:41:19 am
Code:
if (val2 < (val - hyseteris)) {
  md.setM1Speed(300);
   
delay (1);
}

else if (val2 > (val + hyseteris)) {
   md.setM1Speed(-300);
}
C'est un peu brutal.
La vitesse ne doit pas être une constante, elle devrait être adaptée en fonction de la valeur de l'écart.
Il faut tenir compte de la valeur courante de l'erreur, de ses valeurs passées et de sa variation. C'est le principe des asservissements PID (Proportionnel, Integral, Derivée). Il existe des librairies PID pour l'Arduino
1553  International / Français / Re: Entrée Reset et petit problème on: July 06, 2013, 04:13:36 pm
Quote
Connaîtriez-vous une astuce pour éviter cet inconvénient, avant que je ne me penche sur une solution Hard à renfort de transistor ou de relais ?
Tu n'y échapperas pas!!
Le plus simple et le plus fiable étant un optocoupleur. Sinon un bête transistor en collecteur ouvert.
1554  International / Français / Re: Conseil pour raccordement de relais on: July 06, 2013, 03:45:44 am
j'ai des craintes. N'oublie pas qu'il faut garder le cablage basse tension connecte a l'Arduino le plus court possible.
Ce sont les liaisons en 230V qu'il faut amener aux relais situes pres de l'Arduino et pas le contraire.
C'est discutable. La liaison optocouplée étant une boucle de courant elle est relativement immune aux perturbations secteur ce qui permet un déport moyennant une liaison en paire torsadée. Maintenant faut pas non plus tirer 10m de câble.
Mais c'est vrai que ce genre d'installation serait mieux placé dans le tableau électrique près du compteur plutôt que dispersé partout dans la maison.
1555  International / Français / Re: Une histoire de loop qui casse les ... on: July 06, 2013, 02:03:34 am
Les code est formaté de manière à masquer un maximum les erreurs. Une ligne par instruction et un code indenté correctement aiderait à la traque des soucis.

Les fonctions readmessage et sendmessage sont bizarre à mon sens.

SENDMESSAGE
tu fais incrémenter un index i à chaque élément que tu traites mais tu ne l'utilises pas. je pense qu'il faudrait utiliser i pour indexer buffer.
Code:
// SENDMESSAGE = Envoi des messages au LCD
bool sendMessage(uint8_t command0, uint16_t object0, uint16_t value0) {
       bool flag0 = false;
       uint8_t buffer[6];
       uint8_t checksum = 0x00;
       uint8_t i=0;

       buffer[i] = command0;
       checksum = command0;
       i++;
       buffer[i] = object0 >>8;
       checksum ^= buffer;
       i++;
       buffer[i] = object0 & 0xff;
       checksum ^= buffer;
       i++;
       buffer[i] = value0 >>8;
       checksum ^= buffer;
       i++;
       buffer[i]= value0 & 0xff;
       checksum ^= buffer;
       i++;
       buffer[i] = checksum;
       i++;

       mySerial.write(buffer, i);
       return(nacAck()==0x06);
}

READMESSAGE
Il te faut 3 arguments en paramètres de REPORT_EVENT mais tu n'attends pas de les avoir reçu pour les lire. Si tu n'as pas 3 octets tu sors du if et tu quittes la fonction.
Il faut attendre d'avoir les 3 octets avant de continuer.

Code:
bool readMessage(uint8_t &command0,uint16_t &object0, uint16_t &value0) {
    bool flag0=false;
    uint8_t buffer[6];
    uint8_t checksum = 0x00;
    uint8_t i=0;

    if(mySerial.available()>0) {
    buffer = mySerial.read();
    command0 = buffer[0];
    i++;
    checksum = command0;
if (command0==REPORT_EVENT){
while (mySerial.available()<3); // attend 3 caractères
buffer = mySerial.read();
checksum ^= buffer;
i++;
object0 = buffer[1]<<8 | buffer[2];
buffer = mySerial.read ();
checksum ^= buffer;
i++;
object0 = buffer[1]<<8 | buffer[2];
buffer = mySerial.read();
checksum ^=buffer;
i++;
value0 = buffer[3]<<8 | buffer[4];
}
flag0 = (checksum==mySerial.read());
}
return flag0;
}
Le problème c'est que cela rend la fonction bloquante il faudrait peut être la reécrire avaec des fonction non bloquantes comme Serial.readBytes(). Mais cela compliquerait peut être un peu. Si ça fonctionne comme ça il ne faut peut être pas se compliquer.

ATTENTION code non vérifié
1556  International / Français / Re: Touchscreen Seeed Studio, image .jpeg on: July 04, 2013, 03:30:29 pm
Le format JPEG n'est pas du tout adapté au traitement sur des petits processeurs. Il met en oeuvre des tables et du calcul matriciel sur des flottants.
Honnêtement, je ne pense pas qu'avec sa faible quantité de mémoire l'arduino puisse faire de la décompression. Peut être sur une Méga faudrait voir.
1557  International / Français / Re: moteur manque de patate on: July 04, 2013, 02:32:47 am
Le moteur pas à pas c'est sympa mais ce n'est pas la solution à tout les problèmes.
Il faut bien évaluer les avantages et les inconvénients d'une technologie avant de partir dans une réalisation.
Pour un télescope qui demande un mouvement très lent et très fluide (en phase de suivi) un moteur courant continu avec une bonne démultiplication et certainement plus adapté.
1558  International / Français / Re: probleme arduino et relais 12v on: July 03, 2013, 02:34:27 am
On dirait que tu commutes de la puissance c'est pas plutôt là que se situerait le problème?
1559  International / Français / Re: Probléme de code incompréhensible pour un débutant on: July 02, 2013, 06:35:54 am
Code:
#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <string.h>
#include <SD.h>

Cela fait beaucoup de librairies. Je pencherai pour un problème de saturation de la mémoire. Surtout avec les symptômes que tu décris:
Quote
lorsque j'utilise le bouton de tir l’écran m'affiche des caractères inattendues pendant quelque secondes comme ceci
Cela ressemble vraiment à une chaîne de caractères qui déborde
   - soit parce qu'il y a un problème d'allocation cela arrive souvent lorsqu'on concatène des chaînes pour en faire une plus longue
   - soit parce que la mémoire est saturée et des tampons ne peuvent plus être alloués dynamiquement et les fonctions ne le testant souvent pas on écrase à ce moment là d'autres données.

La librairies SD est je crois assez gourmande en mémoire car elle conserve des buffers ouverts en permanence. Et la librairie String est aussi connue pour sa gestion de mémoire peut optimisée.

Regardes là: http://playground.arduino.cc/Code/AvailableMemory
Cela permet de contrôler la mémoire disponible. Tu peux faire afficher la mémoire disponible à différents moments vers la console pour tenir à l'oeil l'état de la mémoire.
1560  International / Français / Re: RTClib d'ADAFRUIT on: July 01, 2013, 02:33:38 pm

Code:
...
void setup()   // Initial setup
  {   
    Wire.begin();
    RTC.begin();

  if (! RTC.isrunning())
  {
    myGLCD.print("RTC is NOT running!",CENTER, 115);
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  ....
  }

void loop()
 {   
 DateTime now = RTC.now();     
 myGLCD.printNumI(now.second(),200,300);
....
Dans la portion de code que tu donnes, la ligne RTC.adjust(DateTime(__DATE__, __TIME__))t est sensée mettre la RTC à l'heure si la RTC n'est pas activée (ce qui est le cas lorsque tu la mets en route pour la première fois). L'heure et la date utilisées sont celles de la compilation. Il faut donc compiler le soft et l'exécuter tout de suite sinon l'heure est fausse. Seulement si tu as fait tourner une fois le logiciel, cette ligne ne s'exécute plus. Si tu veux faire une mise à l'heure il faut forcer l'exécution de cette ligne. Ou mettre en place un autre moyen de mise à l'heure.

Concernant le rafraîchissement de l'affichage, la ligne DateTime now = RTC.now(); récupère l'heure courante et devrait donc permettre la mise à jour de ton affichage. Maintenant il faudrait voir le reste du code pour vérifier si rien ne bloque par ailleurs.
Pages: 1 ... 102 103 [104] 105 106 ... 229