owned this note
owned this note
Published
Linked with GitHub
---
title: Arduino-TGD
tags: arduino, formation
slideOptions:
theme: white
transition: 'fade'
progress: true
hideAddressBar: true
spotlight:
enabled: false
slideNumber: 'c/t'
touch: true
viewDistance: 3
display: 'block'
autoPlay: true
---
<style>
.reveal {
font-size: 22px;
}
.alert-warning {
color: #ffffff;
background-color: #000000;
border-color: #faebcc;
}
.alert-info {
background-color: black;
opacity : 50%;
}
.reveal blockquote {
margin: var(--r-block-margin) 0px; margin-top: 200px;
font-style: normal;
}
</style>
<!-- .slide: data-background="https://i.imgur.com/ju5xPsO.jpg" data-background-color="#191919" -->
<div style="text-align: left">
# Conquérir le monde avec Arduino
#### Bibliothèque Thérèse-Gouin-Décarie
</br>
</br>
</br>
</br>
Lien direct vers la présentation : hackmd.io/@creanum/arduino-TGD
</br>
</br>
</br>
</br>
###### CC-BY 4.0

</div>
---
<div style="text-align: left">
## Plan
<!-- .slide: data-background="https://i.imgur.com/iF1db2L.jpg" data-background-color="#191919" -->
<span>1. Présentation Arduino<!-- .element: class="fragment" data-fragment-index="1" --></span>
<span>2. Découverte du logiciel<!-- .element: class="fragment" data-fragment-index="2" --></span>
<span>3. Les circuits<!-- .element: class="fragment" data-fragment-index="3" --></span>
<span>4. Exercice<!-- .element: class="fragment" data-fragment-index="4" --></span>
</div>
Note:
Avez-vous de expérience avec Arduino?
Avez-vous de l'expérience en code?
---
<div style="text-align: left">
<!-- .slide: data-background="https://i.imgur.com/GY0n8is.jpg" data-background-color="#191919" -->
## 1 - C'est quoi un Arduino?
- Marque déposée!
- Carte électronique matériellement libre
- Logiciel (Arduino IDE)
- Communauté de pratique
> Une carte Arduino est un cerveau qui permet de rendre intelligent
des systèmes électroniques et d'animer des dispositifs mécaniques. [Source](https://www.positron-libre.com/electronique/arduino/arduino.php)
</div>
---
### Le coeur de la carte : le microcontrôleur*

**ATmega328**
*plus petit en vrai
---
<img align="right" height="350" style="float: right" src="https://i.imgur.com/lkeGZy8.jpg">
<div style="text-align: left">
### Ça fait quoi?
* ### Mesure et détection
Capteur de gaz, présence, distance
* ### Contrôle
Drone, robot,
* ### Automatisation
Arrosage de plante, alarme
* ### Autres applications
Instruments de musique électroniques
</div>
---
### Schéma Arduino UNO

---

Capteurs / Microcontrôleur / Actionneurs
---
### Exemple de schéma

[Anatomie d'un microcontrôleur Arduino
](https://creanum.notion.site/Arduino-Anatomie-515db21609d74d29ac1509c20d4e5751)
Capteurs / Microcontrôleur / Actionneurs
---
### Et le Raspberry Pi?

###### [Source](https://www.raspberrypi.org/)
---
### Arduino VS Raspberry Pi
| Arduino Uno | Raspberry Pi |
| ------------------------------- | --------------------------------- |
| Équipé d'un **microcontrôleur** | Équipé d'un **microprocesseur** |
| Pas de OS, Environnement de developpement intégré IDE | Linux (Raspberry Pi OS) |
| Matériel libre | Propriétaire (matériel), OS libre |
| Pas de sortie vidéo/audio* | Deux HDMI 4K et sortie son |
| Pas de Wifi/Bluetooth* | Équipé du Wifi/Bluetooth |
|Moins puissant et moins coutant|Plus puissant et plus coutant|
|Plus simple à utiliser pour débutant| Plus complexe et polyvalent|
*sauf si équipé d'une carte d'interface (*Shield*)
---
<img align="right" height="300" style="float: right" src="https://i.imgur.com/h0rj8nD.jpg">
</br>
</br>
</br>
<div style="text-align: left">
### Alternatives à Arduino Uno
Arduino Nano
NodeMCU (ESP8266)
ESP8266, ESP32
Teensy
Maple mini
Particle photon et Electron
BeagleBone Black
SparkFun Thing Plus. ...
Seeeduino Nano. ...
Launchpad MSP430. ...
Adafruit Feather Huzzah. ...
STM32F3 Discovery. ...
Amica NodeMCU Esp8266. ...
SparkFun RedBoard Artemis. ...
</div>
---

##### Photo : NASA
:::warning
**ESP8266 : 78 fois plus puissant que l'ordinateur de bord du module d'alunissage du programme Apollo.**
##### [Source](https://labs.sogeti.com/homage-hardware-engineers/)
:::
---
## 2 - Arduino IDE
1. Connecter le microcontrôleur
2. Lancer Arduino IDE
:::warning
Télécharger [Arduino IDE](https://www.arduino.cc/en/software) et le [pilote CH340](http://www.wch-ic.com/downloads/CH341SER_ZIP.html) (selon votre OS)
:::
---
### Sélectionner le bon port

---
### Sélectionner le bon modèle

---
### Ouvrir un exemple
**File > Examples > 01.Basics > Blink**
```arduino [1-12|2-4|7-12|1-12]
// configuration initiale
void setup() {
pinMode(13, OUTPUT); // Initialise la pin digital numéro 13 en Output
}
// Instructions exécutées en boucle
void loop() {
digitalWrite(13, HIGH); // Allume la DEL (HIGH est la valeur du voltage)
delay(1000); // Atte ndre une seconde
digitalWrite(13, LOW); // Éteindre la DEL en mettant la valeur du voltage LOW
delay(1000); // Attendre une seconde
}
```
* La fonction void setup()contient des commandes que vous souhaitez exécuter une seule fois au début de votre programme. Elle est utilisée pour initialiser les variables, les broches d'entrée/sortie et les périphériques.C'est l'endroit où vous définissez la configuration de votre programme.
* La fonction void loop() contient des commandes que vous souhaitez continuellement exécuter par l'entremise de la carte Arduino UNO R3. Elle contient le code qui s'exécute en permanence, tant que l'Arduino est alimenté. C'est l'endroit où vous placez le code qui contrôle le fonctionnement de votre programme.
Référence du langage : https://www.arduino.cc/reference/fr/
Note:
Language inspiré du C++
---
<svg width="120pt" height="120pt" version="1.1" viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg">
<g fill="#45dee0">
<path d="m600 174c-235.2 0-426 190.8-426 426s190.8 426 426 426 426-190.8 426-426-190.8-426-426-426zm0 780c-195.6 0-354-158.4-354-354s158.4-354 354-354 354 158.4 354 354-158.4 354-354 354z"/>
<path d="m754.8 454.8-223.2 223.2-86.398-86.398c-14.398-14.398-37.199-14.398-50.398 0-14.398 14.398-14.398 37.199 0 50.398l111.6 111.6c7.1992 7.1992 16.801 10.801 25.199 10.801 8.3984 0 18-3.6016 25.199-10.801l248.4-248.4c14.398-14.398 14.398-37.199 0-50.398-14.398-14.398-36-14.398-50.398 0z"/>
</g>
</svg>
Vérifier le code
<svg width="100pt" height="100pt" version="1.1" viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg">
<path d="m599.52 1109.1c280.99 0 509.59-228.61 509.59-509.59s-228.61-509.59-509.59-509.59-509.59 228.6-509.59 509.59c0 280.99 228.6 509.59 509.59 509.59zm0-953.2c244.61 0 443.6 199.01 443.6 443.6s-199 443.6-443.6 443.6-443.6-199-443.6-443.6c0-244.59 199-443.6 443.6-443.6zm-247.46 506.91h334.88s-81.18 81.191-131.46 131.45c-21.469 21.48-21.469 56.301 0 77.781 3.543 3.543 7.125 7.1172 10.668 10.656 21.469 21.48 56.289 21.48 77.77 0 65.812-65.805 196.42-196.42 241.96-241.96 10.316-10.305 16.113-24.297 16.113-38.879v-4.707c0-14.574-5.7969-28.562-16.113-38.879-45.535-45.535-176.14-176.15-241.96-241.96-21.48-21.48-56.305-21.48-77.77 0-3.543 3.5312-7.125 7.1289-10.668 10.656-21.469 21.48-21.469 56.293 0 77.77 50.285 50.273 131.46 131.46 131.46 131.46h-334.88c-30.379 0-54.992 24.625-54.992 54.992v16.617c0 30.379 24.613 54.992 54.992 54.992z" fill="#45dee0" fill-rule="evenodd"/>
</svg>
Vérifier et téléverser le code
:::warning
:warning: **Problème?**
Changer le port ou la prise USB.
:::
Note:

---
### Variable
Une variable est un emplacement nommé dans la mémoire de la carte Arduino qui peut stocker une valeur de type spécifique
```arduino [1-14|1|5|10|12|1-14]
int maLumiere = 13; // Cette ligne déclare une variable nommée maLumiere de type int (entier)//et lui attribue la valeur 13. On donne un nom au numéro 13
// configuration initiale
void setup() {
pinMode(maLumiere, OUTPUT); // Initialise la pin digital numéro 13 en Output
}
// Instructions exécutées en boucle
void loop() {
digitalWrite(maLumiere, HIGH); // Allume la DEL (HIGH est la valeur du voltage)
delay(1000); // Attendre une seconde
digitalWrite(maLumiere, LOW); // Éteindre la DEL en mettant la valeur du voltage LOW
delay(1000); // Attendre une seconde
}
```
En résumé, la variable maLumiere permet de stocker et de manipuler la valeur de la broche 13 de manière plus lisible et compréhensible dans le code.
* Le nom de la variable est choisi par le programmeur et doit être descriptif.
* Le type de données doit correspondre au type de valeur que la variable va stocker.
* La valeur de la variable peut être modifiée pendant l'exécution du programme.
* La portée de la variable détermine sa visibilité dans le code.
---
## 3 - Notre projet
### Feu de circulation de base
#### Pour cette première activité, à l'aide de trois DEL, vous connecterez un circuit de base pour un feu de circulation. Une fois que le circuit sera construit, vous écrirez un programme et le téléchargerez sur la carte Arduino UNO R3 dans le but de contrôler le feu de circulation.
---
### Composants nécessaires

---
### Diagramme schématique

---
### Construction du circuit

---
### Création de code – Illuminer les LED
```arduino
int ledverte = 3;
int ledjaune = 4;
int ledrouge = 5;
void setup() {
// configurer les broches des LED en sortie
pinMode(ledverte, OUTPUT);
pinMode(ledjaune, OUTPUT);
pinMode(ledrouge, OUTPUT);
}
void loop() {
// Allumer la LED verte sur la broche 3
digitalWrite(ledverte, HIGH);
// Allumer la LED jaune sur la broche 4
digitalWrite(ledjaune, HIGH);
// Allumer la LED rouge sur la broche 5
digitalWrite(ledrouge, HIGH);
}
```
---
### Création de code – Faire clignoter les DEL
```arduino [1|2|3-5|6|8|9|10|11|12|14|15|16|17|19|20|21|22|23|1-23]
int ledverte = 3;
int ledjaune = 4;
int ledrouge = 5;
void setup() {
// configurer les broches des LED en sortie
pinMode(ledverte, OUTPUT);
pinMode(ledjaune, OUTPUT);
pinMode(ledrouge, OUTPUT);
}
void loop() {
// Allumer la LED verte sur la broche 3
digitalWrite(ledverte, HIGH);
delay(1000); // Attendre pendant 1 seconde
digitalWrite(ledverte, LOW); // Éteindre la LED verte
// Allumer la LED jaune sur la broche 4
digitalWrite(ledjaune, HIGH);
delay(1000); // Attendre pendant 1 seconde
digitalWrite(ledjaune, LOW); // Éteindre la LED jaune
// Allumer la LED rouge sur la broche 5
digitalWrite(ledrouge, HIGH);
delay(1000); // Attendre pendant 1 seconde
digitalWrite(ledrouge, LOW); // Éteindre la LED rouge
}
```
---
## Création de code - Programmer un feu de circulation
### Réfléchissez à ce qui doit arriver pour que votre circuit agisse comme un feu de circulation.
* Est-ce que deux lumières ou plus devraient être allumées au même moment?
* Quelle lumière devrait s'allumer en premier, en second, et en troisième?
* Que devraient faire les autres lumières, lorsqu'une lumière s'allume?
* Que devrait-il arriver au moment où la troisième lumière s'éteint?
* Pendant combien de temps la lumière devrait-elle demeurer allumée?
---
### Créer une condition
```arduino [1|2|3-5|6|8|9|11|12-13|14|16|17|18|19|21|22|23|24|25|1-25]
const int ledverte = 3;
const int ledjaune = 4;
const int ledrouge = 5;
void setup() {
// configurer les broches des LED en sortie
pinMode(ledverte, OUTPUT);
pinMode(ledjaune, OUTPUT);
pinMode(ledrouge, OUTPUT);
}
void loop() {
// Allumer la LED verte, éteindre les autres
digitalWrite(ledverte, HIGH);
digitalWrite(ledjaune, LOW);
digitalWrite(ledrouge, LOW);
delay(10000);
// Allumer la LED jaune, éteindre les autres
digitalWrite(ledverte, LOW);
digitalWrite(ledjaune, HIGH);
digitalWrite(ledrouge, LOW);
delay(1000);
// Allumer la LED rouge, éteindre les autres
digitalWrite(ledverte, LOW);
digitalWrite(ledjaune, LOW);
digitalWrite(ledrouge, HIGH);
delay(10000);
}
```
---
### Optimisez votre code pour retirer les commandes innutiles
```arduino [1|2|3-5|6|8|9|11|12-13|14|16|17|18|19|21|22|23|24|25|1-25]
const int ledverte = 3;
const int ledjaune = 4;
const int ledrouge = 5;
void setup() {
// configurer les broches des LED en sortie
pinMode(ledverte, OUTPUT);
pinMode(ledjaune, OUTPUT);
pinMode(ledrouge, OUTPUT);
}
void loop() {
const int delaiVerte = 10000;
const int delaiJaune = 1000;
const int delaiRouge = 10000;
// Allumer la LED verte, éteindre les autres
digitalWrite(ledverte, HIGH);
delay(delaiVerte);
// Allumer la LED jaune, éteindre les autres
digitalWrite(ledverte, LOW);
digitalWrite(ledjaune, HIGH);
delay(delaiJaune);
// Allumer la LED rouge, éteindre les autres
digitalWrite(ledjaune, LOW);
digitalWrite(ledrouge, HIGH);
delay(delaiRouge);
// Éteindre toutes les LED
digitalWrite(ledrouge, LOW);
}
```
---
## Feu de circulation avec bouton d'appel pour piétons

---
## Construction du circuit

---
## Création de code - Programmer le bouton
### Ajouter des déclarations conditionnelles
* if (condition){} – Forme de base d'une déclaration conditionnelle
* digitalRead() – Fait la lecture d'une valeur numérique provenant du circuit


---
### Création de code – En ajoutant les déclarations conditionnelles
```arduino [1|2-4|5|6|8|9|10-12|13|14-16|17|18-20|21|22|23|24-26|27|28|29|30|31|1-31]
const int ledVerte = 3;
const int ledJaune = 4;
const int ledRouge = 5;
const int bouton = 2;
void allumerLED(int pin, int delai) {
digitalWrite(pin, HIGH);
delay(delai);
digitalWrite(pin, LOW);
}
void eteindreLED(int pin) {
digitalWrite(pin, LOW);
}
void setup() {
pinMode(ledVerte, OUTPUT);
pinMode(ledJaune, OUTPUT);
pinMode(ledRouge, OUTPUT);
pinMode(bouton, INPUT);
}
void loop() {
if (digitalRead(bouton) == LOW) {
// Si le bouton n'est pas enfoncé
allumerLED(ledVerte, 3000);
allumerLED(ledJaune, 500);
allumerLED(ledRouge, 3000);
} else {
// Si le bouton est enfoncé
eteindreLED(ledJaune);
eteindreLED(ledRouge);
allumerLED(ledVerte, 500);
delay(500);
}
}
---
## 4 - Exercice
### Amusez-vous!!!
- Inclure une quatrième DEL blanche
- Faire une condition :
Si le bouton est enfoncé, éteindre tous les DEL et allumer seulement la quatrième DEL et la LED rouge pour 3 secondes.
### Quelques indices
Déclarer la broche 6 (LED blanche) en tant que sortie.
#### Quand le bouton est enfoncé
* allumer la LED blanche sur la broche 6
* allumer la LED rouge sur la broche 5
* éteindre toutes les autres LED sur la broche 3,4
---
### Création de code - Excercise
```arduino [1|2-4|5|6|7|9|10|11|12-14|15|16|17|18|19|20|21-22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|1-37]
const int ledverte = 3;
const int ledjaune = 4;
const int ledrouge = 5;
const int ledblanche = 6; // Nouvelle LED blanche
const int bouton = 2;
void setup() {
pinMode(ledverte, OUTPUT);
pinMode(ledjaune, OUTPUT);
pinMode(ledrouge, OUTPUT);
pinMode(ledblanche, OUTPUT);
pinMode(bouton, INPUT);
}
void loop() {
if (digitalRead(bouton) == LOW) {
// Si le bouton n'est pas enfoncé
allumerLED(ledverte, 3000);
allumerLED(ledjaune, 500);
allumerLED(ledrouge, 3000);
eteindreLED(ledblanche); // Eteindre la LED blanche
}
else {
// Si le bouton est enfoncé
eteindreToutesLED();
allumerLED(ledrouge, 3000);
allumerLED(ledblanche, 3000); // Allume la LED blanche pendant 3 secondes
}
}
// Fonction pour allumer une LED spécifique pendant une durée spécifiée
void allumerLED(int pinLED, int duree) {
digitalWrite(pinLED, HIGH);
delay(duree);
eteindreLED(pinLED);
}
// Fonction pour éteindre une LED spécifique
void eteindreLED(int pinLED) {
digitalWrite(pinLED, LOW);
}
// Fonction pour éteindre toutes les LED
void eteindreToutesLED() {
eteindreLED(ledverte);
eteindreLED(ledjaune);
eteindreLED(ledrouge);
eteindreLED(ledblanche);
}
```
---
[CREANUM.NOTION.SITE](https://CREANUM.NOTION.SITE)
Documentations et projets
<img align="left" height="500" style="float: left" src="https://i.imgur.com/FJdfWT1.png">
<br/>
<br/>
<br/>
#### Prochaine formation en création numérique
* Impression 3D
* Découpe numérique
* Montage vidéo
* Baladodiffusion
* ...
[S'inscrire!](https://bib.umontreal.ca/formations/calendrier?cid=7690&t=g&cal=7690&d=0000-00-00&ct=34766&inc=0)
<br/>
<br/>
<br/>
Questions? Commentaires?
creanum@bib.umontreal.ca
---
<img align="right" height="70" style="float: right" src="https://media.giphy.com/media/CT5Ye7uVJLFtu/giphy.gif">
**Formulaire de rétroaction anonyme**
Temps de remplissage ≈ 1 minute
<iframe width="640px" height="480px" src="https://forms.office.com/r/JMT79tpiAW?embed=true" frameborder="0" marginwidth="0" marginheight="0" style="border: none; max-width:100%; max-height:100vh"> </iframe>