Table des matières:

Minuteries Arduino : 8 projets : 10 étapes (avec photos)
Minuteries Arduino : 8 projets : 10 étapes (avec photos)

Vidéo: Minuteries Arduino : 8 projets : 10 étapes (avec photos)

Vidéo: Minuteries Arduino : 8 projets : 10 étapes (avec photos)
Vidéo: Top 3 Ideas With Arduino | 3 Awesome Arduino Projects 2024, Juin
Anonim
Minuteurs Arduino: 8 projets
Minuteurs Arduino: 8 projets

L'Arduino Uno ou Nano peut générer des signaux numériques précis sur six broches dédiées en utilisant les trois minuteries intégrées. Ils ne nécessitent que quelques commandes pour être configurés et n'utilisent aucun cycle CPU pour fonctionner !

L'utilisation des minuteries peut être intimidante si vous partez de la fiche technique complète ATMEGA328, qui compte 90 pages dédiées à leur description ! Plusieurs commandes Arduino intégrées utilisent déjà les minuteries, par exemple millis(), delay(), tone(), AnalogWrite() et la bibliothèque servo. Mais pour utiliser toute leur puissance, vous devrez les configurer via les registres. Je partage ici quelques macros et fonctions pour rendre cela plus facile et plus transparent.

Après un très bref aperçu des minuteries, suivez 8 projets sympas qui reposent sur la génération de signaux avec les minuteries.

Étape 1: Composants requis

Composants requis
Composants requis

Pour réaliser les 8 projets, vous aurez besoin de:

  • Un Arduino Uno ou compatible
  • Un prototype de bouclier avec mini protoboard
  • 6 câbles de démarrage de planche à pain
  • 6 cavaliers de planche à pain courts (faites-vous à partir d'un fil de raccordement solide de 10 cm)
  • 2 laisses crocodiles
  • 1 LED blanche de 5 mm
  • une résistance de 220 Ohm
  • une résistance de 10kOhm
  • un potentiomètre de 10kOhm
  • 2 condensateurs céramique 1muF
  • 1 condensateur électrolytique 10muF
  • 2 diodes, 1n4148 ou similaire
  • 2 micro servomoteurs SG90
  • 1 haut-parleur 8Ohm
  • 20m de fil émaillé fin (0,13mm)

Étape 2: Présentation des minuteries Arduino pour la génération de signaux

Timer0 et timer2 sont des temporisateurs de 8 bits, ce qui signifie qu'ils peuvent compter de 0 à 255 au maximum. Timer1 est un timer 16 bits, il peut donc compter jusqu'à 65535. Chaque timer a deux broches de sortie associées: 6 et 5 pour timer0, 9 et 10 pour timer1, 11 et 3 pour timer2. La minuterie est incrémentée à chaque cycle d'horloge Arduino, ou à une vitesse réduite par un facteur de pré-échelle, qui est soit 8, 64, 256 ou 1024 (32 et 128 sont également autorisés pour la minuterie2). Les temporisateurs comptent de 0 à « TOP », puis à nouveau (PWM rapide) ou vers le bas (PWM à phase correcte). La valeur de 'TOP' détermine donc la fréquence. Les broches de sortie peuvent définir, réinitialiser ou basculer à la valeur du registre de comparaison de sortie, de sorte que celles-ci déterminent le cycle de service. Seul timer1 a la capacité de régler indépendamment la fréquence et les cycles de service pour les deux broches de sortie.

Étape 3: clignotement du voyant

Image
Image
Clignotement LED
Clignotement LED
Clignotement LED
Clignotement LED

La fréquence la plus basse pouvant être atteinte avec les temporisateurs 8 bits est 16MHz/(511*1024)=30, 6Hz. Donc pour faire clignoter une LED à 1Hz, il faut un timer1, qui peut atteindre des fréquences 256 fois plus petites, 0,12 Hz.

Connectez une LED avec son anode (jambe longue) à la broche 9 et connectez sa cathode avec une résistance de 220 Ohm à la terre. Téléchargez le code. La LED clignotera à exactement 1 Hz avec un cycle de service de 50 %. La fonction loop() est vide: le timer est initialisé à setup() et ne nécessite aucune attention supplémentaire.

Étape 4: Gradateur LED

Image
Image
Gradateur LED
Gradateur LED
Gradateur LED
Gradateur LED

La modulation de largeur d'impulsion est un moyen efficace de réguler l'intensité d'une LED. Avec un bon pilote, c'est aussi la méthode préférée pour réguler la vitesse des moteurs électriques. Étant donné que le signal est soit à 100 % activé, soit à 100 % désactivé, aucune puissance n'est gaspillée sur une résistance en série. Fondamentalement, c'est comme faire clignoter la LED plus rapidement que l'œil ne peut suivre. 50 Hz est en principe suffisant, mais il peut encore sembler scintiller un peu et lorsque la LED ou les yeux bougent, une « traînée » non continue gênante peut en résulter. En utilisant une pré-échelle de 64 avec un timer de 8 bits, nous obtenons 16MHz/(64*256)=977Hz, ce qui convient. Nous choisissons timer2, de sorte que timer1 reste disponible pour d'autres fonctions, et nous n'interférons pas avec la fonction Arduino time(), qui utilise timer0.

Dans cet exemple, le rapport cyclique, et donc l'intensité, est régulé par un potentiomètre. Une deuxième LED peut être réglée indépendamment avec la même minuterie à la broche 3.

Étape 5: Convertisseur numérique-analogique (DAC)

Image
Image
Convertisseur numérique-analogique (DAC)
Convertisseur numérique-analogique (DAC)
Convertisseur numérique-analogique (DAC)
Convertisseur numérique-analogique (DAC)

L'Arduino n'a pas de vraie sortie analogique. Certains modules prennent une tension analogique pour réguler un paramètre (contraste d'affichage, seuil de détection, etc.). Avec un seul condensateur et une seule résistance, timer1 peut être utilisé pour créer une tension analogique avec une résolution de 5 mV ou mieux.

Un filtre passe-bas peut « moyenner » le signal PWM à une tension analogique. Un condensateur est connecté via une résistance à une broche PWM. Les caractéristiques sont déterminées par la fréquence PWM et les valeurs de la résistance et du condensateur. La résolution des temporisateurs 8 bits serait de 5 V/256 = 20 mV, nous optons donc pour Timer1 pour obtenir une résolution de 10 bits. Le circuit RC est un filtre passe-bas de premier ordre et il aura une certaine ondulation. L'échelle de temps du circuit RC doit être beaucoup plus grande que la période du signal PWM pour réduire l'ondulation. La période que nous obtenons pour une précision de 10 bits est de 1024/16MHz = 64mus. Si nous utilisons un condensateur de 1muF et une résistance de 10kOhm, RC=10ms. L'ondulation crête à crête est d'au plus 5V*0,5*T/(RC)=16mV, ce qui est considéré comme suffisant ici.

Notez que ce DAC a une impédance de sortie très élevée (10kOhm), donc la tension chutera considérablement s'il consomme du courant. Pour éviter cela, il peut être tamponné avec un ampli op, ou une autre combinaison de R et C peut être choisie, par exemple 1kOhm avec 10muF.

Dans l'exemple, la sortie du DAC est pilotée avec un potentiomètre. Un deuxième canal DAC indépendant peut être exécuté avec timer1 sur la broche 10.

Étape 6: Métronome

Image
Image
Métronome
Métronome
Métronome
Métronome

Un métronome permet de garder une trace du rythme lors de la lecture de musique. Pour des impulsions très courtes, la sortie de la minuterie arduino peut être directement transmise à un haut-parleur, ce qui produira des clics clairement audibles. Avec un potentiomètre, la fréquence de battement peut être réglée de 40 à 208 battements par minute, en 39 étapes. Timer1 est nécessaire pour la précision requise. La valeur de 'TOP', qui détermine la fréquence, est modifiée à l'intérieur de la fonction loop(), et cela demande de l'attention ! Vous voyez ici que le mode WGM diffère des autres exemples qui ont une fréquence fixe: ce mode, avec TOP défini par le registre OCR1A, a une double mise en mémoire tampon et protège contre l'absence de TOP et l'obtention d'un long pépin. Cependant, cela signifie que nous ne pouvons utiliser qu'une seule broche de sortie.

Étape 7: Spectre sonore

Image
Image
Spectre sonore
Spectre sonore
Spectre sonore
Spectre sonore

Les humains peuvent entendre plus de 3 ordres de grandeur de fréquences sonores, de 20 Hz à 20 kHz. Cet exemple génère le spectre complet avec un potentiomètre. Un condensateur de 10muF est placé entre le haut-parleur et l'Arduino pour bloquer le courant continu. Timer1 produit une onde carrée. Le mode de génération de forme d'onde ici est PWM à phase correcte. Dans ce mode, le compteur commence à compter à rebours lorsqu'il atteint le sommet, ce qui entraîne des impulsions dont la moyenne est fixe, même lorsque le rapport cyclique varie. Cependant, il en résulte également une période (presque) double, et il se trouve qu'avec la prééchelle 8, timer1 couvre tout le spectre audible, sans qu'il soit nécessaire de changer de prééchelle. Ici aussi, puisque la valeur de TOP est modifiée à la volée, l'utilisation d'OCR1A comme top réduit les problèmes.

Étape 8: Servomoteurs

Image
Image
Les servomoteurs
Les servomoteurs
Les servomoteurs
Les servomoteurs

Il existe de puissantes bibliothèques de servomoteurs, mais si vous n'avez que deux servos à piloter, autant le faire directement avec timer1, et ainsi réduire l'utilisation du processeur, de la mémoire et éviter les interruptions. Le servo SG90 populaire prend un signal de 50 Hz, et la longueur d'impulsion code la position. Idéal pour timer1. La fréquence est fixe, de sorte que les deux sorties sur la broche 9 et la broche 10 peuvent être utilisées pour diriger les servos indépendamment.

Étape 9: doubleur de tension et onduleur

Doubleur de tension et onduleur
Doubleur de tension et onduleur
Doubleur de tension et onduleur
Doubleur de tension et onduleur
Doubleur de tension et onduleur
Doubleur de tension et onduleur

Parfois, votre projet nécessite une tension supérieure à 5V ou une tension négative. Il peut s'agir d'exécuter un MOSFET, d'exécuter un élément piézo, d'alimenter un amplificateur opérationnel ou de réinitialiser une EEPROM. Si la consommation de courant est suffisamment faible, jusqu'à ~5mA, une pompe de charge peut être la solution la plus simple: seulement 2 diodes et deux condensateurs connectés à un signal pulsé d'une minuterie permettent de doubler l'arduino 5V à 10V. En pratique, il y a 2 chutes de diodes, ce sera donc plutôt 8,6V en pratique pour le doubleur, ou -3,6V pour l'onduleur.

La fréquence de l'onde carrée doit être suffisante pour pomper suffisamment de charge à travers les diodes. Un condensateur de 1 muF déplace 5 muC de changement lorsque la tension varie entre 0 et 5 V, donc pour un courant de 10 mA, la fréquence doit être d'au moins 2 kHz. En pratique, une fréquence plus élevée est préférable, car elle réduit l'ondulation. Avec timer2 comptant de 0 à 255 sans pré-échelle, la fréquence est de 62,5 kHz, ce qui fonctionne bien.

Étape 10: Transfert d'alimentation sans fil

Image
Image
Transfert d'alimentation sans fil
Transfert d'alimentation sans fil
Transfert d'alimentation sans fil
Transfert d'alimentation sans fil

Il n'est pas rare de charger une montre intelligente sans câbles, mais la même chose peut facilement faire partie d'un projet Arduino. Une bobine avec un signal haute fréquence peut transférer de l'énergie à une autre bobine voisine par induction, sans contact électrique.

Préparez d'abord les bobines. J'ai utilisé un rouleau de papier de 8,5cm de diamètre et du fil émaillé de 0,13mm de diamètre pour réaliser 2 bobines: la primaire à 20 spires, la secondaire à 50 spires. L'auto-inductance de ce type de bobine avec N enroulements et un rayon R est ~5muH * N^2 * R. Donc pour N=20 et R=0.0425 donne L=85muH, ce qui a été confirmé avec le testeur de composants. Nous produisons un signal avec une fréquence de 516kHz, résultant en une impédance de 2pi*f*L=275Ohm. C'est suffisamment élevé pour que l'Arduino ne passe pas en surintensité.

Pour faire fonctionner la bobine plus efficacement, nous aimerions utiliser une véritable source CA. Il y a une astuce qui peut être faite: les deux sorties d'un temporisateur peuvent fonctionner en opposition de phase, en inversant l'une des sorties. Pour le rendre encore plus similaire à une onde sinusoïdale, nous utilisons le PWM à correction de phase. De cette façon, entre les broches 9 et 10, la tension alterne entre les deux 0V, la broche 9 +5V, les deux 0V, la broche 10 +5V. L'effet est montré dans l'image à partir d'une trace de portée (avec une pré-échelle de 1024, cette portée de jouet n'a pas beaucoup de bande passante).

Connectez la bobine primaire aux broches 9 et 10. Connectez une LED à la bobine secondaire. Lorsque la bobine secondaire est rapprochée du primaire, la LED s'allume fortement.

Conseillé: