Show Posts
Pages: 1 ... 109 110 [111] 112 113 ... 243
1651  International / Français / Re: Codage morse pour trasmission GPIO sans fil "sans bavures" on: August 14, 2013, 01:13:47 am
Quote
Étant donné que je ne peux utiliser de connexion série,
Le fait que la liaison soit unidirectionnelle n'empêche pas d'utiliser la liaison série.
La sortie RX de ton Raspi peut entrer dans l'émetteur et le sortie du récepteur entrer dans l'arduino.
C'est plus simple à gérer mais cela ne dispense pas de mettre un contrôle de validité de la liaison.

Quote
Dans une transmission de données, oui. Mais là c'est une transmission d'état 1/0,
Une donnée n'est jamais qu'une suite d'états.
1652  International / Français / Re: Stepper motor controlé par opto sensor on: August 14, 2013, 01:08:09 am
Il suffit d'attendre que la coupure cesse avznt de continuer

Code:
void loop() {
 if (digitalRead(OPTO) == NOT_CUT) digitalWrite(ledPin, LOW); else digitalWrite(ledPin, HIGH);
 if (digitalRead(OPTO) == CUT) {    // Opto test
   count = count + 1;                      // Increment the count variable
   if (count == 3) count = 0;            // Resetting the variable count 2=>0
   if (count == 0){
      // motor stopped
      digitalWrite(EN1, LOW);
      digitalWrite(EN2, LOW);
   }
   if (count == 1){
     // Motor forward
     digitalWrite(EN1, HIGH);
     digitalWrite(EN2, HIGH);
     myStepper.step(stepsPerRevolution);
   }
   if (count == 2){
    // Motor backward
    digitalWrite(EN1, HIGH);
    digitalWrite(EN2, HIGH);
    myStepper.step(-stepsPerRevolution);
  }
  while(digitalRead(OPTO) == CUT);  // On attends que la coupure disparaisse
 }
}
1653  International / Français / Re: [Mise sur rails] Laser distance + Arduino UNO on: August 13, 2013, 12:12:52 pm
Le plus simple c'est d'utiliser un shield de prototypage que tu pourras monter sur ta carte arduino.
Tu pourras ainsi souder les petits composants sur la zone de prototypage et faire les connexions vers les entrées de l'arduino. L'ensemble devrait être assez robuste.
http://www.lextronic.fr/P4130-kit-shield-prototypage.html

Il y a aussi une version avec des borniers qui pourrait être pratique pour raccorder ton capteur
http://www.lextronic.fr/P19666-platine-bornier-v15-pour-arduino.html

J'ai pris des exemples chez Lextronic mais il y a d'autres sources bien évidemment.
1654  International / Français / Re: Compteur double DS2423 on: August 13, 2013, 05:56:21 am
Je ne comprends pas très bien pourquoi tu veux te compliquer la vie avec un système de comptage en one wire alors que d'après ton synoptique tu as un arduino dévolu au traitement de ces 2 capteurs.
Le comptage d'impulsion en utilisant les 2 entrées d'interruption ne devrait pas consommer beaucoup de ressources.
1655  International / Français / Re: Compréhension code on: August 13, 2013, 12:08:29 am
Code:
#define sbi(PORT, bit) (PORT |= (1<<bit))
#define cbi(PORT, bit) (PORT &=~(1<<bit))

sbi positionne à 1 un bit dans un port d'entrée/sortie. sbi = Set BIt
cbi positionne à 0 un bit dans un port d'entrée/sortie. cbi = Clear BIt

PORT = adresse du registre à modifier
bit     = n° du bit (valeur de 0 à 7) à modifier dans le registre

Je parle de port d'entrée/sortie parce que le mot PORT apparaît dans le define mais en fait cette macro fonctionne aussi bien avec n'importe quel registre accessible en lecture/écriture

Code:
number %= 1000;
number = number % 1000;
Oui cette équivalence est vraie.

Pour info les mises en forme ne fonctionnent pas entre les balises code.
1656  International / Français / Re: [Mise sur rails] Laser distance + Arduino UNO on: August 12, 2013, 10:42:28 am
Quote
il s'agit d'un dispositif que des passants pourront librement déplacer de droite à gauche sur 1m50 pendant 4 jours.
Ton capteur est prévu pour fonctionner entre 100mm et 300m. Tu es loin du compte avec tes 1m50...

Quote
je te suis pas trop dans la suite de ton poste au niveau des résistances à utiliser..
La valeur des résistances est relativement peut importante.
La seule contrainte c'est de ne pas faire débiter plus de 15mA au capteur donc il faut que la somme des résistances reste inférieur à 660Ohms.
Mettre des résistances élevées c'est consommer moins. Mais en contre partie comme l'impédance de la ligne est plus élevée elle est plus sensible aux perturbations électriques et électromagnétiques.
Donc 2 résistances de 1k c'est très bien aussi.
1657  International / Français / Re: Contrôle de port de la carte Arduino depuis PC Linaro en C on: August 12, 2013, 10:33:21 am
Ton code arduino fait ce que tu l'as programmé à faire.
Dans loop tu as mis à la suite la réception des messages par la liaison série et les commandes automatiques donc il les exécute en séquence.

Si tu veux un comportement différent, il faut modifier ton programme.
En premier lieu, si tu veux avoir 2 comportement différents, automatique et manuel, il faut définir les conditions de passage d'un mode à l'autre.
Il faut bien détailler par écrit ce que doit faire ton programme:
     Dans quel cas il est autonome, dans quel cas il est piloté par la liaison série.
     Comment il passe d'autonome à piloté:
             par une commande, laquelle?
             automatiquement, dans quelle(s) condition(s) conditions extérieure, action sur un bouton, temporisation,....

Ensuite tu pourras réécrire ton programme pour qu'il fasse ce que tu veux.
1658  International / Français / Re: Récupération d'adresse DS18B20 dans un tableau on: August 12, 2013, 07:16:07 am
Par contre, mon idée de rajoute une unité au tableau ( donc au lieu que adress soit un tableau de byte 8, j'ai fait un de 9) ça ne fonctionne pas.

On ne peut pas juger car tu n'as pas mis le code de getTemp.

En fait, tout va bien jusqu'à la mesure de température. Quand on appelle l'adresse et que l'on fait la commande capteur.select(adress), il faut que l'adresse soit un tableau de 8 éléments. Un tableau de 9 créé un perturbation et fait déconner tout le truc.
Surprenant, la librairie ne lit que les 8 premiers éléments du tableau passé en argument.
Quelle perturbation?

1659  International / Français / Re: [Mise sur rails] Laser distance + Arduino UNO on: August 12, 2013, 04:47:26 am

Mais deux problèmes (je crois) se posent à moi:
Déjà, comme spécifié plus haut, le modèle de mon laser retourne une tension allant de 0 à 10V. Hors si j'ai bien compris Arduino n'accepte que du 0-5V..? J'ai fais quelques recherches sur le net mais peu fructueuses. Est-ce qu'il suffit d'utiliser quelques fonctions/formules dans mon programme pour le remmener à l'équivalence de 0-5V (avec la fonction map() par exemple), ou cela se passe-t-il en amont avec des composants supplémentaires ?
Euh comment dire....
10V sur l'entrée de l'arduino c'est destructif.
Il faut limiter la tension sur l'entrée à 0-5V strictement. Pour cela il faut réaliser un diviseur potentiomètrique.
Dans ton cas il faut diviser par 2 pour passer de 10V de dynamique à 5V donc il faut que les 2 résistances soient égales. La valeur n'est pas très critique pour autant que la charge qu'elles représentes ne soit pas trop forte pour ton capteur. D'après la notice il faut être inférieur à 15mA. Si, par exemple, on prend 2 résistances de 4,7kOhms le courant sera de l'ordre du mA.
Si l'équipement est installé dans un environnement fortement perturbé (machines tournantes par exemples) il fadrait mieux passer à 2 résistances de 470Ohms le courant serait plus fort mais cela donnerait une meilleur immunité aux perturbations. Dans tous les cas limiter la distances entre le capteur et l'arduino.

Ensuite, lors que j'ai réussi à lire la tension dans mon programme, j'ai finalement réalisé que je ne savais pas ce que j'étais sensé en faire......  smiley-roll-sweat smiley-roll-sweat
Déjà sur la doc du laser, je ne vois pas ce qu'il me retourne comme données. Est-ce des paquets de bytes que je dois manipuler ? J'en ai aucune idée..

De ce que j'ai compris de la doc du capteur, il y a une phase d'apprentissage pendant laquelle tu détermines une position minimum et une position maximum. En mode opérationnel, le capteur te retourne une tension comprise entre 0 et 10V.
    - 0V correspondant à position min ou inférieure
    - 10V correspondant à position max ou supérieure
    - la tension est proportionnelle pour les distances comprises en min et max

Après ce que tu en fais..... c'est toi qui voit.
1660  International / Le bar / Re: Calcul de distance, HELP ! on: August 12, 2013, 03:08:48 am
Quote
Si on avait un beau bâton de flotte, la ok on pourrait trouver quelque chose. Mais on aura plus un jet difforme aléatoire

Il faut que la flux reste laminaire.  http://www.instructables.com/id/Laminar-Flow-Water-Jet-for-Under-25/
1661  International / Français / Re: Récupération d'adresse DS18B20 dans un tableau on: August 12, 2013, 02:58:35 am
Là il y a une erreur
Code:
byte b = 0;
  while(capteur.search(adress)&& b<sizeof(tableau)){//construit le tableau avec l'adresse et retourne true si "ok"
  b++;
  switch (b){
   ......

Tu incrémentes b avant le switch. Du coup il n'y aura jamais rien dans la ligne 0 du tableau puisque tu n'entres jamais dans le case 0.
Il faudrait placer cette incrémentation avant l'accolade qui ferme le while

Code:
     Serial.println(" ");
      b++;
  }
  adress[9]=1;//signifie true

Conseil:
   pour le debug de fonctions manipulant des tableaux, ne pas oublier de faire imprimer les index des tableaux en plus du contenu de celui-ci.
1662  International / Français / Re: Stabilité des mesures en fonction de l'alim ?!! on: August 12, 2013, 02:34:51 am
Sur un montage, j'ai eu ce souci de valeurs analogiques qui bougent toutes seules. j'y ai remédié en utilisant une tension de ref sur Aref. j'utilise alors cette tension Aref comme source pour mes potars ou capteurs. mais le souci, c'est que la pin du Aref du µP est directement reliée à la référence de l'ADC, soit AVcc au reset. Comme AVcc = Vcc, si on met une zener de 4.7V, il va y avoir pas mal de courant à passer par là tant qu'on ne fait pas un changement de référence Aref, au risque de détruire une partie du composant. je ne vois pas trop comment résoudre ça, mais une fois la référence externe en place, ça ne bouge plus du tout. utiliser un relais qui commuterait une bonne tension de référence une fois Aref déconnecté (par software) de AVCC?

Pour avoir branché un oscilloscope sur le Aref de la carte, je vous confirme que ça bouge dans tous les sens sur près de 200mV, en gros, pour s'en affranchir, il faudrait faire mesure = analogRead(xx) >> 3, soit faire retomber la précision à 7 bits (0 à 127 au lieu du 0 à 1023 d'origine)...

Il ne faut pas mélanger précision et bruit.

On utilise une référence externe lorsqu'on veut une référence de tension précise et connue.
La référence interne (1,1V) n'est pas très précise (+/-10%) mais n'est pas nécessairement bruitée.
L'utilisation du Vcc comme alimentation et tout sauf précis mais dans le cas ou on utilise des capteurs potentiomètriques si cette même tension est utilisée pour polariser les capteurs alors l'erreur s'annule. Par contre l'alimentation est bruitée.

Ensuite il y a le problème de conception de la carte arduino. Le Aref se ballade sur la carte et il attrape tout ce qui passe. Moralité le problème de bruit sur la référence et plus dû à cette piste mal routée qu'à la qualité de la référence.

Concernant l'utilisation d'une référence externe. Dans la documentation Atmel il est dit que la sortie Vref (la référence interne) est une source haute impédance. Donc elle ne mettra pas ta référence en court-circuit. Mais ce sera plutôt l'inverse. Si toi de ton coté tu prends la précaution de ne pas sortir sur une impédance trop basse (prévoir une résistance série dans la connexion vers Aref) alors il n'y aura pas de court-circuit. Par contre tant que le choix de la source de la référence n'aura pas été fait par le soft les résultats retournés par l'ADC seront faux.

Et dans tous les cas, comme il a été dit plus haut ajouter un condensateur sur la pin Aref du processeur.

Il faut aussi noter que chez Atmel  il n'y a pas que des idiots et ils ont prévu un mode réduction du bruit pour les acquisition par l'ADC qui utilise la mise en veille du processeur pendant les conversions afin de réduire les perturbations. Mais là il faut écrire sa propre fonction analogRead.
1663  International / Français / Re: Puce GPS et arduino on: August 12, 2013, 02:00:07 am
Dans le lien que tu cites on a déjà expliqué la différence entre une UART logicielle et une UART matérielle.
Si tu satures le processeur avec des données qui arrivent à toute vitesse il ne peut pas en même temps les interpréter.
Donc:
     - si la liaison est rapide préférer l'UART matérielle et utiliser l'UART logicielle pour le debug
     - est-il réellement nécessaire de transmettre à 115200 bauds? L'arduino n'est pas un foudre de guerre et si la réception se fait à 115200 bds en continu (quelle est la longueur des trames reçues?) il a le plus grand mal à traiter les données au fur et à mesure de leur arrivée et il risque fort de perdre des caractères de temps en temps par débordement du buffer de réception.
     - quand on veut aller vite, il faut soigner sont code afin d'optimiser le temps d'exécution.
1664  Using Arduino / Project Guidance / Re: Ardutester - Arduino Component Tester on: August 11, 2013, 03:15:35 pm
I currently have one on a breadboard for testing  and was planning to make it more durable on PCB.
If I can sign in to test your board I will be very proud to own one of yours.
1665  International / Français / Re: Installation de la librarie HomeEasy on: August 10, 2013, 03:40:06 pm
Tu places les fichiers que tu as récupéré dans ton répertoire sketchbook comme ça:
   sketchbook/libraries/HomeEasy/HomeEasy.cpp
   sketchbook/libraries/HomeEasy/HomeEasy.h
   sketchbook/libraries/HomeEasy/Examples/example_home_easy_receiver/example_home_easy_receiver.pde

Dans HomeEasy.h il faut remplacer
#include "WProgram.h"
par
#include "Arduino.h"

L'exemple compile sans problème
Pages: 1 ... 109 110 [111] 112 113 ... 243