Modules Arduino

De Wiki Isen Engineering
Aller à : navigation, rechercher

Voici la liste des modules Arduino réalisés par le bureau. Vous retrouverez les tutoriels d'utilisation et les fichiers sources afin de les programmer ou de les reproduire sois-même.

Modules arduino.jpg

Buzzer

Un simple buzzer à connecter à l'arduino afin de jouer des sons. Il suffit de connecter le module buzzer à une sortie digitale de l'arduino et une broche GND.

Schéma de branchement, schéma du module et photo du module :

Code pour jouer une mélodie :

 1 /*
 2  Melody
 3  http://www.arduino.cc/en/Tutorial/Tone
 4  Schéma : buzzer sur D8
 5  */
 6 
 7 #include "pitches.h" //fichier à créer dans le dossier du projet, et contenant les valeurs des notes
 8 
 9 // notes à jouer
10 int melody[] = {
11   NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4
12 };
13 
14 // durée des notes à jouer (durée = seconde/ nombre)
15 int noteDurations[] = {
16   4, 8, 8, 4, 4, 4, 4, 4
17 };
18 
19 void setup() {
20   // boucle pour jouer les mélodies 
21   for (int thisNote = 0; thisNote < 8; thisNote++) {
22 
23     // durée de la note (division de seconde
24     int noteDuration = 1000 / noteDurations[thisNote];
25     //fonction permettant de jouer la note 
26     tone(8, melody[thisNote], noteDuration);
27 
28     // pause afin de distinguer la note
29     int pauseBetweenNotes = noteDuration * 1.30;
30     delay(pauseBetweenNotes);
31     // arrêter la mélodie
32     noTone(8);
33   }
34 }
35 
36 void loop() {
37   // mettre la boucle ici, si besoin d'utiliser la mélodie.
38 }

Le contenu du fichier pitches.h est disponible içi : Lien

Télécharger l'archive contenant les fichiers Eagle du module pour le fabriquer sois-même : Media:1 BUZZER.zip

Potentiomètre

Un simple potentiomètre à connecter à l'arduino afin de contrôler un servomoteur, faire varier une tension... Il suffit de connecter le module pontentiomètre à une broche +5V

Schéma de branchement, schéma du module et photo du module :

Code pour faire varier la fréquence de clignotement d'une LED :

 1 /*
 2  Trimmer
 3 https://www.arduino.cc/en/Tutorial/Potentiometer
 4 Schema: Led sur pin D13
 5 	Potentiomètre sur pin A2
 6  */
 7 
 8 int potPin = 2;    // variable contenant le numéro de la pin du potentiomètre
 9 int ledPin = 13;   // variable contenant le numéro de la pin de la led
10 int val = 0;       // variable contenant la valeur du pontentiomètre sur A2
11 
12 void setup() {
13   pinMode(ledPin, OUTPUT);  // mettre la broche D13 en sortie
14 }
15 
16 void loop() {
17   val = analogRead(potPin);    // lecture de la valeur du potentiomètre
18   digitalWrite(ledPin, HIGH);  // on allume la LED
19   delay(val);                  // on attends (val) milisecondes
20   digitalWrite(ledPin, LOW);   // on eteint la LED
21   delay(val);                  // on attends (val) milisecondes
22 }

Télécharger l'archive contenant les fichiers Eagle du module pour le fabriquer sois-même : Media:2 POTENTIOMETRE.zip


Bouton

Un simple bouton permettant de commander la LED intégrée de l'arduino sur D13. Le bouton est connecté à une entrée digitale de l'arduino. à l'état de repos ouvert, il est connecté à la masse a travers la résistance de pull-up et à l'état fermé, il est connecté au +5V. Schéma de branchement, schéma du module et photo du module :

Code pour faire varier la fréquence de clignotement d'une LED :

 1 /*
 2 Button
 3 https://www.arduino.cc/en/Tutorial/Button
 4 Schema: Led sur pin D13 
 5 	Bouton sur pin D2
 6  */
 7 const int buttonPin = 2;     // variable contenant le numéro de la pin du potentiomètre
 8 const int ledPin =  13;      // variable contenant le numéro de la pin de la LED
 9 
10 int buttonState = 0;         // variable contenant l'état du bouton (0 = ouvert, 1= fermé) 
11 
12 void setup() {
13   pinMode(ledPin, OUTPUT); //mettre en sortie la broche de la LED
14   pinMode(buttonPin, INPUT); //mettre en entrée la broche du bouton
15 }
16 
17 void loop() {
18   buttonState = digitalRead(buttonPin); //on lit l'état du bouton
19 
20   if (buttonState == HIGH) { //si le boutton est pressé
21     // turn LED on:
22     digitalWrite(ledPin, HIGH);
23   } else {
24     // turn LED off:
25     digitalWrite(ledPin, LOW);
26   }
27 }

Télécharger l'archive contenant les fichiers Eagle du module pour le fabriquer sois-même : Media:3 BUTTON.zip

Horloge DS1307

Il est souvent nécessaire d'avoir la date exacte dans un montage, pour une horloge, pour la notifcation d'évènement ou le déclenchement d'actions. La carte Arduino mesure le temps écoulé depuis sa mise sous tension (en ms). Elle peut ainsi calculer des intervalles relatifs avec précision, mais pas des heures absolues. En cas de coupure de courant le compteur de temps se ré initialise. Le petit module d'horloge temps réel RTC DS1307 comporte une puce d'horloge et une pile bouton qui permet d'actualiser et de sauvegarder l'heure en cas de coupure de courant. La carte Arduino connaît ainsi toujours la date et l'heure exacte.



Schéma de branchement, schéma du module et photo du module :

Code pour faire afficher la date dans la console du port série. Même après une coupure de l'alimentation, l'arduino est toujours à l'heure. Faire attention à bien programmer l'arduino en deux fois, la première pour mettre le module à l'heure exacte et la seconde pour commenter la ligne. Sinon, l'arduino utilisera à chaque redémarrage l'heure de la dernière programmation.

 1 /*
 2 Horloge DS1307
 3 https://www.carnetdumaker.net/articles/utiliser-un-module-horloge-temps-reel-ds1307-avec-une-carte-arduino-genuino/
 4  */
 5 #include <Wire.h> // pour gérer le modules I2C
 6 #include <RTClib.h> // pour gérer le module horloge RTC
 7 
 8 RTC_DS1307 RTC; // pour définir le mot clé RTC
 9 
10 void setup() {
11 Wire.begin();
12 RTC.begin();
13 //RTC.adjust(DateTime(__DATE__, __TIME__)); //pour remettre à l'heure le module RTC (programmer une première fois avec cette ligne, puis la commenter et re-programmer l'arduino sans le débracher)
14 Serial.begin(115200);
15 RTC.writeSqwPinMode(SquareWave1HZ); //{OFF, ON, SquareWave1HZ, SquareWave4kHz, SquareWave8kHz, SquareWave32kHz};
16 }
17 
18 void loop() {
19   DateTime now = RTC.now();
20 
21   Serial.print(F("Date : "));
22   Serial.print(now.day());
23   Serial.print(F("/"));
24   Serial.print(now.month());
25   Serial.print(F("/"));
26   Serial.print(now.year());
27   Serial.print(F("  Heure : "));
28   Serial.print(now.hour());
29   Serial.print(F(":"));
30   Serial.print(now.minute());
31   Serial.print(F(":"));
32   Serial.println(now.second());
33   delay(1000);
34 }

Le contenu du fichier DS1307.h à placer dans le même dossier de projet.

 1 /*
 2 DS1307 
 3 Fichier DS1307.h 
 4  */
 5 #ifndef DS1307_H
 6 #define DS1307_H
 7  
 8 /** Adresse I2C du module RTC DS1307 */
 9 const uint8_t DS1307_ADDRESS = 0x68;
10 
11 /** Adresse du registre de contrôle du module RTC DS1307 */
12 const uint8_t DS1307_CTRL_REGISTER = 0x07;
13 
14 /** Adresse et taille de la NVRAM du module RTC DS1307 */
15 const uint8_t DS1307_NVRAM_BASE = 0x08;
16 const uint8_t DS1307_NVRAM_SIZE = 56;
17 
18 
19 /** Structure contenant les informations de date et heure en provenance ou à destination du module RTC */
20 typedef struct {
21   uint8_t seconds; /**!< Secondes 00 - 59 */
22   uint8_t minutes; /**!< Minutes 00 - 59 */
23   uint8_t hours;  /**!< Heures 00 - 23 (format 24h), 01 - 12 (format 12h) */
24   uint8_t is_pm; /**!< Vaut 1 si l'heure est en format 12h et qu'il est l'aprés midi, sinon 0 */
25   uint8_t day_of_week;  /**!< Jour de la semaine 01 - 07, 1 = lundi, 2 = mardi, etc.  */
26   uint8_t days; /**!< Jours 01 - 31 */
27   uint8_t months;  /**!< Mois 01 - 12 */
28   uint8_t year;  /**!< Année au format yy (exemple : 16 = 2016) */
29 } DateTime_t;
30 
31 
32 /** Mode de fonctionnement pour la broche SQW */
33 typedef enum {
34   SQW_1_HZ = 0, /**!< Signal à 1Hz sur la broche SQW */
35   SQW_4096_HZ,  /**!< Signal à 4096Hz sur la broche SQW */
36   SQW_8192_HZ,  /**!< Signal à 8192Hz sur la broche SQW */
37   SQW_32768_HZ, /**!< Signal à 32768Hz sur la broche SQW */
38   SQW_DC /**!< Broche SQW toujours à LOW ou HIGH */
39 } DS1307_Mode_t;
40 
41 #endif

Télécharger l'archive contenant les fichiers Eagle du module pour le fabriquer sois-même : Media:4 DS1307.zip

Relais

L'intensité maximale des sorties digitales de l'arduino est très faible, (40 mA sur une broche et 200mA pour toutes les E/S à ne pas dépasser) il est courant de recourir à un relias, permettant une forte capacité de commutation, et une isolation entre les circuits. Le relais est un interrupteur télécommandé, qu'il suffit de relier à une broche d'E/S pour que le contact se ferme.

Schéma de branchement, schéma du module et photo du module :

La sortie numérique attaque la base du transistor via la résistance. Au repos, ce dernier est bloqué. Le collecteur du transistor commande le relais dont les contacts sont connectés à un bornier à vis. 


 1 /*
 2 Relais
 3  */
 4 const int buttonPin = 2;     // la broche du bouton poussoir
 5 const int relayPin =  13;      // la broche du relais
 6 int buttonState = 0;         // variable pour la lecture de l'état du bouton
 7 
 8 void setup() {
 9   pinMode(relayPin, OUTPUT); //initialisation de la broche relais en sortie
10   pinMode(buttonPin, INPUT); //initialisation de la broche du bouton en entrée
11 }
12 
13 void loop() {
14   buttonState = digitalRead(buttonPin); //lecture de l'état du bouton
15 
16   if (buttonState == HIGH) { // si le bouton est pressé
17     // turn LED on:
18     digitalWrite(relayPin, HIGH);
19   }
20   else {
21     // turn LED off:
22     digitalWrite(relayPin, LOW);
23   }
24 }

Télécharger l'archive contenant les fichiers Eagle du module pour le fabriquer sois-même :

Media:5 RELAIS.zip

Encodeur rotatif

Sources

Tous les montages disponibles sur cette page sont documentés à partir du site officiel Arduino : Site officiel Arduino

Les schémas Eagle sont réalisés par l'ISEN Engineering et sont libres de droits.

Les modules sont inspirés des montages du magazine électronique pratique