Deutsch English Español Français Italiano

Carte de contrôle

La carte de commande (2021) remplace le premier ordinateur de vol qui n'était pas spécialisé dans la commande du SEE. Il embarquait un capteur BMP280 de mesure de pression, une Eprom de sauvegarde de données et la gestion de l'alimentation. La version 2021 est une carte spécialisée avec deux objectifs :

  • une commande logique 0/1 pour ouvrir le SEE : pas besoin d'intégrer un code dans l'ordinateur de vol "maitre", c'est la puce ATtiny85 qui s'en charge,
  • des fonctions de réglage des deux points : "ouverture" et "fermeture" à l'aide de résistances variables. 

Cette carte commande un servomoteur, actionneur utilisé depuis les premiers développements. On trouve aussi une entrée d'alimentation "de puissance" de manière à alimenter le servomoteur indépendamment du microcontrôleur. Dans le passé, nous avons constaté que le servomoteur provoque des chutes de tension pouvant arrêter le microcontrôleur (et rebooter celui-ci). 

Les LEDs ont une utilité secondaire, plus pour les besoins de développement qu'autre chose. Deux voyants indiquant l'alimentation et un voyant "FREE" indiquant que le SEE est déclenché. Le condensateur chimique intervient pour soutenir la tension aux bornes du microcontroleur. Les composants sont CMS (Composants Montés en Surface) pour réduire la taille de la carte, sauf l'ATtiny qui est dans un boitier classique, pour gérer sa programmation sur une platine de développement.

Cette carte est la première version d'une carte dédiée qui a réussi son couplage à BGC. Elle demeure un prototype qu'il faut améliorer encore.

Ici, le code à injecter dans l'ATtiny :

// SEE V3 - carte de controle version CMS // programme version ATtiny85 #include <SoftwareServo.h> // constantes const int commande = 0; const int servo = 1; const int led = 2; const byte position0 = A3; const byte position1 = A2; // variables int val0 = 0; int val1 = 0; //Servo de découplage SoftwareServo  myServo; void setup() {   // debug   // Serial.begin(9600); // Init port série   //   pinMode(commande, INPUT);   pinMode (led, OUTPUT);   myServo.attach(servo);   //myServo.setMinimumPulse(950);   //myServo.setMaximumPulse(2100);   digitalWrite(led, LOW); } void loop() {   val0 = analogRead(position0);   val0 = map(val0, 0, 1023, 0, 179);   val0 = val0/4;   val0 = val0*4;   val1 = analogRead(position1);   val1 = map(val1, 0, 1023, 0, 179);   val1 = val1/4;   val1 = val1*4;   //    if (digitalRead(commande) == HIGH) {     //ouverture du SEE     myServo.write(val1);     delay(15);     digitalWrite(led, HIGH);     SoftwareServo::refresh();   }   if (digitalRead(commande) == LOW) {     // position fermee     myServo.write(val0);     delay(15);     digitalWrite(led, LOW);     SoftwareServo::refresh();   } }

Note : le déclenchement se fait lorsque le signal de commande est HIGH. Avec du recul, je pense que c'est une mauvaise idée car en cas de parasites sur le fil de commande, le signal pourrait devenir HIGH involontairement. Le mieux est d'avoir un signal HIGH par défaut et de libérer le mécanisme quand il passe à LOW. A discuter !

haut