Langues

Première sortie, premiers problèmes

Maquette

Hier soir, installation de la maquette. Au moment de sortir vers 17h, j'ai dû me raviser car il pleuvait quand même pas mal. Au fond c'était une chance, car ça m'a donné l'occasion de bien imperméabiliser le montage à l'aide d'un film de plastique. À 18h je me suis donc rendu dans les montagnes à côté et j'ai installé le truc du mieux que j'ai pu, en tentant de ne pas glisser sur les pierres coupantes. J'ai pris quelques images, ma caméra vidéo a failli tomber en bas de la montagne, mais sinon, rien d'inquiétant et après quelques adieux, je suis rentré.

Ce matin, vague mal de tête (c'était la fête d'Océane hier et nous avons bu pas mal de champagne et de vin) et surtout, pluie battante. Vers 13h je suis allé récupérer le module. J'étais très inquiet. Je suis resté un temps pour observer, mais il ne bougeait plus. Je craignais le pire alors je l'ai ramené à l'atelier. Finalement en le déballant j'ai constaté qu'il n'y avait eu aucune infiltration d'eau. Par contre, le voltage (initiallement autour de 12V hier soir) était rendu à 2.1V, clairement trop peu pour alimenter le circuit.

En regardant les données (voir plus bas) je constate que la dernière ligne de données enregistrée est après 8 heures de marche (en temps "Arduino" ce qui n'est pas nécessairement exact). Le voltage mesuré à cette heure est d'environ 9V.

Explications possibles

Attendu que:

  1. la seule façon que ça puisse arriver est que à partir de l'heure 8 le système soit interrompu constamment (reset)
  2. il est impossible que les batteries aient été soudainement drainées dans la 7e heure
  3. le froid pourrait faire diminuer la performance des batteries mais la charge maximale devrait suivre à peu près la courbe du voltage

La seule cause possible semble être une consommation (current drain) excessive dans la 8e heure. Celle-ci peut être attribuable à:

  1. Une défectuosité causant un court-circuit
  2. Surcharge des servo-moteurs qui drainent trop de courant et causent un reset constant
  3. Les servos restent "jammés" dans un des fils et se mettent à "forcer" causant un drainage rapide de l'énergie

Conclusion

  • Le problème est probablement causé par un reset (c'est le plus logique) dû à une surcharge des servos.
  • On note que l'appareil consomme énormément d'énergie (est-ce dû aux servos ou au fonctionnement normal? eg. analogRead()). Passer de 12V à 9V en 8h c'est quand même beaucoup car les servos ne bougent pas souvent.

À faire

  • Vérifier la consommation du Arduino
  • Ajouter un condensateur entre les pattes des servos pour "smoother" le courant OU alimenter les servos avec un bloc de piles séparé
  • Détacher (detach()) les servos après chaque utilisation pour éviter qu'ils ne forcent
  • Attendre un peu entre chaque mouvement de servo gauche-droite (pour pas qu'ils bougent en même temps)
  • Réduire la consommation en utilisant les trucs suivants:
    • Effectuer moins de analogRead() (pas nécessaire d'en faire autant)
    • Mettre le ADC à off le reste du temps ou utiliser le watchdog
    • Pour les diviseurs de voltage: utiliser de plus grosses résistances (eg. 100k et 150k)
    • Enlever les trucs de Serial

Données brutes

Interprétation des colonnes:

[timecheck] [light_at_angle_1] ... [light_at_angle_16] [voltage_batteries]

Timecheck: permet de vérifier s'il y a eu une interruption (reset, power out)
Angles: 22 45 67 90 112 135 157 180 202 225 247 270 292 315 337
Voltage: 1023 ~= 14.36V

0
0 541 550 631 563 612 621 623 632 631 604 627 594 587 584 584 573 834
1
25 467 500 581 531 555 580 567 584 581 562 575 556 553 505 548 458 825
2
50 91 115 384 147 272 374 324 426 384 263 338 219 122 89 118 94 821
3
75 87 81 82 51 61 67 76 69 82 68 83 58 63 77 86 80 787
4
100 90 82 52 52 52 50 54 51 52 56 55 55 65 78 87 82 690
5
125 89 83 59 57 57 56 57 58 59 59 60 59 68 80 88 92 686
6
150 90 85 60 61 66 59 61 60 60 64 60 63 69 80 89 92 653
7
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
8
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

...

27
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
28
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Hier soir, installation de la maquette. Au moment de sortir vers 17h, j'ai dû me raviser car il pleuvait quand même pas mal. Au fond c'était une chance, car ça m'a donné l'occasion de bien imperméabiliser le montage à l'aide d'un film de plastique. À 18h je me suis donc rendu dans les montagnes à côté et j'ai installé le truc du mieux que j'ai pu, en tentant de ne pas glisser sur les pierres coupantes. J'ai pris quelques images, ma caméra vidéo a failli tomber en bas de la montagne, mais sinon, rien d'inquiétant et après quelques adieux, je suis rentré.

Problème de servo?

J'ai fait un estimé de la consommation du système. J'en déduis que plus de 80% de la consommation est attribuable aux servos! Et là-dessus, 75% serait dû à la consommation "quiescente" du servo. La datasheet de mes servo-moteurs Parallax mentionne: "Maximum current draw is 140 +/- 50 mA at 6 VCDC when operating in no load conditions, 15 mA when in static state". Que veut dire "static state"? Est-ce que c'est quand le servo demeure immobile mais reçoit toujours un signal ie. est-ce que quand on appele la fonction detach() dans Arduino cela arrête la consommation?

D'après ce post le servo-moteur consomme toujours un certain courant, même si detach() est appelé. Malheureusement j'ai fait sauter le fusible sur mon multimètre en arrivant (je l'ai branché sur du 220V...) donc je ne peux mesurer la consommation.

Il y a deux hypothèses:

  1. Le "static current" (15mA) fait baisser rapidement le voltage. À vérifier:
    1. Débrancher les servos de la maquette pour voir si le problème est bien dû aux servos
    2. Rebrancher les servos mais les laisser toujours à detach()
    3. Si le problème est toujours présent utiliser des transistor pour contrôler le on/off et voir ce que ça donne
  2. Lorsque les servos sont activés le "power drag" fait resetter le Arduino. Ceci est confirmé comme un problème de ce type de servos, tel que décrit ici pour les PIC
    1. Ajouter un condensateur de 3000uF entre le GND et le Vcc: Note: je l'ai fait et testé et ça aide, mais ça ne règle pas le problème quand ça se met à resetter il n'y a pas grand chose à faire
    2. Gérer le reset: quand on a resetté à cause d'un faible courant il ne faut pas repartir tout de suite il faut que le courant remonte
    3. Alimenter avec un battery pack séparé tel que suggéré dans le guide mentionné ci-haut

Vérifications

  1. Débrancher les servos de la maquette pour voir si le problème est bien dû aux servos
  2. Rebrancher les servos mais utiliser des transistor pour contrôler le on/off et voir ce que ça donne

Coupables

J'ai les résultats ce matin de l'expérience (1) "Débrancher les servos de la maquette pour voir si le problème est bien dû aux servos". Le module roule toujours après 12 heures de travail. Les données indiquent une baisse beaucoup plus lente du voltage à travers le temps.

J'ai tenté une variante de (2) – nous l'appelerons (2') – qui consiste à "Brancher les servos sur le power mais pas sur les sorties digitales" donc c'est un peu l'équivalent de faire detach() normalement du moins... À 12:00 le voltage est à 10.30V, il est toujours à la même valeur après 3 heures comme le confirme les données collectées (dernière colonne = lecture analogRead() du voltage des batteries):

0 472 457 481 449 441 485 450 495 481 440 470 450 462 483 463 492 832
25 462 482 488 485 483 487 481 489 488 485 486 486 482 454 483 447 830

La solution (3) "Utiliser des transistor pour contrôler le on/off et voir ce que ça donne" ne semble pas fonctionner: j'ai essayé de couper le courant avec des transistors mais ce n'est pas suffisant, je ne sais pas pourquoi (il faut peut-être un optocoupleur ou un relais).

J'ai ensuite tenté (2) "Rebrancher les servos mais les laisser toujours à detach()". Après 2h le voltage n'a pas varié: toujours à 10.3V.

Conclusion:

  • La baisse de voltage n'est pas dûe au "quiescent current" des servos. Elle est probablement dûe à un mélange de (a) utilisation des servos (même si c'est sur de très courtes durées) et (b) baisse de la température dans la nuit.
  • Le réel problème est le reset causé par l'utilisation des servos qui drainent trop de courant

Nouveaux résultats

J'ai appliqué toutes les idées mentionnées pour réduire la consommation, sauf pour le diviseur de voltage (j'ai calculé qu'il ne consommait que 2mA, ce qui est peu mais quand même, ce serait mieux d'utiliser du 10k/15k ou même 100k/150k si ça marche quand même (il faut au moins avoir un courant suffisant pour le ADC).

Mettre le ADC à off ne changeait pas grand chose, j'ai essayé avant-hier sans grande amélioration. Donc je fais deux analogRead() à chaque 8 secondes et je mets le arduino en mode powerdown en attendant (très faible consommation). J'ai enlevé les calls sériels (quoique ça ne change pas grand chose je crois).

Le système a l'air de tenir un peu plus longtemps (13 "heures"). Mais c'est étrange car la première partie est manquante (les données sont à zéro jusqu'à l'heure 10). Très bizarre, je ne peux pas me l'expliquer.

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <pre> <h3> <h4> <h5> <h6>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question permet de vérifier si vous êtes un visiteur humain afin d'empêcher les envois automatisés de pourriel.
Fill in the blank
By submitting this form, you accept the Mollom privacy policy.