Vous êtes sur la page 1sur 40

Dcouvrez l'lectronique avec le

GUIDE DE L'INVENTEUR SPARKFUN

FR

Quelques mots
A PROPOS DE CE KIT
Lobjectif gnral de ce kit est de s'amuser. Derrire cela, le but est de
vous faire dcouvrir une large gamme de composants lectroniques
travers un certain nombre de petits montages simples raliser. Le
principe est donc de raliser des circuits fonctionnels pour ensuite tre
mme de comprendre leur fonctionnement. Si vous rencontrez des
problmes, avez envie de poser des questions ou avez envie dobtenir plus
dinformations, vous pouvez nous envoyer un mail : help@oomlout.com

A PROPOS DU MATRIEL LIBRE (OPEN HARDWARE)


Tous les projets de Sparkfun et . :oomlout :. sont Libres de droits. Quest-ce que cela veut dire ?
Cela signifie que tout ce qui est inclus dans ce kit, que ce soit ce guide, les modles 3D ou encore le
code sont tlchargeables gratuitement. Et cela va encore plus loin, vous tes libres de les
reproduire et de les modifier puis de les redistribuer vous-mme. Comment est-ce possible ? Cest
relativement simple, Ce kit a t conu sous lgide de la licence Creative Commons (By - Share
Alike). Cela signifie que vous devez citer . :oomlout :. dans vos crations et les partager de la mme
faon. Pourquoi ? Nous avons grandi et jou avec les logiciels libres et nous en aimons le concept.
Nous pensons quil serait merveilleux de pouvoir vivre la mme exprience avec des objets
physiques.
Vous trouverez plus de dtails sur la licence Creative Common CC (By Share Alike) sur
http://ardx.org/CCLI

A PROPOS D' .:OOMLOUT:.


Nous sommes une courageuse petite entreprise axe sur la production de
Dlicieux produits libres (Open Source)
Pour dcouvrir ce que nous faisons
http://www.oomlout.com

A PROPOS DE SPARKFUN
Sparkfun est une jeune et dynamique compagnie qui cherche rendre llectronique
amusante et accessible tous des enfants des coles primaires aux doctorants.
http://www.sparkfun.com/

EN CAS DE PROBLME
Nous essayons de proposer la plus grande qualit possible pour tout ce que nous produisons. Cependant, si
vous rencontrez des consignes ambiges, sil vous manque des pices ou si vous voulez poser des
questions, nous ferons de notre mieux pour vous aider.
help@oomlout.com
(nous aimons avoir des retours sur dventuels problmes, cela nous aide amliorer les futures versions)

MERCI D'AVOIR CHOISI .:OOMLOUT:.


ET SPARKFUN

.: LA SOURCE DE TOUT :.

TBMT
table des matires

Avant de Commencer
{ASEM}

Assembler les Pices

02

{INST}

Installer le Programme

03

{PROG}

Quelques Bases de Programmation

04

{ELEC}

Quelques Bases d'Electronique

06

{CIRC01}

Dbuter - (faire clignoter des LEDs)

08

{CIRC02}

8 LED Fun - (Plusieurs LEDs)

10

{CIRC03}

Tourne Moteur Tourne - (Moteur et Transistor) 12

{CIRC04}

Un Unique Servo - (Servos)

{CIRC05}

8 LEDs de Plus - (Registre Dcalage 74HC595) 16

{CIRC06}

Musique - (Buzzer Piezo)

18

{CIRC07}

Presser des boutons - (Bouton poussoir)

20

{CIRC08}

Rotation - (Potentiomtres)

22

{CIRC09}

Lumire - (Photorsistance)

24

{CIRC10}

Temprature - (Capteur de temprature de prcision TMP36)

26

{CIRC11}

Plus forts courants - (Relais)

28

{CIRC12}

Lumire Colore - (LEDs RGB)

30

{CIRC13}

Mesures de Courbes - (Capteur de Torsion)

32

{CIRC14}

Capture Fantaisie - (Potentiomtre tactile)

34

Les Circuits

14

01

01 ASEM
assembler les
pices

Support d'Arduino

x1

02

.: L'Assemblage :.

Plaque d'essai
x1

.: Pour dcouvrir ce qu'est Arduino allez sur :.


.: http://ardx.org/INTR :.

Arduino
x1

.: Installer l'Environnement de Dveloppement :.

02 INST
installation

Il sagit du programme utilis pour crire le code Arduino. Il peut


sembler un peu intimidant au dbut mais une fois install et que
vous aurez commenc jouer avec, ses secrets se rvleront deux
mme.

(logiciel & matriel)

Etape 1 : Tlcharger le Logiciel


Allez sur
http://arduino.cc/en/Main/Software
Tlchargez le logiciel pour votre systme d'exploitation

Windows XP

Mac OSX

Etape 2 : Dcompresser le Logiciel

Etape 2 : Ouvrir le .dmg

Dcompressez
arduino-00rr-win.zip (rr = numro de Version)
Chemin recommand

Ouvrez (montez)
arduino-00rr-mac.dmg (rr = numro de Version)

c:\Program Files\

Etape 3 : Raccourcis
Ouvrez

Etape 3 : Copier l'application

c:\Program Files\arduino-00rr\(rr = numro de Version)

Click Droit
Arduino.exe(Envoyez vers => Bureau (crer un raccourcis))

Dplacez
L'application "Arduino" dans
le dossier "Applications

Etape 4 : Brancher l'Arduino


Branchez votre Arduino
en utilisant le cble USB fourni, branchez votre
Arduino un port USB libre.

Attendez l'ouverture d'une fentre

Etape 4 : Installer les drivers


.:Uniquement pour les Arduino Duemilanove:.

Etape 5 : Ajouter un nouveau matriel


Sautez la recherche sur internet
(cliquez sur suivant quand une fentre vous le demande)

Installez depuis un dossier particulier


cliquez sur Installer partir dune liste ou dun emplacement
spcifi (utilisateurs expriments)

Choisissez lemplacement
Arduino Duemilanove

Allez dans
le dossier "Arduino
Double cliquez et installez
FTDI Drivers for Intel Macs (r_r_rr).pkg
(FTDI Drivers for PPC Macs (r_r_rr).pkg
Redmarrez

c:\Program Files\arduino-00rr\drivers\FTDI USB Drivers\

Arduino Uno
c:\Program Files\arduino-00rr\drivers\

Cest Fini

Vista, Seven
Etape 5 : Ajouter un nouveau matriel
Lancez le gestionnaire de priphriques

Etape 5 : Branchez votre Arduino


Branchez votre Arduino :
Utilisez le cble USB fourni, branchez le dans un port
USB libre.

cest Fini

Dmarrer > Excuter > devmgmt.msc

Slectionnez Arduino
Autres priphriques > Arduino Uno (Uno)

Mettez jour le Pilote


Cliquez sur Mettre jour le Pilote

Slectionnez le Pilote

.: NOTE : :.
.: Vous rencontrez des problmes ? :.
.: Vous voulez plus dinformations ? Vous utilisez Linux ? :.
.:http://ardx.org/LINU :.

cliquez sur Rechercher le Pilote sur mon ordinateur


c:\Program Files\arduino-00rr\drivers\

Cest Fini

03

03 PROG
Bases
de Programmation

.:Quelques Bases de Programmation:.

LA PROGRAMMATION ARDUINO EN BREF


Arduino est programm en langage C. Ceci est un petit cours destination des personnes ayant
dj une petite exprience de la programmation et qui ont besoin dun petit briefing sur la
syntaxe du C et sur lenvironnement de dveloppement (IDE) Arduino.

STRUCTURE
Chaque programme Arduino
(que lon nomme aussi
sketch) requiert 2 fonctions
(aussi appeles procdures).

void setup(){

Tout le code entre les deux


accolades sera excut une
fois au dmarrage du
programme sur votre Arduino.

void loop(){

Cette fonction sexcute aprs la fin


du setup. Aprs une premire
excution, il est r-excut puis
encore et encore jusqu ce que
lalimentation soit coupe.

SYNTAXE
Lun des lments qui peut
paraitre frustrant en C est
son formatage ncessaire
(cela le rend aussi trs
puissant). Si vous vous
souvenez de ce qui suit
vous devriez vous en sortir.

// (commente une seule ligne)


Il est souvent trs utile dcrire
des notes pour soi-mme au fur
et mesure de llaboration de
votre code. Pour ce faire
inscrivez deux slashs et tout ce
que vous inscrirez aprs sera
ignor par votre programme.

{ } (accolades)
On les utilise pour dfinir o
commence et o se termine un bloc
de code (utilis dans les fonctions
aussi bien que dans les boucles).

/* */(commente plusieurs lignes)


Si vous avez beaucoup crire,
vous pouvez commenter
plusieurs lignes. Tout ce qui se
trouve entre ces deux symboles
sera ignor par le programme.

; (point-virgule)
Chaque ligne doit se terminer
par un point-virgule (loubli
dun point-virgule est souvent
la raison dun refus du
programme de compiler).

VARIABLES
Un programme nest rien de plus
que des instructions qui
manipulent des nombres de
faon intelligente. Les variables
sont utilises pour stocker les
valeurs.

int (entier)
Le type le plus utilis, il contient
un nombre sur deux octets (16
bits). il na pas de virgule et
stocke des valeurs comprises
entre -32 768 et 32 767.

boolean (boolen)

float (flottant)

Variables qui prennent simplement


les valeurs Vrai ou Faux (True et
False). Trs utiles, car
elles ne prennent
que peu de place
(8 bits).

Utiliss pour les variables


flottantes. Ils prennent 4 octets
(32 bits) de RAM et sont
compris entre -3.4028235E+38
et 3.4028235E+38.

04

long (long)
Variables utilises lorsquun entier
nest pas assez grand. Ils prennent 4
octets (32 bits) de RAM et prennent
des valeurs comprises entre -2 147
483 648 et 2 147 483 647.

char (caractre)
Stocke un caractre en utilisant
la table ASCII (exemple A
=65). Utilise un octet (8 bits)
de RAM. Arduino stocke les
chaines en tant que tableau de
char.

.:Pour une description complte du langage :.


.:veuillez aller sur:.
http://ardx.org/PROG

03 PROG
Bases
de Programmation

OPERATEURS MATHMATIQUES
Oprateurs utiliss pour
effectuer des oprations
mathmatiques (ils
fonctionnent simplement
comme en mathmatiques)

(galit) rend quelque chose gal un autre (ex : x = 10 * 2 ( x


est maintenant gal 20))
% (modulo) donne le reste de la division dun nombre par un autre
(ex 12 %10 (donne 2))
+ (addition)
(soustraction)
* (multiplication)
/ (division)

COMPARATEURS
Ces oprateurs sont
utiliss pour les
comparaisons logiques

==
!=
<
>

(gal ) (ex : 12 == 10 est Faux et 12 == 12 est Vrai)


(diffrent de) (ex : 12 != 10 est Vrai et 12 != 12 est Faux)
(inferieur ) (ex : 12 <10 est Faux et 12 < 12 est Faux et 12 < 14 est Vrai)
(suprieur ) (ex : 12 >10 est Vrai et 12>12 est Faux et 12>14 est
Faux)

STRUCTURE DE CONTRLE
Les programmes sont charges
de grer lenchainement des
instructions. Voici les lments
de contrle basiques (vous en
dcouvrirez beaucoup plus sur
Internet).

if(condition){ }
else if( condition ){ }
else { }
Le code entre accolades sera excut
si la condition if (si) est vrai sinon la
condition else if (sinon si) sera teste
et si le rsultat est encore faux le code
else (sinon) sera excut.

for(int i = 0; i <
#rptitions; i++){

Utilis quand vous voulez rpter un


morceau de code un certain nombre
de fois (il est possible de compter
i++ et de dcompter i-- ou encore
dutiliser nimporte quelle variable).

NUMRIQUE
pinMode(patte, mode);

digitalWrite(patte, value);

int digitalRead(patte);

Utilis pour changer le mode dune


patte, patte est le numro de la patte
sur laquelle vous voulez agir (0-19,
les analogique 0-5 correspondent
aux 14-19). Le mode peut tre INPUT
(entre) et OUTPUT (sortie).

Lorsquune patte est mise en


OUTPUT, il est possible de
changer son tat. Ltat peut tre
HIGH (mis +5V) ou LOW (mis
la masse).

Lorsquune patte est mise en INPUT


vous pouvez utiliser cette fonction
qui retourne son tat, HIGH
lorsquelle est mise +5V et LOW
lorsquelle est mise la masse.

ANALOG
LArduino est une carte
numrique mais elle peut
aussi agir dans le domaine
analogique. Voici comment
utiliser des composants qui
ne sont pas numriques.

int analogWrite(patte,
value);
Certaines pattes de lArduino supportent
les PWM (3, 5, 6, 9, 10, 11). Cela
permet de changer ltat de la patte trs
rapidement et ainsi agir comme une
sortie analogique. La valeur peut aller
de 0 (0% de rapport cyclique ~0V) et
255 (100% de rapport cyclique ~5V).

int analogRead(patte);
Quand une patte analogique est
mise en INPUT vous pouvez obtenir
sa tension. Une valeur
comprise entre 0
(pour 0V) et 1023
(pour 5V) est
retourne.

05

04 ELEC
Bases
d'Electronique

.:Quelques Bases d'Electronique:.

L'ELECTRONIQUE EN BREF
Aucune exprience en lectronique nest requise pour samuser avec ce kit. Vous trouverez ici
quelques informations propos de chaque composant, afin de les identifier et peut-tre de
comprendre un peu mieux leur fonctionnement. Si vous vous posez des questions sur le
fonctionnement dun composant ou pourquoi il ne fonctionne pas, Internet est une mine
dinformations et de conseils. Vous pouvez aussi nous contacter via : help@oomlout.com

LES COMPOSANTS EN DTAIL


LED/DEL
(Diode Electro-Luminescente)

Ce qu'il Fait:
Emet de la lumire lorsqu'elle est
traverse par un faible courant (seulement
dans un seul sens)

Identification:
Ressemble une petite ampoule

Diode

Rsistance

Transistor

Ce qu'il Fait:
Lquivalent lectronique une valve sens
unique. Elle autorise le courant passer
dans un sens mais pas dans lautre.
Identification:

lorsque la patte avec la bague est connecte la masse).

Ce qu'il Fait:
Rduit le courant qui peut passer dans le
circuit.
Identification:

Nombre de Pattes:
2
Les Choses Savoir:
- Trs facile de prendre la mauvaise valeur

Un cylindre avec des pattes chaque extrmit.


La valeur est affiche au moyen dun code
couleur (voir la page suivante pour plus de
dtails)

Plus de Dtails:
http://ardx.org/RESI

Ce qu'il Fait:
Utilise un petit courant pour commuter ou
amplifier un courant plus important.
Identification:

Nombre de Pattes:
3 (Base, Collecteur, Emetteur)
Les Choses Savoir:
- Le brancher dans le bon sens (une rsistance

Ce qu'il Fait:
Prend une pulsation et la convertit en une
position angulaire sur son axe de rotation.

Identification:
Une boite en plastique avec 3 fils qui
sortent dun ct et un axe avec des bras
en plastique sur le dessus.

06

Nombre de Pattes:
2
Les Choses Savoir:
- Fonctionne dans un seul sens (le courant passe

Gnralement un cylindre avec des pattes


chaque extrmit (et une bague dcentre indiquant la polarit)

(P2N2222AG dans ce kit et trouver la datasheet sur Internet).

Moteur CC

- Ncessite une rsistance pour limiter le courant.

Plus de Dtails:
http://ardx.org/LED

Plus de Dtails:
http://ardx.org/DIOD

Se trouve dans un grand nombre de types de


boitiers mais vous pouvez y lire la rfrence

Servo Hobby

Nombre de Pattes:
2 (une plus longue connecte au positif)
Les Choses Savoir:
- Ne fonctionne que dans un seul sens.

Ce qu'il Fait:
Tourne lorsqu'un courant le traverse.
Identification:
C'est simple, a ressemble un moteur.
Gnralement c'est un cylindre avec un
axe d'un ct.

(regarder deux fois la valeur avant de lutiliser).

pour limiter le courant est souvent requise sur la base).

Plus de Dtails:
http://ardx.org/TRAN

Nombre de Pattes:
3
Les Choses Savoir:
- Le connecteur nest pas dtromp donc faire
attention le brancher dans le bon sens.

Plus de Dtails:
http://ardx.org/SERV
Nombre de Pattes:
2
Les Choses Savoir:
- S'utilise avec un transistor ou un relay
dimensionn pour le type de moteur utilis.

Plus de Dtails:
http://ardx.org/MOTO

04 ELEC
Bases
d'Electronique

LES COMPOSANTS EN DTAIL (SUITE)


Buzzer Piezo
Ce qu'il Fait:
Une impulsion de courant lui fera mettre un clic.
Une chaine dimpulsions lui fera mettre une
tonalit.

Identification:
Dans ce kit il ressemble un petit fut de
plastique mais parfois il sagit juste dun disque
dor.

Nombre de Pattes:
2
Les Choses Savoir:
- Difficile de mal lutiliser
Plus de Dtails:
http://ardx.org/PIEZ

IC (Circuit Intgr)
Ce qu'il Fait:
Contient toute sorte dlectronique
complique dans un boitier facile utiliser.
Identification:
La rfrence est crite sur le boitier. (Il est
parfois ncessaire davoir beaucoup de
lumire ou une loupe pour la lire).

Bouton poussoir Ce qu'il Fait:


Ferme le circuit lorsqu'il est press
Identification:
Un petit rectangle noir avec des pattes
en dessous et un bouton sur le dessus.

Nombre de Pattes:
2 XXX (dans ce kit il y en a un avec 3(TMP36) et
un avec 16 (74HC595)).

Les Choses Savoir:


- Le placer dans le bon sens

(chercher le repre qui

montre la patte 1).

Plus de Dtails:
http://ardx.org/ICIC

Nombre de Pattes:
4
Les Choses Savoir:
- Ils sont presque carr donc ils peuvent
tre tourns 90 degrs.
Plus de Dtails:
http://ardx.org/BUTT

Potentiomtre
Ce qu'il Fait:
Rsistance variable dpendante de la
position angulaire de son axe.
Identification:
ils peuvent se prsenter sous diffrentes
formes, cherchez le bouton rotatif pour
les identifier.
Photo Resistance
Ce qu'il Fait:
Rsistance variable dpendante de la
lumire ambiante.
Identification:
Gnralement un disque avec une ligne
courbe sur le dessus.

CODE COULEUR DES RSISTANCES


Exemples :
vert-bleu-marron - 560 ohms
rouge-rouge-rouge - 2 200 ohms (2.2k)
marron-noir-orange - 10 000 ohms (10k)

0
1
2
3
4

Noir
Marron
Rouge
Orange
Jaune

5
6
7
8
9

Vert
Bleu
Violet
Gris
Blanc

premier digit
second digit
# de zeros
tolrance

20%- rien
10%- argent
5%- or

Nombre de Pattes:
3
Les Choses Savoir:
- En acheter un a chelle logarithmique
par accident.
Plus de Dtails:
http://ardx.org/POTE
Nombre de Pattes:
2
Les Choses Savoir:
- Souvenez-vous quil faut linclure dans un
pont diviseur pour lutiliser..
Plus de Dtails:
http://ardx.org/PHOT

RACCOURCISSEMENT DES PATTES


Certains composants de ce kit sont fournis avec de longues
pattes. Pour les rendre plus compatibles avec une
breadboard, quelques adaptations sont ncessaires.
LEDs :
Coupez les pattes de faon ce que la plus longue fasse
~10mm et la plus courte ~7mm,
Rsistances :
Pliez les pattes de faon ce quelles soient 90 degrs de la
partie cylindrique. Ensuite coupez les pattes pour avoir
~6mm.
Autres Composants :
Dautres composants peuvent
ncessiter un raccourcissement.
Faites-le de faon rflchie.

07

CIRC-01

.:Dbuter:.
.:(Faire clignoter des LEDs):.

CE QUE NOUS ALLONS FAIRE:


Les LEDs (diode lectroluminescente) sont utilises dans toutes sortes de
choses cools, cest pourquoi nous les avons incluses dans ce kit. Nous
allons commencer par quelque chose de trs simple, en allumant et
teignant lune delle, plusieurs reprises, produire un agrable effet de
clignotement. Pour commencer, runissez le matriel list ci-dessous, placez la
feuille de connexions sur votre breadboard et insrez tous les composants. Une fois le circuit assembl, vous
devrez transfrer le programme. Pour ce faire, branchez lArduino votre port USB. Slectionnez ensuite le
port de communication appropri dans Tools > Serial Port > (le port com de votre Arduino). Ensuite
transfrez le programme en faisant File > Upload to I/O Board (ctrl+U). Finalement, contemplez votre
uvre et les possibilits quoffre le contrle de la lumire.
Si vous rencontrez des problmes pour transfrer le programme, un guide complet de rsolution de problme peut-tre
trouv ici : http://ardx.org/TRBL

LE CIRCUIT:
Composants :
CIRC-01
Feuille de Connexions

x1
Rsistance 330 Ohms
Orange-Orange-Marron
x1

Schma
Arduino
patte 13

patte longue
+

LED
(diode lectroluminescente)

Rsistance (330ohms)
(Orange-Orange-Marron)

gnd
(masse) (-)

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS01S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE01

08

Connecteur 2 pattes

x4

LED Jaune 5mm


x1

Fil

CODE

CIRC-01

(Il n'est pas ncessaire de taper quoi que ce soit)

File > Examples > 1.Basic > Blink


(exemple du site arduino.cc, allez voir pour trouver d'autres ides)
/* Blink
* Allume une LED pendant une seconde puis lteint pendant une seconde,
* de faon rpte.
* Cr le 1er juin 2005 par David Cuartielles
* http://arduino.cc/en/Tutorial/Blink
* daprs H. Barragan
*/
int ledPin = 13;

//LED connecte sur la patte numrique 13

//La fonction setup() sexcute une fois, lorsque le programme se lance


void setup()
{
//initialise la patte numrique en tant que sortie :
pinMode(ledPin, OUTPUT);
}
//La fonction loop() sexcute encore et encore,
// aussi longtemps que lArduino est alimente
void loop()
{
digitalWrite(ledPin,HIGH);
//allume la LED
delay(1000);
//attend une seconde
digitalWrite(ledPin,LOW);
//teint la LED
delay(1000);
//attend une seconde
}

CELA FONCTIONNE PAS ?

(3 choses essayer)

La LED ne s'allume pas ?

Le programme ne se

Une LED ne fonctionne que dans

Cela fonctionne

charge pas

toujours pas ?

un seul sens. Essayez de la

Cela arrive parfois. Le plus

Un circuit qui ne fonctionne pas

tourner de 180 degrs.


(Ne vous inquitez pas brancher

souvent cause de la

ce n'est jamais sympa. Envoyez

une LED l'envers ne cause pas

slection du port COM. Vous

nous un mail, nous vous

pouvez le changer avec :

rpondrons ds que possible.

tools>serial port>

help@oomlout.com

de dommage).

AMLIORER LE MONTAGE
Changer les branchements :
La LED est connecte la patte 13 mais nous pouvons utiliser

Contrler la luminosit :
Comme avec les E/S numriques, lArduino peut contrler certaines

toutes les pattes de lArduino. Pour la changer prenez le fil

pattes en tant que pattes analogiques.(vous trouverez plus de dtails

branch la patte 13 et dplacez le sur la patte de votre choix

ce propos dans les prochains circuits). Pour jouer avec.

(de 0 dj 13)(vous pouvez aussi utiliser les entres


analogiques 0-5, lanalogique 0 est la patte 14)

Changer la LED pour la patte 9 : (changez aussi le fil)


ledPin = 13; -> int ledPin = 9;

Ensuite, dans le code, il faut changer la ligne :


int ledPin = 13; -> int ledPin = nouvellepatte;

analogWrite(ledPin, nouveau nombre);

Ensuite envoyez le code : (ctrl-u)


Changer la vitesse de clignotement :
mcontent avec une seconde allume et une seconde teinte ?
dans le code, changez les lignes :
digitalWrite(ledPin, HIGH);
delay(temps on); //(secondes * 1000)
digitalWrite(ledPin, LOW);
delay(temps off); //(secondes * 1000)

Remplacez le code entre {} de la fonction loop() par celui-ci :


(nouveau nombre) = nimporte quel nombre entre 0 et 255.
0 = teinte, 255 = allume, entre les deux = diffrentes luminosits
Variation de luminosit :
Nous allons utiliser un autre exemple. Pour louvrir allez dans :
File > Examples > 3.Analog > Fading
Ensuite envoyez le code sur la carte et regardez la LED croitre et
dcroitre en luminosit

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC01

09

CIRC-02

.:8 LED Fun:.


.:Plusieurs LEDs:.

CE QUE NOUS ALLONS FAIRE:


Nous avons fait clignoter une LED, maintenant il est temps
d'augmenter les enjeux. Connectons en huit. Nous aurons
aussi l'occasion de pousser un peu les capacits de l'Arduino
en crant diffrentes squences lumineuses. Ce circuit est aussi
un bon point de dpart pour vous exprimenter dans l'criture de vos propres programmes
et ressentir comment l'Arduino marche.
En mme temps que contrller les LEDs, nous aborderons quelques mthodes simples de
programmation pour maintenir vos programmes petits.
Boucles for() - utilises quand vous voulez excuter une partie de code plusieurs fois.
tableaux[] - utiliss pour faciliter la gestion des variables (c'est un groupe de variables).

LE CIRCUIT:
Composants :
CIRC-02
Connecteur 2 pattes
Feuille de Connexions
x4
x1
Rsistance 330 Ohms
Orange-Orange-Marron
x8

Schma
patte 2 patte 3 patte 4 patte 5

LED
rsistance
330ohms

gnd
patte 6 patte 7 patte 8 patte 9

LED
rsistance
330ohm

gnd

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS02S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE02

10

LED Jaune 5mm


x8

Fil

CODE

CIRC-02

(Il n'est pas ncessaire de taper quoi que ce soit)

Tlchargez le code ( http://ardx.org/CODE02 )


(et ensuite copiez le texte dans un nouveau sketch Arduino)
//Variables pour les pattes des LED
int ledPins[] = {2,3,4,5,6,7,8,9};
//Un tableau pour stocker les
//pattes correspondant chaque LED
//Ex : LED 0 est connecte la
patte 2
void setup()
>{
for(int i = 0; i < 8; i++){
//Cette boucle sera rpte 8 fois
pinMode(ledPins[i],OUTPUT);
//Les pattes des LED sont mises en sortie
}
}
void loop()
// sexcute linfini
{
oneAfterAnotherNoLoop();
//allume chaque LED une par
//une puis les teint
//oneAfterAnotherLoop();
//effectue la mme chose que
oneAfterAnotherNoLoop()
//mais avec moins de lignes de code
//oneOnAtATime();
//inAndOut();
}

CELA FONCTIONNE PAS ?

/*
* oneAfterAnotherNoLoop()
allume une LED puis
*attend pour delayTime et ensuite allume la LED
suivante
* ensuite teint chacune des LED
void oneAfterAnotherNoLoop(){
int delayTime = 100;
//le temps de pause (en millisecondes)
...
...
digitalWrite(ledPins[7], HIGH); //Allume la LED 7
//(connecte la patte
9)
delay(delayTime);
//attend delayTime
millisecondes
//Eteint chaque LED
digitalWrite(ledPins[7], LOW); //Eteint la LED 7)
delay(delayTime);
//attend delayTime
millisecondes
...
-----Plus de code dans la version tlchargeable------

(3 choses essayer)

Ne suit pas la squence


dfinie

Certaines LEDs ne
s'allument pas
Il est trs facile de brancher
une LED l'envers. Vrifiez que
les LEDs qui ne fonctionnent
pas sont dans le bon sens.

Avec 8 fils il est facile d'en relier


plusieurs. Vrifiez que la premire
LED est branche sur la sortie 2
de l'Arduino et chacun des fils la
suite.

Recommencer
Il est facile de se tromper dans
le placement des fils. Enlevez
tous les composants et
recommencer est souvent aussi
simple que de chercher le
problme.

AMLIORER LE MONTAGE
Changer pour des boucles :
Dans la function loop() il y a 4 lignes. Les 3
dernires commencent par //. Cela signifie
quelles sont considres comme des
commentaires (elles ne sont pas excutes).
Pour que le programme utilise des boucles
changez le code de la fonction loop en :
//oneAfterAnotherNoLoop();
oneAfterAnotherLoop();
//oneOnAtATime();
//inAndOut();

envoyez le programme et remarquez que rien na


chang. Vous pouvez regarder les 2 fonctions,
toutes deux font la mme chose mais avec des
approches diffrentes (astuce : la seconde utilise

les boucles).
Plus danimation :
Lass de cette animation ? Essayez les autres
exemples danimations. Dcommettez les lignes
correspondantes et envoyez le programme sur votre
carte et dcouvrez les nouvelles animations. (supprimez
les // devant la ligne 3 puis 4)

Tester vos propres animations :


regardez le code et commencez le changer. Le point
important est dallumer les LED avec la fonction
digitalWrite(Numeropatte, HIGH); puis de les eteindre
avec digitalWrite(Numeropatte, LOW); .Faites
attention ce que vos modifications ne perturbent
pas tout.

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC02

11

CIRC-03

.:Tourne Moteur Tourne:.


.:Transistor & Moteur:.

CE QUE NOUS ALLONS FAIRE:


LArduino est plus adapte la gestion de petits composants
comme les LEDs. Cependant lorsque vous voulez grer des
composants plus importants (comme un moteur ou une machine
laver), un transistor est ncessaire. Les transistors sont terriblement
utiles. Ils contrlent une grande quantit de courant partir dune plus
petite. Un transistor a 3 pattes. Pour un transistor NPN, vous connectez la charge au collecteur et
lmetteur la masse. Quand un faible courant passe de la base lmetteur, un courant traverse le
transistor et alimente votre moteur (lorsque vous mettez votre patte dArduino HIGH). Il y a des
milliers de transistors diffrents, permettant de trouver une solution chaque situation. Nous avons
choisi le P2N2222AG qui est un transistor trs commun et dusage gnral. Le facteur le plus
important dans notre cas est sa tension maximale (40V) et son courant maximum (200 mA) qui sont
suffisants pour notre moteur (plus de dtails sont disponibles dans la datasheet :
http://ardx.org/2222).
(La diode 1N4001 est utilise en tant que diode de roue libre. Pour plus de dtails allez sur : http://ardx.org/4001)

LE CIRCUIT:
Composants :
CIRC-03
Feuille de Connexions
x1

Connecteur 2 pattes
x4

Transistor
P2N2222AG (TO92)
x1

Moteur de jouet
x1

Diode
(1N4001)
x1

Rsistance 10k Ohms


Marron-Noir-Orange
x1

Schma
Arduino
patte 9

Fil

Le transistor doit avoir


P2N2222AG dinscrit dessus
(Certains modles peuvent avoir
diffrentes attributions pour les pattes !)

rsistance
(10kohms)
Base
Collecteur

Transistor
P2N2222AG
metteur

Diode

Moteur
gnd
(masse) (-)

+5 volts

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS03S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE03

12

.:NOTE:.Si votre Arduino redmarre, vous devez placer le condensateur optionnel.

CODE

CIRC-03

(Il n'est pas ncessaire de taper quoi que ce soit)

Tlchargez le code ( http://ardx.org/CODE03 )


(et ensuite copiez le texte dans un nouveau sketch Arduino)
int motorPin = 9; //La patte laquelle le moteur
//est connect

millisecondes
}

void setup() //Sexecute une fois


{
pinMode(motorPin, OUTPUT);
}

void motorAcceleration(){
int delayTime = 50; //Temps entre chaque changement
de vitesse
for(int i = 0; i < 256; i++){
//balaye chaque vitesse de 0 255
analogWrite(motorPin, i);
//slectionne la
nouvelle vitesse
delay(delayTime);// Attend pendant delayTime
millisecondes
}
for(int i = 255; i >= 0; i--){
//balaye chaque vitesse de 255 0
analogWrite(motorPin, i);
// slectionne la
nouvelle vitesse
delay(delayTime);// Attend pendant delayTime
millisecondes
}
}

void loop()
//Sexcute linfini
{
motorOnThenOff();
//motorOnThenOffWithSpeed();
//motorAcceleration();
}
/*
* motorOnThenOff() teint le moteur
* (Remarquez que ce code est identique celui
que nous avons utilis pour
*le clignotement dune LED)
*/
void motorOnThenOff(){
int onTime = 2500; //Temps ON
int offTime = 1000; //Temps OFF
digitalWrite(motorPin, HIGH);
//Allume le moteur
delay(onTime); //Attend pendant onTime
millisecondes
analogWrite(motorPin, offSpeed);
//Eteint le moteur
delay(offTime);
// Attend pendant offTime

CELA FONCTIONNE PAS ?

(3 choses essayer)

Le moteur ne tourne pas ?

Toujours pas de

Le moteur ne tourne pas ?


Si vous utilisez votre propre

chance ?

Cela fonctionne
tojours pas ?

Si vous utilisez l'un de vos

transistor, vrifiez avec la

Il arrive que lArduino se

propre moteurs, vrifiez qu'il

datasheet que les pattes sont bien


compatible avec le P2N2222AG
(beaucoup sont inverss).

fonctionne bien en 5V et qu'il


ne demande pas trop de

dconnecte de lordinateur.
Essayez de la dbrancher puis

courant

de la rebrancher.

AMLIORER LE MONTAGE
Contrler la vitesse :
Nous avons jou avec la possibilit offerte par Arduino
de contrler la luminosit dune LED un peu plus tt.
Nous allons utiliser la mme technique pour contrler la
vitesse de notre moteur. LArduino utilise quelque chose
que lon appelle PWM (Pulse Widht Modulation). Cela
permet aux pattes de lArduino de changer dtat trs
rapidement. Plutt que de contrler directement la
tension des pattes, lArduino allume et teint la patte
trs rapidement. A lchelle dun ordinateur il sagit
dune alternance de 0 et 5 V de nombreuses fois par
seconde mais lchelle humaine nous le voyons
comme une tension. Par exemple si la PWM est mise
50% nous voyons la luminosit rduite de 50% parce
que notre il nest pas assez rapide pour voir le
clignotement. Cela fonctionne aussi avec les transistors.
Vous ne me croyez pas ? essayez le.

changez la fonction loop() par :


// motorOnThenOff();
motorOnThenOffWithSpeed();
// motorAcceleration();
Ensuite envoyez le programme. Vous pouvez changer la
vitesse en changeant la variable onSpeed et offSpeed.
Acclrer et dclrer :
Pourquoi se focaliser sur deux vitesses, pourquoi ne pas
acclrer et dclrer ? Pour ce faire changez simplement la
fonction loop()
// motorOnThenOff();
// motorOnThenOffWithSpeed();
motorAcceleration();
Envoyez ensuite le code et voyez votre moteur acclrer
jusquau maximum puis dclrer. Si vous voulez changer la
vitesse dacclration, changez la variable delayTime (plus
elle est grande plus lacclration sera lente).

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC03

13

CIRC-04

.:Un Unique Servo:.


.:Servos:.

CE QUE NOUS ALLONS FAIRE:


Faire tourner un moteur cest sympa mais quand on arrive
sur des projets o le contrle des mouvements est requis ils
nous laissent un peu sur notre faim. La rponse ? Les servos.
Ils sont produits en masse, disponibles trs facilement et
cotent de quelques euros des centaines. A lintrieur il y a un
petit rducteur (pour rendre les mouvements plus puissants) et de llectronique (pour les
rendre plus simples contrler). Un servo standard est positionnable de 0 180 degrs. Le
positionnement est contrl par une pulsation temporise entre 1,25 milliseconde (0 degr)
et 1,75 milliseconde (180 degrs) (1,5 milliseconde pour 90 degrs). Le timing diffre selon
les constructeurs. Si la pulsation est envoye toutes les 25-50 millisecondes le servo
bougera de faon fluide. Lun des atout dArduino, cest davoir une bibliothque qui permet
le contrle de deux servos (connects sur les pattes 9 et 10) avec une seule ligne de code.

LE CIRCUIT:
Composants :
CIRC-04
Feuille de Connexions
x1

Mini Servo
x1

Schma
Arduino
patte 9

Mini Servo

signal
(blanc)
+5v
(rouge)

gnd
(noir)

gnd
(masse) (-)

+5 volts
(5V)

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS04S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE04

14

Connecteur 2 pattes
x4

Connecteur 3 pattes
x1

Fil

CODE

CIRC-04

(Il n'est pas ncessaire de taper quoi que ce soit)

File > Examples > Servo > Sweep


(exemple du site arduino.cc, allez voir pour trouver d'autres ides)

// Sweep
// par BARRAGAN <http://barraganstudio.com>
#include <Servo.h>
Servo myservo; //cre un objet servo pour contrler un servo
int pos = 0;
//variable pour stocker la position
void setup() {
myservo.attach(9);
}

//attache le servo a la patte 9

void loop() {
for(pos = 0; pos < 180; pos += 1) //va de 0 degrs a 180 degrs
{
// avec un pas de 1 degr
myservo.write(pos);
//dit au servo daller la position contenue par
//la variable pos
delay(15);
//attend 15 ms pour que le servo atteigne la position
}
for(pos = 180; pos>=1; pos-=1)
//va de 180 degrs a 0 degrs
{
myservo.write(pos);
// dit au servo daller la position contenue par la
variable pos
delay(15);
//attend 15 ms pour que le servo atteigne la position
}
}

CELA FONCTIONNE PAS ?


Le servo ne change pas
de position?
Mme avec les fils colors, il
est facile de brancher un servo
l envers. Cela pourrait tre le
cas.

(3 choses essayer)

Cela fonctionne
toujours pas ?
Une erreur que nous avons
fait une ou deux fois t
doublier de brancher
lalimentation (fils rouge et
marron) au 5V et la masse.

AMLIORER LE MONTAGE
Contrle par potentiomtre :
Nous navons pas encore expriment lutilisation dentres
mais si vous voulez en savoir plus, il existe un programme
dexemple : File > Servo > Knob. Il utilise un
potentiomtre (CIRC08) pour contrler le servo. Vous pouvez
trouver les instructions sur ce lien : http://ardx.org/KNOB
Controle manuel :
Il est facile de contrler les servo avec la bibliothque Arduino

Le servo fait des -coups


Si le servo dmarre puis sarrte,
et quune LED clignote sur la carte
Arduino, la puissance fournie par
votre alimentation nest pas
suffisante. Lutilisation dune
alimentation externe la place de
lUESB pourrait rsoudre le
problme.

void loop() {
int pulseTime = 2100; //(Le nombre de microsecondes
// attendre(1500 90 degres
// 900 0 degrs 2100 180 degrs)
digitalWrite(servoPin, HIGH);
delayMicroseconds(pulseTime);
digitalWrite(servoPin, LOW);
delay(25);
}

Grande ides :
Les servos peuvent tre utiliss pour faire toutes sortes de choses
amusantes, voici quelques-unes de nos prfres.

fournie parfois il est plus intressant de savoir comment le


faire soi-mme. Essayez. Nous pouvons contrler la pulsation
directement donc vous pouvez utiliser cette mthode pour

Compteur de Noel
http://ardx.org/XMAS

contrler directement les servo sur nimporte laquelle de 20

Bras robotique Open Source (avec un contrleur de servos et une

pattes de lArduino (vous devez optimiser votre code pour

Arduino)
http://ardx.org/RARM

faire cela). ).
int servoPin = 9;

Les servos qui marchent


http://ardx.org/SEWA

void setup(){
pinMode(servoPin,OUTPUT);
}

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC04

15

CIRC-05

.:8 LEDs de Plus:.


.:Registre Dcalage 74HC595:.

CE QUE NOUS ALLONS FAIRE:


Il est temps de samuser avec les puces, ou circuits intgrs (CI) comme
on les appelle. Le botier externe peut tre trs trompeur. Par exemple
regardez la puce de la carte Arduino (un microcontrleur) et celle que nous
allons utiliser dans ce circuit (un registre dcalage) qui lui ressemble
beaucoup mais qui en est trs differente. Le prix de lATMega sur lArduino
cote quelques euros alors que le 74HC595 cote quelques dizaines de centimes. Cest une bonne puce pour
commencer et lorsque vous serez laise avec le composant ainsi que sa datasheet (disponible sur
http://ardx.org/74HC595), le monde des puces vous sera ouvert. Le registre dcalage vous donnera 8 sorties
additionnelles (pour contrler des LEDs par exemple) en utilisant seulement 3 pattes de votre Arduino. Ils peuvent
aussi tre connects ensemble pour vous permettre davoir un nombre de sorties proche de linfini. Pour lutiliser
vous envoyez les donnes et les stockez dans la puce. Pour ce faire vous changez ltat de la patte de donnes
(HIGH et LOW), vous lui donnez une horloge jusqu ce que les 8 bits soient envoys. Ensuite vous envoyez une
impulsion sur la patte de verrouillage (latch) et les 8 bits sont stocks. Cela parait compliqu mais cest
relativement simple.

LE CIRCUIT:
Composants :
CIRC-05

Connecteur 2 pattes

Feuille de Connexions

x1

x4

LED Rouge
x8

Rsistance 330 Ohms


Orange-Orange-Marron
x8

Registre Dcalage
74HC595

x1

Fil

+5 volts

2
74HC595
+5V 0
1
2
donne 3
horloge
4
verrou
5
6
gnd 7

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS05S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE05

16

(masse) (-)

gnd

patte patte patte

LED
rsistance
(330ohms)

Schma

Il y a une encoche en
demi-lune, elle va en haut

CODE

CIRC-05

(Il n'est pas ncessaire de taper quoi que ce soit)

Tlchargez le code ( http://ardx.org/CODE05 )


(et ensuite copiez le texte dans un nouveau sketch Arduino)
//Slection des pattes
//le 74HC595 utilise une liaison
srie//connexion qui utilise 3 pattes
int data = 2;
int clock = 3;
int latch = 4;

digitalWrite(latch, LOW);
//met le verrou (latch) au niveau bas
shiftOut(data, clock, MSBFIRST, value);
//envoie 8 bits au registre dcalage< br>

void setup() //sexcute une fois< br>{


pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT); }

digitalWrite(latch, HIGH);
//met le verrou(latch) au niveau haut pour
dmarrer laffichage des donnees< br>}
----------Plus de Code en Ligne ----------

void loop()
//sexcute linfini< br>{
int delayTime = 100;
//attente de la mise jour des LED<
br> for(int i = 0; i < 256; i++){
updateLEDs(i);
delay(delayTime);
}
}
/*
* updateLEDs() envoie les donnes des
LEDs< br> *en sequence au 74HC595< br> */
void updateLEDs(int value){

CELA FONCTIONNE PAS ?


La LED de l'Arduino
s'teint
Cest arriv une ou deux fois,
cela arrive quand la puce est
branche lenvers. Si vous le
changez rapidement, rien ne
sera abim.

(3 choses essayer)

Cela fonctionne
toujours pas ?
Dsol pour la rptition mais
c'est surement d de
mauvaises connexions

AMLIORER LE MONTAGE

Frustr?
Envoyez-nous un mail, ce
circuit est la fois simple et
complexe en mme temps.
Nous voulons avoir des
informations sur vos problmes
pour en tenir compte dans les
prochaines versions.

regardez le code vous pouvez voir comment nous communiquons avec la

int delayTime = 100; //le nombre de millisecondes


//de dlais
//entre les mises jour LED
for(int i = 0; i < 8; i++){
changeLED(i,ON);
delay(delayTime);
}
for(int i = 0; i < 8; i++){
changeLED(i,OFF);
delay(delayTime);
}
Tlcharger ce code entranera lallumage de la lumire sur lune puis lautre et

puce, bit par bit. (pour plus de dtails http://ardx.org/SPI ).

lextinction de la mme manire. tudiez le code et wikipedia pour voir comment

La manire forte :
Une Arduino permet de simplifier quelque peu les actions complexes. Le

dplacement de donnes est lune dentre elles. Cependant lun des


attraits dArduino est sa capacit rendre les choses faciles ou difficiles
selon vos besoins. Essayons sur un exemple. Dans la boucle de switch, la
ligne :
updateLEDs(i) -> updateLEDsLong(i);
Tlcharge le programme et vous signal que rien na chang. Si vous

Contrle de LEDs individuelles:


Il est temps de commencer controler des LEDs avec une mthode
similaire que la mthode utilise dans CIRC02. Comme ltat des huit LED

a marche, ou envoyez nous un e-mail si vous avez des questions.


Plus danimations :
Maintenant les choses deviennent intressantes. Si vous regardez en arrire le

est stock dans un octet (une valeur 8 bit) pour plus de dtails sur

code du (8 LED Fun) vous verrez que lon change les LEDs en utilisant

comment a marche esssayez http://ardx.org/BINA. Une Arduino est

digitalWrite(led, state), elle est compose des mmes lments que la fonction

parfaitement adapte pour manipuler des bits et il existe une panoplie

changeLED(led, state) que nous avions crit. Vous pouvez utiliser lanimation que

complte doprateurs pour nous aider. Plus de details sur les operations

vous aviez crit pour le CIRC02 en copiant le code dans ce sketch et en


changeant tous les digitalWrite() en changeLED()'s. Puissant ? Trs ! (vous

sur les bits ( http://ardx.org/BITW ).

devrez galement changer quelques autres choses mais en suivant les erreurs du

Notre implmentation.
Remplacez le code loop() avec

compilateur a se fait tout seul).

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC05

17

CIRC-06

.:Musique:.
.:Buzzer Piezo:.

CE QUE NOUS ALLONS FAIRE:


A ce jour, nous avons contrl de la lumire, des
mouvements et des lectrons. Cest parti pour le son.
Cependant le son est un phnomne analogique, comment
faire avec notre Arduino ? Encore une fois, nous allons utiliser
son incroyable rapidit qui lui permet dimiter un fonctionnement analogique. Pour cela
nous allons connecter un buzzer une des pattes numriques de lArduino. Un buzzer
met un son chaque fois quun courant le traverse. Si nous lui envoyons un signal
la bonne frquence (par exemple 440 fois par seconde pour obtenir un LA). Cest parti
pour exprimenter tout a et faire jouer "Twinkle Twinkle Little Star" votre Arduino.

LE CIRCUIT:
Composants :
CIRC-06
Feuille de Connexions

x1

Schma
Arduino
patte 9

lment
Piezo
gnd
(masse) (-)

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS06S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE06

18

Connecteur 2 pattes

x4

lment Piezo
x1

Fil

CODE

CIRC-06

(Il n'est pas ncessaire de taper quoi que ce soit)

Tlchargez le code ( http://ardx.org/CODE06 )


(et ensuite copiez le texte dans un nouveau sketch Arduino)
/*Mlodie
* (cleft) 2005 D. Cuartielles pour K3
*
*Cet exemple utilise un buzzer piezo pour jouer des mlodies.
Il envoie
*un signal carr de la frquence adquate au buzzer,
*gnrant ainsi le ton correspondant.
*
*Le calcul du ton est effectu en suivant cette
*opration mathmatique :
*
*
tempsHaut = priode / 2 = 1/(2 * frquenceTon)< br> *
*ou les diffrents tons sont dcrits dans la table:
*
* note
Frquence priode
tempsHaut
* c
261 Hz
3830
1915
* d
294 Hz
3400
1700
* e
329 Hz
3038
1519
* f
349 Hz
2864
1432
* g
392 Hz
2550
1275
* a
440 Hz
2272
1136
* b
493 Hz
2028
1014
* C
523 Hz
1912
956
*
* http://www.arduino.cc/en/Tutorial/Melody
*/
int speakerPin = 9;
int length = 15; //Le nombre de notes< br>char notes[] =
"ccggaagffeeddc "; //un espace reprsente un silence< br>int
beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration) {
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956
};
//joue le ton correspondant au nom de la note< br> for (int
i = 0; i < 8; i++) {
if (names[i] == note) {
playTone(tones[i], duration);
}
}
}
void setup() {
pinMode(speakerPin, OUTPUT);
}
void loop() {
for (int i = 0; i < length; I++) {
if (notes[i] == ' ') {
delay(beats[i] * tempo); //silence< br>
} else {
playNote(notes[i], beats[i] * tempo);
}
//pause entre les notes< br>
delay(tempo / 2);
}

void playTone(int tone, int duration) {


for (long i = 0; i < duration * 1000L; i += tone * 2) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);

CELA FONCTIONNE PAS ?


Le son ne fonctionne pas
Vu la taille du buzzer, c'est
facile de se tromper de trou
pour les branchements,
vrifiez-les une seconde fois

(3 choses essayer)

Je n'arrive pas rflchir


avec tout ce bruit !
Il suffit de retirer le buzzer
pendant que vous rflchissez,
ensuite chargez le programme
et rebranchez le buzzer.

Marre de Twinkle Twinkle


Little Star?
Le code est crit de manire
ce que vous puissiez aisment
ajouter vos propres musiques,
allez faire un tour sur le code
ci-dessous pour commencer.

AMLIORER LE MONTAGE
Jouer avec la vitesse:
la temps de chaque note est calcul partir de variables, nous
pouvons donc modifier la dure de chaque note ou son timing.
Pour changer la vitesse de la mlodie vous navez besoin de
changer quune ligne.
int tempo = 300; ---> int tempo = (Nouveau N)
Changez le pour un nombre plus grand pour ralentir la mlodie
ou pour un nombre plus petit pour lacclrer.
Modifier les notes :
Si vous pensez que les notes ne sont pas aux bons tons, cela
peut aussi tre corrig. Les notes ont t calcules sur la base
de la formule commente dans le bloc au dbut du programme.
Pour modifier les notes individuellement ajustez les valeurs
dans tones[] jusqu ce quelles soient bonnes. (chaque note
correspond son nom dans names[] (ex : c = 1915)

int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136,


1014, 956 };
Composer vos propres mlodies :
Le programme est configur pour jouer 'Twinkle Twinkle Little Star'
mais la faon dont le programme est fait vous permet de le modifier
simplement. Chaque musique est dfinit en un int et deux tableaux,
lint length dfinit le nombre de notes, le premier tableau notes[]
dfinit chaque note et le second beats[] dfinit le temps pendant
lequel chaque note est joue. Quelques exemples :
Twinkle Twinkle Little Star
int length = 15;
char notes[] = {"ccggaagffeeddc "};
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
1, 1, 2, 4 };
Joyeux Anniversaire (premire ligne)
int length = 13;
char notes[] = {"ccdcfeccdcgf "};
int beats[] = {1,1,1,1,1,2,1,1,1,1,1,2,4};

char names[] = { 'c', 'd', 'e', 'f', 'g', 'a',


'b', 'C' };

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC06

19

CIRC-07

.:Presser des boutons:.


.:Bouton poussoir:.

CE QUE NOUS ALLONS FAIRE:


A lheure actuelle nous nous sommes concentrs uniquement sur
les sorties, il est temps de mettre votre Arduino lcoute. Nous
allons commencer avec un simple bouton poussoir. Connecter le
bouton poussoir est simple. Il y a un composant qui parait inutile, la
rsistance de pull-up. Elle est ajoute car lArduino ne ressent pas les
choses comme nous (bouton press ou non). A la place elle regarde la tension sur la patte et
dtermine si cest HIGH ou LOW (haut ou bas). Le bouton est mis de faon ce que la patte de
lArduino soit LOW quand le bouton est press. Cela veut dire que quand le bouton est au repos la
patte est en lair (ce qui peut poser des problmes occasionnels). Pour permettre lArduino de
lire ltat en tant que HIGH quand le bouton est au repos, nous ajoutons une rsistance de pull-up.
(note : le premier programme dexemple utilise un seul des deux boutons)

LE CIRCUIT:
Composants :
CIRC-07
Feuille de Connexions

x1
Rsistance 10k Ohms
Marron-Noir-Orange
x2

Schma
Arduino
patte 2

Arduino
patte 13

LED

rsistance
(330 ohms)

gnd
(masse) (-)

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS07S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE07

20

patte 3

+5 volts
Rsistance
(pull-up)
(10k ohms)

boutton
poussoir

Connecteur 2 pattes

Boutton poussoir

x4

x2
Rsistance 330 Ohms
Orange-Orange-Marron
x1

Fil
Rouge LED
x1

CODE

CIRC-07

(Il n'est pas ncessaire de taper quoi que ce soit)

File > Examples > 2.Digital > Button

(exemple du site arduino.cc, allez y faire un tour pour trouver d'autres ides)
/* Bouton
* par DojoDave <http://www.0j0.org>
*
*Allume et teint une Diode Electroluminescente (DEL/LED) connecte la patte
*numrique 13, lorsque le bouton poussoir connect la patte 7 est enfonc.
* http://www.arduino.cc/en/Tutorial/Button
*/
int ledPin = 13; //Slectionne la patte pour la LED< br>int inputPin = 2;
//Dtermine la patte dentre (pour un bouton poussoir)
int val = 0;
//variable pour lire ltat de la patte< br>

void setup() {
pinMode(ledPin, OUTPUT);

//dclare la LED en sortie


//pinMode(inputPin, INPUT);
//dclare le bouton en entre

}
void loop(){
val = digitalRead(inputPin);
if (val == HIGH) {
digitalWrite(ledPin, LOW);
} else {
digitalWrite(ledPin, HIGH);
}
}

//lit la valeur dentre


//regarde si lentre est haute
// teint la LED
// allume la LED

CELA FONCTIONNE PAS ?

(3 choses essayer)

La lumire ne

Le fondu de lumire

s'allume pas

ne fonctionne pas

Pas impressionn ?
Pas d'inquitudes, ces circuits

Une erreur que nous faisons

Le bouton poussoir est


carr et donc facile placer

sont super simplifis pour

constament, quand vous

rendre le jeu avec les

changez du simple clignotement

dans le mauvais sens.

au fondu: n'oubliez pas de

Tournez le de 90 degrs et

changer le fil de la LED de la

regardez si a marche.

patte 13 la 9.

composants facile. Mais une


fois assembls, le ciel est la
seule limite.

AMLIORER LE MONTAGE
Bouton On bouton OFF :
Lexemple de base peut tre un peu dcevant (on na pas

Fondus :
Contrlons un signal analogique avec les boutons. Pour cela

vraiment besoin dune Arduino pour faire a). Cest parti

vous allez devoir changer la connexion de la LED de la patte

pour compliquer le montage. Un bouton allumera la LED

13 la patte 9 ainsi que le code suivant.


int ledPin = 13; ----> int ledPin = 9;
Ensuite changez le code de loop().

et un autre lteindra. Changez le code avec :


int ledPin = 13;
int inputPin1 = 3;
int inputPin2 = 2;

//Slectionne la patte pour la LED


// bouton 1
// bouton 2

void setup() {
pinMode(ledPin, OUTPUT);
//plaCela LED en sortie
pinMode(inputPin1, INPUT); //place le bouton 1 en entre
pinMode(inputPin2, INPUT); //place le bouton 2 en entre
}
void loop(){
if (digitalRead(inputPin1) == LOW) {
digitalWrite(ledPin, LOW); //teint la LED
} else if (digitalRead(inputPin2) == LOW) {
digitalWrite(ledPin, HIGH); //allume la LED
}
}

Envoyez le programme la carte et commencez


allumer et teindre la LED.

int value = 0;
void loop(){
if (digitalRead(inputPin1) == LOW) { value--; }
else if (digitalRead(inputPin2) == LOW) { value++; }
value = constrain(value, 0, 255);
analogWrite(ledPin, value);
delay(10);
}

Changer le temps de fondu :


Si vous voulez accelerer ou ralentir le fondue, il ny a quune
ligne de code changer :
delay(10);

----> delay(nouveau delais );

Pour acclrer rduisez le nombre et pour ralentir augmentez


le.

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC07

21

.:Rotation:.

CIRC-08

.:Potentiomtres:.

CE QUE NOUS ALLONS FAIRE:


En plus des pattes numriques, lArduino possde 6 pattes
qui peuvent tre utilises pour des entres analogiques.
Ces entres prennent un voltage (entre 0 et 5V) et le
convertissent en un nombre compris entre 0 (0V) et 1024 (5V)
(rsolution de 10 bits). Un composant trs utile qui utilise ces entres est le potentiomtre
(aussi appel rsistance variable). Quand il est connect avec 5V entres ces pattes
extrieures, la patte centrale ressort des valeurs comprises entre 0 et 5V en fonction de
langle selon lequel son axe est tourn (ex : 2,5V au milieu). Nous pouvons ensuite utiliser
cette valeur comme variable de notre programme.

LE CIRCUIT:
Composants :
CIRC-08
Feuille de Connexions

x1

x4

LED Jaune
x1

Rsistance 330 Ohms


Orange-Orange-Marron
x1

Schma
Arduino

+5 volts

patte 13

Arduino
Potentiomtre

LED

Rsistance

(330ohms)
(Orange-Orange-Marron)

gnd
(masse) (-)

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS08S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE08

22

Connecteur 2 pattes

analogique
patte 0

Potentiomtre
10k ohms
x1

Fil

CODE

CIRC-08

(Il n'est pas ncessaire de taper quoi que ce soit)

File > Examples > 3.Analog > AnalogInput


(exemple du site arduino.cc, allez y faire un tour pour trouver d'autres ides)

/* Entre analogique
* Explication de l'entre analogique en lisant un capteur analogique
sur
* le pin analogique 0 et en allumant une LED connecte au pin digital 13.
* Le temps pendant lequel la LED sera allume ou teinte dpend de la valeu obtenue par
* analogRead().
* Cr David Cuartielles
* Modifi le 16 Juin 2009
* Par Tom Igoe
* http://arduino.cc/en/Tutorial/AnalogInput
*/
int sensorPin = 0;
int ledPin = 13;
int sensorValue = 0;

// slectionne le pin d'entre pour le potentiomtre


// slectionne le pin pour la LED
// variable pour stocker la valeur venant du capteur

void setup() {
pinMode(ledPin, OUTPUT);
}

//dclare ledPin comme une sortie:

void loop() {
sensorValue = analogRead(sensorPin);//
digitalWrite(ledPin, HIGH);
//
delay(sensorValue);
//
digitalWrite(ledPin, LOW);
//
delay(sensorValue);
//
}

CELA FONCTIONNE PAS ?

lit la valeur du capteur:


met ledPin l'tat haut
arrte le programme pendant <sensorValue> millisecondes:
met ledPin l'tat bas:
arrte le programme pendant <sensorValue> millisecondes:

(3 choses essayer)

Fonctionne par

Ne fonctionne pas

intermitence

Vrifiez que vous n'avez pas

On dirait un mauvais

connect par erreur la sortie du

branchement du potentiomtre.

potentiomtre sur le pin digital 2

Gnralement cous pouvez le

au lieu du pin analogique 2. (La

rgler en lenfonant un peu

range de pins en dessous des

plus.

pins d'alimentation)

Toujours l'envers
Vous pouvez essayer de faire
fonctionner le circuit l'envers.
Parfois a fonctionne.

AMLIORER LE MONTAGE
Commutation selon un seuil:
Parfois vous voulez changer la valeur d'une sortie quand
une valeur excde un certain seuil. Pour faire cela avec un
potentiomtre, changez le code de la fonction loop() par.
void loop() {
int threshold = 512;
if(analogRead(sensorPin) > threshold){
digitalWrite(ledPin, HIGH);}
else{ digitalWrite(ledPin, LOW);}
}

La LED s'allume quand la valeur est au dessus de 512


(environ la moiti), vous pouvez ajuster la sensibilit en
changeant la valeur du seuil.
Luminosit:
Contrlons la luminosit de la LED directement avec le
potentiomtre. Tout d'abord, il faut changer le pin auquel
la LED est connect. Dplacez le fil du pin 13 au pin 9 et
changez cette ligne de code.

Puis changez le code dans loop.


void loop() {
int value = analogRead(potPin) / 4;
analogWrite(ledPin, value);
}

Chargez le code et voyez comme la luminosit de la LED varie


en fonction du potentiomtre. (Note: la raison pour laquelle on
divise la valeur par 4 est que la fonction analogRead() retourne
une valeur entre 0 et 1023 (10 bits), et analogWrite() prend une
valeur entre 0 et 255 (8 bits) )
Contrler un servo::
C'est vraiment un bel exemple et il permet d'associer plusieurs
circuits. Cblez le servo comme pour le circuit CIRC-04 et
ouvrez le programme d'exemple Knob (File > Examples >
Servo > Knob ), puis changez une ligne de code.
int potpin = 0; ----> int potpin = 2;
Chargez sur votre Arduino et observez le servo tourner en
fonction du potentiomtre.

int ledPin = 13; ----> int ledPin = 9;

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC08

23

CIRC-09

.:Lumire:.
.:Photorsistance:.

CE QUE NOUS ALLONS FAIRE:


Alors que lobtention de valeur dun potentiomtre peut tre
sympa dans le cas dun circuit contrl par lhomme, que
faire pour un circuit contrl par notre environnement ? On
va utiliser exactement le mme principe mais la place dun
potentiomtre on va utiliser une photorsistance (rsistance base sur la lumire).
LArduino ne peut pas directement mesurer la rsistance (elle mesure la tension) donc on
utilise un pont diviseur de tension (http://ardx.org/VODI). La tension exacte de la patte
de mesure est calculable, mais pour notre montage (on utilise la lumire relative) nous
pouvons tester les valeurs et trouver celles qui marchent. Une faible valeur provient
quand le capteur est trs clair alors quune valeur importante arrive quand le capteur
est dans le noir.

LE CIRCUIT:
Composants :
CIRC-09
Feuille de Connexions

x1
Rsistance 10k Ohms
Marron-Noir-Orange
x1

Schma
Arduino
patte 13

LED

+5 volts
photo
rsistance
Arduino
analogique
patte 0

rsistance

(330ohms)

rsistance

(10k ohms)

gnd
(masse) (-)

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS09S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE09

24

Connecteur 2 pattes

x4

Photo-Rsistance
x1

Rsistance 330 Ohms


Orange-Orange-Marron
x1

Fil

LED Jaune
x1

CODE

CIRC-09

(Il n'est pas ncessaire de taper quoi que ce soit)

Tlchargez le code ( http://ardx.org/CODE09 )


(et ensuite copiez le texte dans un nouveau sketch Arduino)
/*
*Un petit programme qui va changer
*lintensit dune LED en fonction de la lumire
*capte par la photorsistance.
*/

pinMode(ledPin, OUTPUT); //plaCela LED en


//sortie
}
//patte de la photorsistance
/*
int lightPin = 0; //la patte analogique ou
* loop() cette fonction commencera aprs le setup
*se termine et recommence
//la photorsistance est
*/
//connecte
void loop()
//la photorsistance nest
{
//calibre pour aucune unit
int lightLevel = analogRead(lightPin); //lit le
//ce nest donc quun simple capteur
//niveau de
// de valeurs (relatives la lumire).
luminosit
)
lightLevel = map(lightLevel, 0, 900, 0, 255);
//patte de la LED
//ajuste la valeur de 0 900 pour avoir de
int ledPin = 9;
0 255
//La patte laquelle la LED est connecte
lightLevel = constrain(lightLevel, 0, 255);
//nous allons contrler la luminosit donc
//Vrifie que le niveau est entre 0 et 255
//nous utilisons lune des PWM(Pulse
analogWrite(ledPin, lightLevel); //Ecrit la valeur
//Width Modulation)
}
< br>void setup()
{

CELA FONCTIONNE PAS ?

(3 choses essayer)

La LED reste noire

La LED ne rpond pas aux

Cest une erreur que nous

changements de luminosit

continuons faire encore et

Puisque lespacement des pattes

encore, si seulement ils pouvaient


faire une LED qui fonctionne dans
les deux sens. Dbranchez la et

de la photorsistance nest pas

a ne fonctionne
toujours pas ?
Vous devez tre dans une pice o il y
fait trop sombre ou trop lumineux.
Essayez dallumer ou dteindre la

standard, il est facile de les placer

lumire pour voir sil y a des

au mauvais endroit. Vrifiez que

changements. Si vous avez une lampe

les branchements sont bons.

de poche porte de main essayez

faite lui faire un demi-tour.

avec.

AMLIORER LE MONTAGE
Inverser la rponse :
Peut tre voulez-vous un fonctionnement inverse. Ne vous

Servo contrl par la lumire :


Utilisons nos nouvelles connaissances sur les capteurs de lumire

inquitez pas nous pouvons facilement inverser le

pour contrler un servo(et en mme temps commenons dtourner

fonctionnement, changez juste :


analogWrite(ledPin, lightLevel); ---->
analogWrite(ledPin, 255 - lightLevel);
Tlchargez le et regardez le rsultat :

le code Arduino). Branchez un servo sur la patte 9 (comme pour le


08) File > Examples > Servo > Knob. Envoyez le code la carte

Lampe de Nuit :
Plutt que de faire varier la puissance de la LED en fonction de

et regardez si il marche sans modification.


Utiliser toute la plage de dplacement du servo :
Vous avez du remarquer que le servo ne fonctionne que dans une

CIRC-04) Ensuite ouvrez lexemple KNOB (le mme que pour le CIRC-

la luminosit, modifions le projet pour avoir un allumage ou

zone rduite de sa plage de mouvements. Cest d au fait qu'avec le

une extinction de la LED en fonction dun seuil de lumire.

systme de pont diviseur de tension que nous utilisons, la tension sur

Changez le code de loop() par :


void loop(){
int threshold = 300;
if(analogRead(lightPin) > threshold){
digitalWrite(ledPin, HIGH);
}else{
digitalWrite(ledPin, LOW);
}
}

la patte analog 0 n'est pas comprise entre 0 et 5 volts mais entre


deux valeurs plus faibles (ces valeurs peuvent changer en fonction de
votre installation). Pour modifiez cela jouez avec les variables de la
ligne val = map (val, 0,1023, 0, 179); Pour des indices sur comment
faire allez sur : http://arduino.cc/en/Reference/Map .

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC09

25

CIRC-10

.:Temprature:.
.:Capteur de temprature de prcision TMP36:.

CE QUE NOUS ALLONS FAIRE:


Quel nouveau phnomne allons-nous mesurer avec notre
Arduino? La temprature. Pour cela nous allons utiliser un CI
(Circuit Intgr) un peu plus compliqu mais dans un botier
identique nos transistors P2N2222AG. Il a 3 pattes, la masse, le
signal et le +5V, et est simple utiliser. Il sort 10 millivolts par degr
sur la patte de signal (pour permettre de mesurer des tempratures ngatives il y a un offset de
500mV ex 25 C = 750 mV, 0 C = 500mV). Pour convertir ces valeurs en degrs, nous allons
utiliser les capacits mathmatiques de lArduino. Ensuite pour le visualiser nous allons utiliser un
outil assez puissant fourni par le logiciel : la console de debug. Nous allons envoyer les valeurs par
une connexion srie pour les afficher lcran. Allez cest parti.
Une chose encore, ce circuit utilise la console du logiciel Arduino. Pour louvrir envoyez votre
programme la carte et ensuite appuyez sur le bouton qui ressemble un carr avec une antenne.
datasheet du TMP36 :
http://ardx.org/TMP36

LE CIRCUIT:
Composants :
CIRC-10
Feuille de Connexions
x1

Connecteur 2 pattes

x4

TMP36
Capteur de Temprature

x1

Fil

Schma
Arduino
analogique
patte 0

+5 volts

+5v
signal
gnd

TMP36
(capteur de
prcision de
temprature)

gnd
(masse) (-)

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS10S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE10

26

Le circuit doit avoir


TMP36 inscrit
dessus

CODE

CIRC-10

(Il n'est pas ncessaire de taper quoi que ce soit)

Tlchargez le code ( http://ardx.org/CODE10 )


(et ensuite copiez le texte dans un nouveau sketch Arduino)
/*
*
*
*
*
*
*

--------------------------------------------| Code dExemple du Kit dExprience Arduino |


| CIRC-10 .: Temprature :.
|
--------------------------------------------Un programme simple pour afficher la temprature
sur la console du logiciel
Pour plus de dtails sur ce circuit :

{
float temperature =
getVoltage(temperaturePin);
//obtiens la tension de sortie du
//capteur de temperature

//assignement des pattes du TMP36


int temperaturePin = 0;//la patte analogique
//laquelle
//la patte Vout du TMP36 est connecte
//la resolution est de
//10 mV / degr Celsius
//(500 mV doffset) pour obtenir
//des tempratures ngatives
void setup()
{
Serial.begin(9600); //lanCela connexion srie
//avec lordinateur
//pour voir le rsultat ouvrez
//la console srie
//dernier bouton sous la barre
//de menu (il ressemble un
rectangle avec
//une antenne)
}
void loop()

temperature = (temperature - .5) * 100;//conversion de 10mV


//par degre avec 500mV doffset en
//degrs ((tension - 500mV) * 100)
Serial.println(temperature); //affiche le rsultat
delay(1000);
//attend une seconde
}
/*
* getVoltage(int pin) retourne la tension sur la patte
analogique
* dfinie par pin
*/
float getVoltage(int pin){
return (analogRead(pin) * .004882814);//Convertie dune
plage
// de 0 1023
// une plage de 0 5V
//(Chaque pas gal environ 5 mV)
}

//sexcute linfini

CELA FONCTIONNE PAS ?


Rien ne semble se produire
Ce programme ne produit pas

(3 choses essayer)
Ce qui sort est

La valeur de

incomprhensible

temprature ne

Cela arrive parce que la console srie

de signe de fonctionnement.

reoit des valeurs une vitesse

change pas

Pour voir le rsultat vous

diffrente que celle qui est attendue.

Essayez de pincer le capteur

devez ouvrir la console du

Pour rsoudre cela, cliquez sur la liste

pour le chauffer ou alors

droulante ou il est crit ****

logiciel.
(voir les instructions sur la page prcdente)

bauds et changez le pour 9600

d'approcher de la glace pour le

baud

refroidir

AMLIORER LE MONTAGE
Afficher la tension :
Cest une faon simple de modifier juste une ligne de code.
Notre capteur donne 10mV par degr donc pour avoir la
tension, nous affichons juste le rsultat de getVoltage().

Serial.println(temperature);
---->
Serial.print(temperature);
Serial.println(" degrs celsius");
le changement sur la premire ligne permet de rafficher sur la
mme ligne. Ensuite nous ajoutons le texte informatif et une nouvelle

supprimez la ligne temperature = (temperature - .5) * 100;


Afficher des degrs Fahrenheit :
Il sagit encore dune modification simple qui ne ncessite que
des maths. Pour convertir les degrs C degrs F on utilise la
formule :
(F=(C*1.8)+32)
ajoutez la ligne :
temperature =
(((temperature - .5) * 100)*1.8) + 32;
avant Serial.println(temperature) ;

ligne.
Changer la vitesse du port srie :
Si jamais vous souhaitez envoyer les donnes plus rapidement, voici
comment faire. Actuellement nous envoyons les donnes 9600 baud
mais des vitesses plus importantes sont possibles. Pour changer la
vitesse modifiez la ligne :
Serial.begin(9600); ----> Serial.begin(115200);
Envoyez le projet la carte et ouvrez la console, ensuite changez la
vitesse de 9600 baud 115200 baud dans le menu droulant. Vous
transmettez maintenant les donnes 12 fois plus vite.

Un affichage plus complet :


Ajoutons des informations dans le message envoy par le port
srie. Pour cela retournez au code initial et changez :

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC10

27

CIRC-11

.:Plus forts Courants:.

.:Relais:.

CE QUE NOUS ALLONS FAIRE:


Ce nouveau circuit est une sorte de test. Nous allons combiner
ce que nous avons appris propos de lutilisation des
transistors dans le CIRC-03 pour contrler un relay. Un relay est
un interrupteur mcanique contrl par impulsion lectrique. A
lintrieur du botier plastique, il y a un lectro-aimant, qui, quand il est aliment, provoque le
basculement de linterrupteur (souvent avec un claquement satisfaisant). Vous pouvez acheter
des relays de un quart de la taille de celui du kit jusqu la taille dun rfrigrateur, chacun
capable de laisser passer une certaine quantit de courant. Ils sont trs amusants car il y a
quelque chose de physique lintrieur. Les relays permetient de rver de quelque chose et
ensuite de le contrler avec votre Arduino.( la diode 1N4001 agit en tant que diode de roue
libre, pour plus de dtails visitez : http://ardx.org/4001)

LE CIRCUIT:
Composants :
CIRC-11
Feuille de Connexions
x1

Diode
(1N4001)
x1

Rsistance 10k Ohms


Marron-Noir-Orange
x1

Rsistance 330 Ohms


Orange-Orange-Marron
x2

Transistor
P2N2222AG (TO92)
x1
LED Jaune
x1

Relai
(SPDT)
x1
LED Rouge
x1

Connecteur 2 pattes
x4

Schma
Arduino
patte 2
Rsistance
(10kohm)
Transistor
Base P2N2222AG
Collecteur

metteur

coil

com

Diode

NC

NO

(roue libre)

+5 volts
gnd
(masse) (-)

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS11S
.:Voir:.
Vido de Montage
http://ardx.org/VIDE11

28

le transistor aura P2N2222AG


imprim sur le
(quelques variations auront
l'affectation des broches inverses)

CODE

CIRC-11

(Il n'est pas ncessaire de taper quoi que ce soit)

File > Examples > 1.Basic > Blink


(exemple du site arduino.cc, allez voir pour trouver d'autres ides)

/*
* Clignotement
*
* Lexemple Arduino basique. Allumer une LED pendant une seconde,
* ensuitre lteindre pendant une seconde, etc... On utilise la patte 13 car,
* selon votre modle dArduino, il y a dj une LED
* ou une rsistance soude qui permet de navoir besoin que dune LED.
*
* http://www.arduino.cc/en/Tutorial/Blink
*/
int ledPin = 2;

// ***********

CHANGER POUR LA PATTE 2 ************

void setup()
{
pinMode(ledPin, OUTPUT);
}

// sxcute une fois, quand le projet commence

void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}

// sxcute continuellement

// dfinie la patte numrique comme une sortie

//
//
//
//

CELA FONCTIONNE PAS ?

allume
attend
teint
attend

la LED
pendant une seconde
la LED
pendant une seconde

(3 choses essayer)

a ne fonctionne

Il ne se passe rien

Pas de click audible

toujours pas

L'exemple de code utilise le

Le transistor ou la partie

Le relay fourni est conu pour tre

relay sur la patte 13 alors que

puissance de votre circuit ne

soud plutt que connect sur

nous l'avons branch sur la 2.

fonctionne pas. Vrifiez le

une breadboard. Il est peut tre

vrifiez que vous avez effectu

cblage du transistor et qu'il est

ncessaire de le maintenir

la modification.

cbl dans le bon sens.

enfonc (et il peut


occasionnellement se
dconnecter)

AMLIORER LE MONTAGE
Observer le pic de retours EMF
Remplacez la diode par une LED. Vous constaterez quelle sallume chaque fois quelle contre la tension quand le relais
steint.
Contrler un moteur
Dans CIRC-03 nous avons contrl un moteur en utilisant un transistor. Cependant si vous voulez contrler un moteur plus
gros, utiliser un relais peut-tre une bonne alternative. Pour ce faire, retirez simplement la LED rouge et connectez le moteur
la place (noubliez pas de retirer la rsistance de 330 Ohms).

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://ardx.org/CIRC11

29

.:Lumire Colore:.

CIRC-12

.:LEDs RGB:.

CE QUE NOUS ALLONS FAIRE:


Vous avez commenc par le CIRC-01 ou vous vous tes
amuss faire clignoter une LED rouge. Mais maintenant
vous avez dpass a, Nest-ce pas ? Vous voulez de
lorange, du violet, de lindigo ! Heureusement il y a un moyen
simple pour obtenir plusieurs couleurs avec une seule LED. Pour cela, nous utilisons une
LED RGB. Une LED RGB nest pas une simple LED. En fait, il sagit de 3 LEDs dans un petit
boitier : une Rouge, une Verte et une Bleue. Quand vous les allumez ensemble, vous
obtenez diffrentes couleurs. La couleur que vous obtenez est le rsultat de la somme des
intensits individuelles de chaque LED. Nous contrlons lintensit avec les PWM (Pulse
Width Modulation) que nous avons dj utilis pour contrler la luminosit dune LED ou
la vitesse dun moteur.

LE CIRCUIT:
Composants :
CIRC-12
Feuille de Connexions

x1
Rsistance 330 Ohms
Orange-Orange-Marron
x3

patte 11 patte 10 patte 9

Rsistance
(330ohms)

rouge

vert

bleu
patte
longue

ct
plat

gnd
Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS12

30

bleu
vert
commun (gnd)
rouge

Schma
Arduino

Connecteur 2 pattes

x4

LED RGB 5mm


x1

Fil

CODE

CIRC-12

(Il n'est pas ncessaire de taper quoi que ce soit)

Tlchargez le code (http://ardx.org/CODE12S)


(et ensuite copiez le texte dans un nouveau sketch Arduino)
/*Faire dfiler les couleurs sur la LED RGB*/

analogWrite(GREEN_LED_PIN, greenIntensity);
analogWrite(RED_LED_PIN, redIntensity);
delay(DISPLAY_TIME);

// Les pattes de la LED sont connectes sur


les pattes de PWM
const int RED_LED_PIN = 9;
const int GREEN_LED_PIN = 10;
const int BLUE_LED_PIN = 11;

}
// Cycle allant de vert bleu
for (blueIntensity = 0;
blueIntensity <= 255;
blueIntensity+=5) {
greenIntensity = 255-blueIntensity;
analogWrite(BLUE_LED_PIN, blueIntensity);
analogWrite(GREEN_LED_PIN, greenIntensity);
delay(DISPLAY_TIME);
}

// Utilis pour stocker le niveau dintensit


actuel
int redIntensity = 0;
int greenIntensity = 0;
int blueIntensity = 0;
// Temps daffichage de chaque couleur
const int DISPLAY_TIME = 100; // millisecondes

// Cycle allant de bleu rouge


for (redIntensity = 0;
redIntensity <= 255;
redIntensity+=5) {
blueIntensity = 255-redIntensity;
analogWrite(RED_LED_PIN, redIntensity);
analogWrite(BLUE_LED_PIN, blueIntensity);
delay(DISPLAY_TIME);
}

void setup() {
// Pas de setup ncessaire.
}
void loop() {
// Cycle allant de rouge vert
for (greenIntensity = 0;
greenIntensity <= 255;
greenIntensity+=5) {

}
---------- Plus de code en ligne ----------

redIntensity = 255-greenIntensity;

CELA FONCTIONNE PAS ?


La LED ne s'allume pas ou
pas de la bonne couleur
Avec 4 pattes trs proches, la
LED nest pas facile cbler.
Vrifiez que chaque patte est l
o elle devrait tre.

(3 choses essayer)

Vous voyez rouge ?


La LED rouge dans la LED RGB peut
tre plus brillante que les deux
autres. Pour avoir des couleurs plus
quilibres, utilisez une rsistance
plus importante. Ou modifiez le
code :
analogWrite(RED_LED_PIN,
redIntensity);
par
analogWrite(RED_LED_PIN,
redIntensity/3);

Vous en attendez plus ?


Si vous cherchez en faire
plus pourquoi ne pas aller voir
tous les montages et produits
disponibles sur :
http://www.SparkFun.com

AMLIORER LE MONTAGE
Utiliser les code couleur HTML
Si vous tes familis avec la cration de pages web,

Une plus grande diffusion


Lun des dsavantages dutiliser une LED RGB fabrique

vous devriez prfrer le code hexadcimal comme

partir de trois LED spares pour gnrer notre couleur

lorsque vous utilisez HTML ou CSS. Un triplet

est quil est parfois possible de voir la couleur de chaque

hexadcimal dcrit une couleur en utilisant une srie

LED. Lune des manires de contourner ceci est de

de lettres et de nombres comme `#FF0000` pour

trouver une faon de rendre la lumire plus diffuse (ou

rouge `#800080` pour violet. Vous pouvez en

disperse) afin de mieux mlanger les couleurs. La LED

apprendre plus sur comment a marche sur

fournie avec votre kit diffuse mieux que les transparentes

Wikipedia (http://ardx.org/HEXCOL) et trouver une

pour augmenter lefficacit de ce mlange des couleurs.

liste de couleurs et leur triplet hexadcimal associ,

Si la lumire nest toujours pas assez diffuse, vous

ainsi, vous naurez pas le faire vous-mme.

pouvez essayer de placer la LED derrire du papier ou de

Tlchargez le code:
http://ardx.org/RGBMB

encore dans une boule de polystyrne.

lacrylique ; ou lintrieur dune balle de pingpong ou

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://sparkfun.com/RGB

31

.:Mesures de Courbes:.

CIRC-13

.:Capteur de Torsion:.

CE QUE NOUS ALLONS FAIRE:


Dans la vie, il est important dtre flexible. Mais que
pouvez-vous faire pour mesurer quel point un objet est
flexible ? Vous utilisez un capteur de torsion. Un capteur de
torsion utilise du carbone sur une bande de plastique pour
agir comme une rsistance variable ou potentiomtre (CIRC-08) mais au lieu de
changer la rsistance en tournant un bouton vous la changez en tordant le composant.
Nous utilisons encore une fois un pont diviseur de tension (CIRC-08 & 09) pour mesurer
la variation de rsistance. Le capteur se tord dans un sens et plus il est tordu plus la
rsistance est importante. Il a une plage de valeur de 10 k ohms 35 k ohms. Dans ce
circuit nous allons utiliser le niveau de torsion pour contrler la position dun servo.

LE CIRCUIT:
Composants :
CIRC-13

Connecteur 2 pattes

Feuille de Connexions

x4

x1

Connecteur 3 pattes

Mini Servo
x1

x1

Schma
+5 volts
patte 9

Mini Servo

signal
(blanc)
+5v
gnd
(rouge)
(noir)

capteur
de torsion
analogique
patte 0

rsistance
(10k ohms)

gnd
(masse) (-)

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS13S

32

Capteur de torsion
x1
Rsistanc 10k Ohms
Marron-Noir-Orange
x1

Fil

CODE

CIRC-13

(Il n'est pas ncessaire de taper quoi que ce soit)

Tlchargez le code (http://ardx.org/CODE13S)


(et ensuite copiez le texte dans un nouveau sketch Arduino)
// Bas sur
// File > Examples > Servo > Knob
//Controler la position dun servo avec un
// potentiomtre (rsistance variable)
// par Michal Rinott //
<http://people.interaction-ivrea.it/m.rinott>
#include <Servo.h>
Servo myservo;

//cre un objet servo pour


//contrler un servo

int potpin = 0;
pour
int val;

{
val = analogRead(potpin);//lit la valeur
//du potentiomtres
//(valeurs entre 0 et 1023)
Serial.println(val);
val = map(val, 50, 300, 0, 179);
//converti la valeur pour pouvoir lutiliser
avec le servo
// (valeurs entre 0 et 180)
myservo.write(val); //positionne le servo
//en fonction de
//la valeur convertie

//patte analogique utilise


delay(15);

//connecter le
//potentiomtre
//variable pour lire la
//valeur de la patte analogique

//attend que le servo


//ait atteint sa position

pin
void setup()
{
Serial.begin(9600);
myservo.attach(9);//attache le servo
// la patte 9 object
}
void loop()

CELA FONCTIONNE PAS ?


Le servo ne se dplace pas
Mme avec des fils de couleur
c'est facile de brancher un
servo l'envers. a doit tre
le cas.

(3 choses essayer)

Le servo ne bouge
pas comme prvu
Le capteur est conu pour
fonctionner dans un seul sens.
Essayez de le tordre dans lautre

Le servo ne se dplace
qu'une seule fois
Vous pouvez avoir besoin de
modifier la plage de valeur dans

sens. ( la partie avec les bandes

lappel de la function map()


(plus de dtails dans la section

doit former une courbe

Amliorer le montage)

convexe).

AMLIORER LE MONTAGE
Calibrer la Plage de Valeurs

repos. Ensuite remplacez la valeur origineHaute (300 par

Maintenant que le servo se dplace, il y a des chances

dfaut) par la valeur lorsquil est totalement courb.


Applications

que la plage de valeurs ne soit pas parfaite. Pour


ajuster la plage, nous avons besoin de changer les

Avec les capteurs, le vrai plaisir vient lorsquon les utilise de

valeurs dans la fonction map().

faon amusante et imprvue. Voici quelques-unes de nos

map(value, fromLow, fromHigh,


toLow, toHigh)
Pour plus de dtails sur comment a fonctionne :
http://ardx.org/MAP
Pour calibrer le capteur nous pouvons utiliser la fentre
de debug (comme dans le CIRC-11). Ouvrez la fentre
de debug et remplacez la valeur origineBasse (50 par
dfaut) par la valeur affiche quand le capteur est au

applications prfres.
Le Gant Pierre-Feuille-Ciseaux
Un gant qui vous permet de jouer Pierre-FeuilleCiseaux contre vous-mme.
http://ardx.org/RPS
Tuteur lectronique pour plante
Contrle si votre plante se courbe en direction de la
lumire et le corrige.
http://ardg.org/BRACE

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://sparkfun.com/

33

.:Capture fantaisie:.

CIRC-14

.:Potentiomtre tactile:.

CE QUE NOUS ALLONS FAIRE:


Un potentiomtre tactile (soft pot) est come un
potentiomtre standard come vu dans le CIRC-08 except
le fait quil est trs fin, flexible et quil na pas de bouton
rotatif. Les potentiomtres sont aussi connus comme
rsistances variables . Dans le cas dun potentiomtre tactile, la rsistance est
dtermine par lendroit o une pression est applique. La pression peut tre applique
par un doigt, un stylet ou un morceau de plastique (wiper). En appuyant diffrents
endroits de la bande, la rsistance varie de 100 10k Ohms ce qui permet de
dterminer la position sur la bande. Vous pouvez lutiliser pour suivre un mouvement.
Dans ce circuit nous allons lutiliser pour contrler la couleur dune LED RGB.

LE CIRCUIT:
Composants :
CIRC-14

Connecteur 2 pattes

Feuille de Connexions

x4

x1

Rsistance 330 Ohms


Orange-Orange-Marron
x3

Potentiomtre tactile
x1

Schma
Arduino
patte 11

patte 10 patte 9

+5 volts
Arduino

Rsistance

soft-pot

(330ohms)

rouge

vert

bleu

V+
wiper

gnd
patte
longue

gnd

Internet
.:Tlcharger:.
Feuille de Connexions
http://ardx.org/BBLS14S

34

LED RGB 5mm


x1

analogique
patte 0

Fil

CODE

CIRC-14

(Il n'est pas ncessaire de taper quoi que ce soit)

Tlchargez le code (http://ardx.org/CODE14S)


(et ensuite copiez le texte dans un nouveau sketch Arduino)
// Code dExemple CIRC-14
// Balaye les couleurs dune LED RGB
// entre Rouge Vert et Bleu
// en fonction de la valeur du
// potentiomtre tactile
// pattes de la LED connectes aux pattes
// de PWM
const int RED_LED_PIN = 9;
//patte Rouge de la LED
const int GREEN_LED_PIN = 10;
//patte Verte de la LED
const int BLUE_LED_PIN = 11;
//patte Bleue de la LED
void setup() {
//pas besoin de code ici
}
void loop() {
int sensorValue = analogRead(0);
//lit le potentiomtre tactile
int redValue = constrain(
map(sensorValue, 0, 512, 255,
0),0,255);
//calcule la valeur de rouge (255-0

CELA FONCTIONNE PAS ?

//dans la plage 0-512)


int greenValue = constrain(
map(sensorValue, 0, 512, 0, 255),0,255)constrain(
map(sensorValue, 512, 1023, 0,
255),0,255);
// calcule la valeur de vert (0-255
//sur la plage 0-512 et 255-0 sur la plage
//512-1023)
int blueValue = constrain(
map(sensorValue, 512, 1023, 0,
255),0,255);
//calcule la valeur de bleu 0-255 sur
//la plage 512-1023
//affiche la couleurs voulue
analogWrite(RED_LED_PIN, redValue);
analogWrite(GREEN_LED_PIN, greenValue);
analogWrite(BLUE_LED_PIN, blueValue);
}

(3 choses essayer)

Vous voyez rouge ?

La LED ne s'allume pas ou


affiche des couleurs
incorrectes

La LED rouge dans la LED RGB peut


tre plus brillante que les deux
autres. Pour avoir des couleurs plus
quilibres, utilisez une rsistance
plus importante. Ou modifiez le
code :
analogWrite(RED_LED_PIN,
redIntensity);
par
analogWrite(RED_LED_PIN,
redIntensity/3);

Les pattes des LED sont trs


proches, il est facile de les placer au
mauvais endroit. Essayez en
vrifiant une fois de plus que les
pattes sont l'endroit o elles
devraient tre.

Rsultats bizarres
La cause la plus courante est
le fait que vous appuyez sur le
potentiomtre en plusieurs
points. Cest normal et cela
peut aussi tre utilis pour
obtenir de meilleurs rsultats.

AMLIORER LE MONTAGE
Couleur HSB (Teinte, Saturation & Luminosit)
Notre LED RGB affiche des couleurs en utilisant les codes
couleur RGB. Cependant, ce nest pas toujours la manire la

Faux Boutons
cause de la manire dont le potentiomtre souple fonctionne, il est

plus facile de travailler avec des couleurs (comme le fait

aussi possible de lutiliser pour faire des boutons customiss. Pour

remarquer le code pas facile lire ci-dessus). Un systme bien

cela dfinissez une plage de valeurs correspondant un bouton.

plus intuitif est lHSB.


Dtails complets :

dterminer les valeurs voulues.

Utilisez le fragment de code ci-aprs et la fentre de dbogage pour


http://ardx.org/HSB

Pour passer de RGB HSB, tout ce qui est ncessaire est un


calcul un petit peu compliqu. Pour un exemple de programme,

if(analogRead(0) > minValue &&


analogRead(0) < maxValue){
buttonAction()
}

visitez :

Ensuite, recouvrez le potentiomtre souple avec un

http://ardx.org/CODE14MB
bas sur le code original www.kasperkamperman.com :

dessin de bouton imprim ou dessin

http://ardx.org/KASP
Maintenant, quand vous utilisez le potentiomtre souple, vous
remarquerez un fondu plus propre et plus complet du rouge au
violet.

PLUS, PLUS, PLUS :


Plus de dtails, o acheter des composants, o poser plus de questions :

http://sparkfun.com/

35

NOTE
notes

36

.:Notes:.
.:Espace pour quelques notes:.

.:Notes:.
.:Espace pour quelques notes:.

NOTE
notes

37

Ce travail est licenci sous Creative Commons Attribution-Share Alike 3.0 Unported License
Pour avoir plus d'informations sur cette licence, visitez
http://creativecommons.org/licenses/by-sa/3.0/
Ou par courrier :
Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.