horloge-brillie-double-face

/!\ ATTENTION BIEN LIRE L’ARTICLE JUSQUE AU BOUT /!\

 

Suite à quelques recherches les horloges fonctionnent par impulsions. Ces impulsions viennent d’une horloge dite mère.

Les impulsions sont espacées de 30 secondes chacune (1/2 minute). Chaque impulsion est successivement positive et négative. L’horloge à une résistance de 5Ω sous une tension de 1,5 Volt.

Un schéma suivra bientôt afin de reproduire ce comportement de balancier d’horloge mère via un pilotage électronique.

ÉDIT :

Pour des tests un petit Arduino, ni plus, ni moins. Ici les broches out et in sont communes et connecté chacune aux bornes de l’horloge. L’ATmega328 ne peux fournir un courant que de 40 mA par broches et nous avons besoin d’un courant entre 60 et 100 mA. C’est la raison pourquoi les broches sont communes.

Alternativement les groupes de broches deviennent HIGH et LOW. Les low(s) sont donc la masse (-) et les high deviennent POSITIVE à +5V pour un courant total disponible de l’ordre de 120 mA

int out_0 = 8;
int out_1 = 9;
int out_2 = 10;

int in_0 = 4;
int in_1 = 5;
int in_2 = 6;

int longOfCycle = 30000;
int longOfPulse = 500;

void setup() {                
  pinMode(out_0, OUTPUT);
  pinMode(out_1, OUTPUT);
  pinMode(out_2, OUTPUT);
  pinMode(in_0, OUTPUT);
  pinMode(in_1, OUTPUT);
  pinMode(in_2, OUTPUT);

}

void loop() {

  //PULSE 1

  digitalWrite(out_0, HIGH);
  digitalWrite(out_1, HIGH);
  digitalWrite(out_2, HIGH);
  digitalWrite(in_0, LOW);
  digitalWrite(in_1, LOW);
  digitalWrite(in_2, LOW);
  delay(longOfPulse); 
  delay(longOfCycle-longOfPulse);

  digitalWrite(out_0, LOW);
  digitalWrite(out_1, LOW);
  digitalWrite(out_2, LOW);

  //PULSE 2

  digitalWrite(out_0, LOW);
  digitalWrite(out_1, LOW);
  digitalWrite(out_2, LOW);
  digitalWrite(in_0, HIGH);
  digitalWrite(in_1, HIGH);
  digitalWrite(in_2, HIGH);
  delay(longOfPulse); 
  delay(longOfCycle-longOfPulse);

  digitalWrite(in_0, LOW);
  digitalWrite(in_1, LOW);
  digitalWrite(in_2, LOW); 

}

Et ça marche ;-)

EDIT 2 :

Voici le nouveau code corrigé et augmenté. Le but de la manœuvre est d’avoir une platine pcb la plus petite et la plus autonome possible. Je n’avais sous la main qu’un ATmega328P très largement sur calibré par rapport aux besoins. On aurait pu utiliser à la place un ATtiny de 6/8 broches. Mais bon !

On utilise le Quartz interne de l’ATmega se qui évite d’utiliser un résonateur externe et deux condensateurs. Pour ça vous devez programmer les fusibles (fuses) du 328P. Pas d’inquiétude même si utilise ici le terme fusible ce n’est pas définitif.

int out_0 = 7;
int in_0 = 8;

int led = 13;

int longOfCycle = 15000;
int longOfPulse = 20;

void setup() {                
  pinMode(out_0, OUTPUT);
  pinMode(in_0, OUTPUT);

}

void loop() {

  //PULSE 1
  digitalWrite(led, HIGH);

  digitalWrite(out_0, HIGH);
  digitalWrite(in_0, LOW);

  delay(longOfPulse);

  digitalWrite(led, LOW);

  digitalWrite(out_0, LOW);

  delay(longOfCycle-longOfPulse);

  //PULSE 2
  digitalWrite(led, HIGH);

  digitalWrite(out_0, LOW);
  digitalWrite(in_0, HIGH);

  delay(longOfPulse);

  digitalWrite(led, LOW);

  digitalWrite(in_0, LOW);

  delay(longOfCycle-longOfPulse);

}

EDIT 3 :

A présent je déconseille fortement ce montage, même pour tester ! Les enroulements inductifs que représente le moteur du balancier de l’horloge peuvent induire des tension élevés en retour et donc griller irrémédiablement les entrés de l’ATmega. Je ferais un schéma dès que j’aurais un peu de temps (en besoin de finir mon horloge qui est toujours dans une carton).