Académique Documents
Professionnel Documents
Culture Documents
JACK FELLERS
Cher lecteur, chère lectrice, pour te remercier de la confiance que tu m’as
témoignée en achetant mon livre, voici un cadeau pour toi, un guide pour
fortifier encore plus tes connaissances en programmation Web !
Scannez le code ou cliquez sur le lien pour l’échanger en moins d’une
minute :
Bonne lecture !
TABLE DES MATIÈRES
Avant-propos
1. Le langage Arduino
2. La philosophie d’Arduino
3. La plate-forme
4. Programmation
5. Notions de théorie
6. Lumière intelligente
7. Maestro de la musique !
8. Thermomètre numérique
9. Graphiques sur LCD
10. Pistolet élastique
11. Un projet plus important
12. Domotique et RFID
13. Domotique extrême
14. Dépannage
Conclusion
AVANT-PROPOS
Depuis que je suis tout-petit, j’ai toujours été fasciné par la découverte du
fonctionnement des objets, et je les démontais fréquemment afin de mieux
les comprendre. Cette passion a grandi au fur et à mesure que je ciblais tout
objet inutilisé dans la maison et que je le démontais en petits morceaux.
Enfin, des amis et des parents ont commencé à m’apporter toutes sortes
d’appareils afin que je puisse les disséquer.
Mes plus gros projets à l’époque étaient un lave-vaisselle et l’ordinateur
d’un ami, qui avait une grande imprimante, des circuits imprimés, des
lecteurs de cartes magnétiques et de plusieurs autres pièces qui se sont
avérées intéressantes et complexes à démonter complètement. Après une
excellente partie de cette analyse, je savais ce qu’étaient les composants
électroniques et plus ou moins ce qu’ils faisaient.
De plus, ma maison était remplie de vieux magazines d’électronique, et
je passais des heures à lire les articles et à observer les schémas de circuits
sans tout comprendre. Toutefois, la lecture répétée des articles, avec le
bénéfice des connaissances acquises en démontant les circuits, a créé un
lent cercle vertueux.
Un grand pas en avant a été franchi lorsque mon père m’a donné un kit
qui aidaient les adolescents de s’initier à l’électronique. Chaque composant
était logé dans un cube en plastique qui s’emboîtait magnétiquement avec
d’autres cubes, établissant ainsi une connexion. En fait, le symbole
électronique était inscrit au sommet.
Avec ce nouvel outil, je pouvais assembler de façon très rapide des
circuits et les tester pour voir ce qui se passait, de sorte que le cycle de
prototypage était de plus en plus court. Après cela, j’ai construit des radios,
des amplificateurs, des circuits qui faisaient des bruits terribles et des sons
agréables, des capteurs de pluie et des robots minuscules.
J’ai longtemps cherché un mot anglais qui résumerait cette manière de
travailler sans plan précis, en partant d’une idée et en aboutissant à un
résultat totalement inattendu. Enfin, j’ai pensé au mot « bricolage » et la
meilleure définition que j’ai pu trouver est celle d’une exposition à
l’Exploratorium de San Francisco : le bricolage, c’est ce qui se passe quand
on essaie quelque chose que l’on ne sait pas faire, sous l’effet du caprice,
de l’imagination et de la curiosité.
En bricolant, il n’y a pas d’instructions, mais il n’y a pas non plus
d’échecs, pas d’excellentes ou de mauvaises manières de faire les choses, il
s’agit de comprendre la façon que les choses fonctionnent et de les
retravailler.
Plus tard, j’ai appris les bases des mathématiques binaires et de la
programmation. C’est là que j’ai compris que dans plusieurs applications,
les ingénieurs ne construisaient plus des circuits à partir de composants de
base, mais mettaient en œuvre une véritable intelligence dans leurs produits
à l’aide de microprocesseurs. Notez que le logiciel remplace plusieurs
heures de conception électronique et permet un cycle de prototypage plus
court.
J’ai alors commencé à économiser, car je voulais acheter un ordinateur
pour apprendre la programmation. Après l’avoir acheté, il est devenu
évident qu’écrire des lignes de code prendrait moins de temps que de
changer des circuits difficiles. Plusieurs années plus tard, j’aime à penser
que cette expérience me permet d’enseigner à des individus qui ne se
souviennent même pas d’avoir suivi des cours de mathématiques et de leur
insuffler le même enthousiasme et les mêmes talents de bricoleur que
j’avais dans ma jeunesse et que j’ai conservés depuis.
1
LE LANGAGE ARDUINO
A rduino est une plateforme de traitement physique open source basée sur
une simple carte d’entrée/sortie (E/S) et un environnement de
développement qui met en œuvre le langage de traitement.
Arduino peut être employé afin de développer des objets interactifs
autonomes ou être connecté à un logiciel sur l’ordinateur (comme Flash,
Processing, VVV ou Max/MSP). Il est important de savoir que les cartes
peuvent être achetées en deux variantes : assemblées à la main ou pré-
assemblées, et l’IDE (Integrated Development Environment) open source
peut être téléchargé gratuitement.
Arduino se différencie des autres plateformes du marché par les
caractéristiques suivantes :
LA PHILOSOPHIE D’ARDUINO
Interaction avec un PC
Après plus de 60 ans, les claviers d’ordinateurs restent la principale
méthode d’interagir avec un ordinateur. Alex Pentland, universitaire en chef
du MIT Media Laboratory, a fait remarquer un jour : « Excusez
l’expression, mais les urinoirs humains sont plus intelligents que les
ordinateurs. Les ordinateurs sont isolés de leur environnement ».
Nous pouvons mettre en œuvre de nouveaux modes d’interaction avec
les logiciels en remplaçant les claviers par des dispositifs capables de
détecter l’environnement. Le démontage d’un clavier d’ordinateur révèle un
dispositif vraiment facile (et bon marché). Le noyau est une petite carte, en
général un circuit vert ou brun avec deux jeux de contacts qui vont à deux
couches de plastique qui maintiennent les connexions entre les diverses
touches. Si vous retirez le circuit et utilisez un câble afin de connecter deux
contacts, vous observerez une lettre apparaître sur l’écran de l’ordinateur.
En fait, il y a un autre souci qui est au cœur de la philosophie de
l’Arduino. De nos jours, les gens jettent de nombreux d’appareils
technologiques : vieilles imprimantes, ordinateurs, machines de bureau
complexes, équipements techniques et même matériel militaire.
Il y a toujours eu un grand marché pour cette technologie excédentaire,
notamment chez les jeunes et/ou les collectionneurs. Il accumule
fréquemment des déchets et vous devez les passer en revue avant de débuter
à construire quelque chose à partir de zéro.
Pensez au nombre de jouets qui sont jetés chaque année. Avec l’afflux
actuel de milliers de jouets high-tech vraiment bon marché en provenance
de Chine, vous pouvez élaborer des idées vraiment rapidement. Tout cela
vous fait prendre conscience que la technologie n’est ni effrayante ni
complexe à utiliser.
Le dernier principe qui sous-tend la philosophie Arduino est la
collaboration entre les utilisateurs. C’est l’un des principes clés de l’univers
Arduino : grâce aux forums, des individus de diverses régions du monde
s’entraident afin d’apprendre à connaître la plateforme. L’équipe Arduino
encourage aussi les gens à collaborer localement en les aidant à créer des
groupes d’utilisateurs dans chaque ville qu’ils visitent.
Un wiki nommé « Playground » a aussi été créé, où les utilisateurs
documentent leurs découvertes. C’est formidable de voir la quantité de
connaissances que ces personnes déversent sur le Web pour que tout le
monde puisse en profiter. Cette culture du partage et de l’entraide est l’une
des plus belles choses du Web, selon moi.
3
LA PLATE-FORME
Matériel informatique
La carte Arduino est une petite carte à microcontrôleur, cela signifie qu’un
petit circuit (la carte) qui détient un ordinateur entier sur une petite puce (le
microcontrôleur). Cet ordinateur est au moins mille fois moins puissant que
le MacBook que j’utilise afin d’écrire ces lignes, mais il est beaucoup
moins cher et vraiment utile afin de construire des appareils intéressants.
Regardez la carte Arduino : vous observerez une puce noire avec 28 «
jambes » : cette puce est l’ATmega328, le cœur de votre carte. L’équipe
Arduino a placé sur cette carte tous les composants nécessaires au bon
fonctionnement de ce microcontrôleur et à sa communication avec votre
ordinateur.
De plus, il existe de nombreuses versions de cette carte ; celle que nous
utiliserons dans ce livre électronique est l’Arduino Uno, qui est la plus
simple à utiliser et la meilleure à apprendre, toutefois, ces instructions
s’appliquent aux versions antérieures de la carte. En observant la carte, tous
ces connecteurs peuvent être un peu déroutants. Voici ci-dessous une
explication de ce que fait chaque élément du tableau :
PROGRAMMATION
LED clignotante
Le sketch pour la LED clignotante est le premier programme que vous
devez exécuter afin de vérifier si votre carte Arduino fonctionne et est
configurée correctement.
C’est aussi en général le premier exercice de programmation que nous
effectuons quand nous apprenons à programmer un microcontrôleur. Une
diode électroluminescente (DEL) est un petit composant électronique qui
ressemble un peu à une ampoule électrique, mais qui est plus efficace et
nécessite des tensions plus faibles afin de fonctionner. Notez que votre carte
Arduino est livrée avec une LED préinstallée, marquée ‘L’. Vous pouvez
aussi ajouter votre propre LED en connectant K qui indique la cathode
(négatif) ou le fil le plus court et A qui affiche l’anode (positif) ou le fil le
plus long.
De plus, une fois que la LED est connectée, vous devez dire à l’Arduino
ce qu’il doit faire. Cela se fait par code, cela signifie que par une liste
d’instructions que nous offrons au microcontrôleur pour qu’il fasse ce que
nous souhaitons qu’il fasse. Sur votre ordinateur, ouvrez le dossier dans
lequel vous avez copié l’IDE Arduino. Double-cliquez sur l’icône Arduino
afin de le démarrer. Sélectionnez « Fichier » > « Nouveau » et il vous sera
demandé de sélectionner un nom pour le dossier du sketch : c’est là que
votre sketch Arduino sera stocké.
Nommez-le Blink_LED et cliquez sur OK. Par la suite, tapez le texte
suivant dans l’éditeur de croquis Arduino (la fenêtre principale de l’IDE
Arduino) :
// LED connectée à la broche 13
const int LED = 13 ;
void setup()
{
// définir la broche numérique comme sortie
pinMode(LED, OUTPUT) ;
}
void loop()
{
// allume la LED
digitalWrite(LED, HIGH) ;
delay(1000) ; // attendre une seconde
// éteint la LED
digitalWrite(LED, LOW) ;
delay(1000) ; // attendre une seconde
}
Maintenant que le code est dans votre IDE, vous devez vérifier qu’il est
correct. Appuyez sur le bouton « Verify » ; si tout est correct, vous
observerez le message « Compilation Complete » apparaître en bas de l’IDE
Arduino. Ce message veut dire que l’IDE Arduino a traduit votre croquis en
un programme exécutable qui peut être exécuté à partir de la carte, un peu
comme un fichier .exe sous Windows ou un fichier .app sur un Mac.
À cette étape, vous pouvez le charger dans la carte : appuyez sur le
bouton Load de la carte I/O. Cela va réinitialiser la carte, la forçant à arrêter
ce qu’elle fait et à écouter les instructions du port USB. L’IDE Arduino
envoie le sketch actuel à la carte, qui le stockera dans sa mémoire et
l’exécutera éventuellement.
Vous observerez certains messages apparaître dans la zone noire au bas
de la fenêtre, et juste au-dessus de cette zone, vous observerez apparaître le
message « Loading Complete » afin de vous informer que le processus s’est
déroulé avec succès. Il y a deux DEL, marquées RX et TX, sur la carte ;
elles clignotent chaque fois qu’un octet est envoyé ou reçu de la carte. Lors
du processus de téléchargement, elles continuent de clignoter ; si vous
n’observez pas les DEL clignoter ou si vous recevez un message d’erreur au
lieu de « Upload complete », il y a un souci de communication entre votre
ordinateur et l’Arduino.
Vérifiez que vous avez choisi le bon port série dans le menu Outils >
Port série. Vérifiez aussi dans le menu Outils > Carte que le bon modèle
d’Arduino a été choisi.
Il est important de savoir qu’une fois que le code est sur votre carte
Arduino, il y restera jusqu’à ce que vous y chargiez un autre sketch. Le
sketch survivra si la carte est réinitialisée ou éteinte, un peu comme les
données du disque dur de votre ordinateur. En assumant que le sketch a été
chargé correctement, vous observerez la DEL « L’ s’allumer durant une
seconde, puis s’éteindre lors d’une seconde. Si vous avez installé une LED
séparée, cette LED clignotera aussi.
Il est important de savoir que ce que vous venez d’écrire et d’exécuter
est un « programme informatique », ou une esquisse, comme nous appelons
les programmes Arduino. L’Arduino, comme mentionné précédemment, est
un petit ordinateur et peut être programmé pour faire ce que vous voulez.
Afin de ce faire, vous utilisez un langage de programmation afin de saisir
un ensemble d’instructions dans l’IDE Arduino, qui le transforme en un
exécutable pour votre carte Arduino.
Analyse du code
Cependant comment fonctionne un sketch ? En premier lieu, l’Arduino
exécute le code de haut en bas, de sorte que la ligne du haut est la première
lue ; par la suite, il se déplace vers le bas, un peu comme la tête de lecture
d’un lecteur vidéo comme QuickTime Player ou Windows Media Player se
déplace de gauche à droite afin de démontrer où vous vous trouvez dans le
film.
Remarquez la présence des crochets, qui sont employés afin de
regrouper les lignes de code. Ils sont particulièrement utiles quand vous
voulez donner un nom à un groupe d’instructions. Si vous êtes à table et que
vous posez à quelqu’un cette question suivante : « Passez-moi le parmesan,
s’il vous plaît », cela déclenche une série d’actions qui sont résumées par la
petite phrase que vous venez de prononcer. Effectivement, comme nous
sommes des êtres humains, tout vient naturellement, mais toutes les petites
actions individuelles requises pour y parvenir doivent être expliquées à
Arduino, car il n’est pas aussi puissant que notre cerveau. Alors, afin de
regrouper une série d’instructions, insérez un {avant le code et un} après
celui-ci.
Vous pouvez constater qu’il y a deux blocs de code qui sont définis de
cette manière ici. Devant chacun d’eux se situe une commande bizarre :
void setup (). Cette ligne donne un nom à un bloc de code ; si vous deviez
écrire une liste d’instructions qui apprennent à l’Arduino comment passer le
parmesan, vous devriez écrire void passParmigiano () au début d’un bloc, et
ce bloc deviendrait une instruction que vous pourriez appeler de n’importe
où dans le code de l’Arduino.
De plus, ces blocs sont nommés fonctions. Si après avoir défini cette
fonction, vous écrivez passParmigiano () n’importe où dans votre code,
l’Arduino exécutera ces instructions et continuera là où il s’est arrêté.
Il est important de savoir qu’Arduino s’attend à ce qu’il y ait deux
fonctions : une nommée setup () et une nommée loop (). La fonction setup
() est l’endroit où vous mettez tout le code que vous souhaitez exécuter une
fois au début de votre programme, et loop () possède le cœur de votre
programme, qui est exécuté encore et encore.
Effectivement, l’Arduino n’est pas un ordinateur comme les autres : il
ne peut pas exécuter plusieurs programmes en même temps et les
programmes ne peuvent pas se fermer. Quand vous allumez la carte, le code
s’exécute ; quand vous souhaitez arrêter, vous l’éteignez.
Vous avez probablement remarqué des symboles bizarres comme // dans
le code. Tout texte qui débute par // est ignoré par Arduino. Ces lignes sont
des commentaires, ce sont des notes que vous laissez dans le programme
pour vous-même, pour que vous puissiez vous souvenir de ce que vous avez
fait quand vous l’avez écrit, ou pour quelqu’un d’autre, pour qu’il puisse
comprendre votre code.
Il est vraiment fréquent d’écrire un morceau de code, de le télécharger
sur le tableau et de se dire « OK, je n’aurai plus jamais à toucher à ce code
! » afin de se rendre compte quelques mois plus tard qu’il faut mettre à jour
le code ou corriger un bogue. À cette étape, vous ouvrez le programme et si
vous n’avez pas inclus de commentaires dans le programme original, vous
vous dites : « Wow, quel gâchis ! Où est-ce que je débute ? » Au fur et à
mesure, vous observerez certaines astuces afin de rendre vos programmes
plus lisibles et plus faciles à maintenir. Au début, vous pourriez considérer
ce genre d’explication comme inutile, un peu comme quand j’étais à l’école
et que je devais étudier la Divine Comédie de Dante. Pour chaque ligne des
poèmes, il y avait une centaine de lignes de commentaires ! Cependant,
l’explication sera beaucoup plus utile ici, quand vous passerez à l’écriture
de vos propres programmes.
Examinons le code ligne par ligne :
const int veut dire que la LED est un entier non modifiable (ce qui veut
dire une constante) dont la valeur est fixée à 13. En fait, c’est comme un
code de recherche et de remplacement automatique ; dans ce cas, il
démontre à l’Arduino d’écrire le nombre 13 toutes les fois que le mot LED
apparaît. Nous employons cette commande afin de spécifier que la LED que
nous souhaitons faire clignoter est connectée à la broche 13 de l’Arduino.
void setup() présente à l’Arduino que le prochain bloc de code sera
nommé setup() et le crochet ouvert affiche l’ouverture du bloc. Ce bloc ne
détient qu’une seule instruction, mais est vraiment intéressant. pinMode
affiche à l’Arduino la façon de configurer une broche particulière. Les
broches numériques peuvent être employées comme INPUT ou OUTPUT.
Dans ce cas, nous avons besoin d’une broche de sortie afin de contrôler
notre LED, nous entrons alors le numéro de la broche et son mode entre
parenthèses. pinMode est une fonction et les mots (ou nombres) spécifiés
entre parenthèses sont des arguments.
Il est important de noter qu’INPUT et OUTPUT sont des constantes
dans le langage Arduino (comme les variables, les constantes se voient
attribuer des valeurs, mais les valeurs constantes sont prédéfinies et ne
changent jamais). Après cette instruction, nous voyons une accolade fermée
qui affiche la fermeture du bloc.
Par la suite, nous trouvons la définition de la fonction loop(), qui
correspond à l’endroit où vous spécifiez le comportement principal de votre
dispositif interactif. En fait, cette méthode sera répétée à l’infini jusqu’à ce
que vous éteigniez le tableau.
De plus, comme spécifié dans le commentaire, digitalWrite() est en
mesure d’allumer (ou d’éteindre) toute broche qui a été configurée comme
OUTPUT. Le premier argument (dans ce cas, LED) illustre quelle broche
doit être activée ou désactivée (souvenez-vous que LED est une valeur
constante se référant à la broche 13, c’est alors cette broche qui est activée).
Le deuxième argument peut activer (HIGH) ou désactiver (LOW) la broche.
Imaginez que chaque broche de sortie est une minuscule prise, comme
celles que vous possédez sur les murs de votre appartement. Les
européennes sont en 230V, les américaines en 110V, et l’Arduino fonctionne
à une tension plus modeste de 5V. La magie ici, c’est quand le logiciel
devient matériel ; effectivement, lorsque vous écrivez digitalWrite(LED,
HIGH), l’Arduino met la broche de sortie à 5V et si vous branchez une
LED, elle s’allume.
Alors, à ce stade du code, une instruction du logiciel provoque un
événement dans le monde physique en contrôlant le flux d’électricité vers la
broche. En allumant et en éteignant la broche à volonté, nous traduisons
maintenant cela en quelque chose de plus visible pour un être humain ; la
LED est notre actionneur.
Arduino a une structure très simple. Par conséquent, si vous souhaitez
que les choses se produisent avec une certaine régularité, dites-lui de ne rien
faire jusqu’à ce qu’il soit temps de passer à la prochaine étape. La fonction
delay() met le processeur en pause et ne fait rien durant le nombre de
millisecondes que vous passez en argument. Les millisecondes sont des
millièmes de seconde ; par conséquent, 1000 millisecondes sont égales à 1
seconde, et la LED reste alors allumée pendant une seconde.
La prochaine instruction donne la chance d’éteindre la LED que nous
avons précédemment allumée. Pourquoi employons-nous les termes HIGH
et LOW ? Il s’agit d’une vieille convention en électronique numérique.
HIGH qui veut dire que la broche est activée et, dans le cas de l’Arduino,
sera réglée sur 5 V, LOW signifie 0 V. Vous êtes aussi en mesure de
remplacer mentalement ces termes par ON et OFF.
Finalement, nous faisons attendre le processeur une seconde de plus,
ensuite la LED s’éteint durant une seconde et les crochets fermés illustrent
la fermeture du verrou sur cette fonction.
Afin de résumer, ce programme fait ceci :
NOTIONS DE THÉORIE
LUMIÈRE INTELLIGENTE
L aidéal
fabrication d’un flash LED était simple, mais je ne crois pas qu’il soit
de faire clignoter votre lampe de bureau lorsque que vous tentiez
de lire un livre, vous devez alors apprendre à le contrôler. Dans notre
exemple précédent, la LED était notre actionneur et notre Arduino la
contrôlait, ce qui manque afin de compléter le tableau est un capteur.
Dans ce cas, nous emploierons la forme la plus facile de capteur
disponible : un bouton. Si vous deviez démonter un bouton, vous
observeriez qu’il s’agit d’un dispositif vraiment facile : deux pièces de
métal maintenues séparées par un ressort et un capuchon en plastique qui,
quand il est pressé, met les deux pièces de métal en contact. Quand les
morceaux de métal sont séparés, il n’y a pas de circulation de courant dans
le bouton (un peu comme quand une vanne d’eau est fermée) ; quand nous
appuyons dessus, nous établissons une connexion.
Afin de surveiller l’état d’un interrupteur, il existe une nouvelle
instruction Arduino que vous allez apprendre : la fonction digitalRead().
Cette fonction vérifie si une tension est appliquée à la broche spécifiée entre
parenthèses et renvoie une valeur de HIGH ou LOW, selon le résultat.
Il est important de noter que les autres instructions que nous avons
employées jusqu’à présent n’ont renvoyé aucune information : elles ont
simplement exécuté ce que nous leur avons demandé. Toutefois ce type de
fonction est un peu limité, car il nous demande à suivre des séquences
d’instructions vraiment prévisibles, sans aucun apport du monde extérieur.
Avec digitalRead(), nous pouvons « poser une question à l’Arduino » et
recevoir une réponse qui peut être stockée en mémoire quelque part et
utilisée afin de prendre des décisions à l’instant ou à une date ultérieure.
Construisons un petit circuit, vous devrez vous procurer certaines pièces
énumérées :
void setup() {
pinMode(LED, OUTPUT) ;
pinMode(BUTTON, INPUT) ;
}
void loop(){
val = digitalRead(BUTTON) ;
// vérifie s'il y a eu une transition
si ((val == HIGH) && (old_val == LOW)){
état = 1 - état ;
}
old_val = val ; // val est maintenant vieux, stockez-le
if (state == 1) {
digitalWrite(LED, HIGH) ;
} else {
digitalWrite(LED, LOW) ;
}
}
Essayez ce code : vous y êtes presque ! Vous avez peut-être remarqué que
cette approche n’est pas tout à fait excellente, en raison d’un autre souci lié
aux interrupteurs mécaniques. Les boutons sont des dispositifs très simples :
deux pièces de métal maintenues à distance par un ressort. Quand nous
appuyons sur le bouton, les deux contacts se rapprochent et l’électricité est
capable de circuler.
Cela semble beau et facile, mais dans la vie réelle, la connexion n’est
pas si parfaite, surtout quand le bouton n’est pas complètement enfoncé et
génère des signaux parasites nommés rebonds. Quand le bouton rebondit,
l’Arduino voit une séquence vraiment rapide de signaux de marche et
d’arrêt. Il existe plusieurs techniques développées pour effectuer le
débouclement, mais dans ce simple morceau de code, j’ai remarqué qu’il est
généralement suffisant d’ajouter un délai de 10 à 50 millisecondes quand le
code détecte une transition.
Voici ci-dessous le code illustré dans sa version finale :
const int LED = 13 ;
const int BUTTON = 7 ;
int val = 0 ;
int old_val = 0 ;
int state = 0 ;
void setup() {
pinMode(LED, OUTPUT) ;
pinMode(BUTTON, INPUT) ;
}
void loop(){
val = digitalRead(BUTTON) ;
si ((val == HIGH) && (old_val == LOW)){
état = 1 - état ;
retard (10) ;
}
old_val = val ;
if (state == 1) {
digitalWrite(LED, HIGH) ;
} else {
digitalWrite(LED, LOW) ;
}
}
7
MAESTRO DE LA MUSIQUE !
void setup()
{
pinMode(kPinSpeaker, OUTPUT) ;
}
void loop()
{
digitalWrite(kPinSpeaker, HIGH) ;
delayMicroseconds(k_timeDelay) ;
digitalWrite(kPinSpeaker, LOW) ;
delayMicroseconds(k_timeDelay) ;
}
Maintenant que nous pouvons jouer une simple note, nous pouvons faire de
la musique. L’Arduino contient 2 fonctions intégrées qui gèrent aussi la
production de sons. La première est tone() qui accepte 2 paramètres
obligatoires (et un troisième optionnel), tone (pin, fréquence, durée) ou
vous pouvez employer tone (pin, fréquence). Les deux reviennent tout de
suite, quelle que soit la durée que vous leur donnez. Il est important de
savoir que si vous n’incluez pas de durée, le son sera joué jusqu’à ce que
vous appeliez à nouveau tone() ou que vous appeliez la fonction noTone().
(Cela peut demander l’utilisation d’une fonction de retard si la lecture d’un
son est l’activité principale). La durée est en millisecondes, la raison pour
laquelle la durée est utile est que vous êtes en mesure de lui offrir quelque
temps afin de jouer et ensuite vous pouvez faire d’autres choses. Dès que la
durée se finit, elle s’arrête. La deuxième fonction est noTone() qui accepte
un seul paramètre : noTone(pin).
En fait, il interrompt le son qui est joué sur cette broche. Conseil :
quand la fonction tone() est en cours d’exécution, la modulation de largeur
d’impulsion (PWM) ne fonctionnera pas sur les broches 3 et 11. Alors, si
vous employez un haut-parleur dans votre sketch, vous pouvez éviter
d’utiliser complètement ces broches comme PWM). Vous êtes en mesure de
connecter un haut-parleur à n’importe laquelle des broches, voici un
exemple à essayer sur votre Arduino : (OK, c’est une simple gamme de C et
peut-être pas une mélodie, mais c’est correct pour notre test) :
#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTES_B4 494
#define NOTE_C5 523
void setup()
{
pinMode(kPinSpeaker, OUTPUT) ;
}
void loop()
{
tone(kPinSpeaker, NOTE_C4, 500) ;
delay(500) ;
tone(kPinSpeaker, NOTE_D4, 500) ;
delay(500) ;
tone(kPinSpeaker, NOTE_E4, 500) ;
delay(500) ;
tone(kPinSpeaker, NOTE_F4, 500) ;
delay(500) ;
tone(kPinSpeaker, NOTE_G4, 500) ;
delay(500) ;
tone(kPinSpeaker, NOTE_A4, 500) ;
delay(500) ;
tone(kPinSpeaker, NOTE_B4, 500) ;
delay(500) ;
tone(kPinSpeaker, NOTE_C5, 500) ;
delay(500) ;
noTone(kPinSpeaker) ;
retard (2000) ;
}
La seule chose que vous n’avez pas encore observée est l’instruction
#define. Il s’agit d’une commande qui fait office de recherche et de
remplacement pour l’ordinateur lors de la compilation. Toutes les fois qu’il
trouve la première chose (jusqu’à l’espace), il la remplace par le reste de la
ligne. Ainsi, dans cet exemple, quand l’ordinateur trouve NOTE_E4, il le
remplace par une valeur de 330. Nous ne nous étendrons pas dans cette
section sur la façon de déterminer la fréquence de chaque note.
void setup()
{
pinMode(kPinSpeaker, OUTPUT) ;
}
void loop()
{
notreTonalité(NOTE_C4, 500) ;
notreTonalité(NOTE_D4, 500) ;
notreTonalité(NOTE_E4, 500) ;
notreTonalité(NOTE_F4, 500) ;
notreTonalité(NOTE_G4, 500) ;
notreTonalité(NOTE_A4, 500) ;
notreTonalité(NOTE_B4, 500) ;
notreTonalité(NOTE_C5, 500) ;
noTone(kPinSpeaker) ;
retard (2000) ;
}
Les fonctions peuvent être d’une grande aide afin de rendre votre
programme plus simple à comprendre. Voici un exemple afin que nous
puissions désormais spécifier ce que nous souhaitons jouer dans deux
tableaux (un possédant les notes et un contenant les mélodies).
#include "pitches.h"
int kPinSpeaker = 9 ;
#define NUM_NOTES 15
void setup()
{
pinMode(kPinSpeaker, OUTPUT) ;
}
void loop()
{
for (int i = 0 ; i < NUM_NOTES ; i++) {
si (notes[i] == 0) {
delay(beats[i] * beat_length) ; // repos
}
else {
ourTone(notes[i], beats[i] * beat_length) ;
}
// pause entre les notes
noTone(kPinSpeaker) ;
delay(beat_length / 2) ;
}
}
THERMOMÈTRE NUMÉRIQUE
void loop()
{
delayTime = delayTime - 100 ;
si(delayTime <= 0){
delayTime = 1000 ;
}
Serial. print("delayTime = ') ;
Serial. println(delayTime) ;
digitalWrite(kPinLed, HIGH) ;
delay(delayTime) ;
digitalWrite(kPinLed, LOW) ;
delay(delayTime) ;
}
Construisons le thermomètre
Nous employons une puce appelée TMP36. Il peut rétablir la température
de -40 degrés Celsius à 150 degrés Celsius (ou de -40 degrés Fahrenheit à
302 degrés Fahrenheit). La précision diminue après 125 degrés Celsius,
mais comme l’eau bout à 100 degrés Celsius, c’est plus qu’excellent. Voici
ci-dessous une photo du circuit :
void setup()
{
Serial. begin(9600) ;
}
void loop()
{
float temperatureC = getTemperatureC() ;
Serial. print(temperatureC) ;
Serial. println(" degrés C ") ;
Serial. print(temperatureF) ;
Serial. println(" degrés F ") ;
delay(500) ;
}
float getTemperatureC()
{
int lecture = analogRead(kPinTemp) ;
L’écran LCD
LCD veut dire que Liquid Crystal Display (affichage à cristaux liquides).
Nous le nommerons LCD ou simplement écran pour faire court. Il se trouve
un grand nombre de types divers de LCD. Ils sont de toutes formes et de
toutes tailles, certains ne peuvent afficher que des caractères (lettres et
chiffres) et d’autres sont en mesure d’afficher des graphiques (ou des
images). Pour ce livre, nous employons un LCD graphique 84x48, ce qui
signifie qu’il y a 84 pixels (points) en largeur et 48 pixels en profondeur.
Contrôler un LCD directement serait très complexe, c’est pourquoi la
majorité des LCD sont équipés d’une puce de contrôle. Dans ce cas, le nôtre
a un PCD8544 pour son contrôleur, nous allons le brancher et utiliser
quelques routines afin de mettre du texte sur l’écran. Par la suite, nous
allons explorer un peu plus en détail ce que nous pouvons faire et aussi
illustrer certains graphiques sur l’écran. Le LCD fonctionne à 3.3V tandis
que la tension pour l’Arduino est de 5V, la puce sur le PCB fait la
conversion de tension pour nous, ainsi nous n’endommagerons pas le LCD.
Il y a 8 broches sur la carte. Voici ci-dessous une liste des broches et de ce
qu’elles font :
PIN
Description
GND
Mise à la terre de l’Arduino
3,3V
Connectez l’alimentation de 3.3 V sur l’Arduino, c’est l’alimentation
pour le LCD. Il est crucial qu’il soit connecté à 3,3 V et NON à 5 V, sinon
vous risquez d’endommager le LCD.
CLK
Horloge série
DIN
C’est là que les données série sont envoyées
D/C
Cela permet au LCD de savoir si ce qui lui est envoyé est une
commande ou une donnée.
CS
Quand cette valeur est basse, la puce écoute sur D/C, DIN, CLK et
RST), peut être connectée à la masse (ce qui la fera toujours écouter) ou
utilisée de manière à ce que les broches puissent aussi être utilisées à
d’autres fins.
RST
Ceci réinitialise le contrôleur sur le LCD
LED
Il contrôle le rétro-éclairage. Nous sommes en mesure de le connecter
au +5V pour qu’il soit toujours allumé, ou au GND pour qu’il soit toujours
éteint, ou à une broche pour l’allumer ou l’éteindre.
Désormais, nous allons câbler le circuit, voici ci-dessous une image qui
peut vous aider :
1. Placez le PCB LCD + dans le breadboard à l’endroit où les
broches étiquetées sur le PCB violet sont situées dans a4-a11.
2. Connectez la colonne la plus à droite à GND sur l’Arduino.
3. Connectez la colonne suivante à droite au +5V de l’Arduino.
4. Connectez c4 à la colonne à l’extrême droite (masse).
5. Connectez c5 à 3V3 sur Arduino. (TRÈS IMPORTANT !
Effectuez un double contrôle avant de connecter l’alimentation
électrique).
6. Connectez c6 (CLK) à la broche 5 de l’Arduino.
7. Connectez c7 (DIN) à la broche 6 de l’Arduino.
8. Connectez c8 (D/C) à la broche 7 de l’Arduino.
9. Connectez c9 (CS) à la colonne de l’extrême droite (masse).
10. Connectez c10 (RST) à la broche 8 de l’Arduino.
11. Connectez c11 (LED) à la colonne suivante sur la droite (+5V).
Cela veut dire que le rétroéclairage sera toujours allumé.
12. Nous serions en mesure aussi d’écrire tout le code afin de parler
à l’écran LCD, mais cela serait trop coûteux et hors sujet, nous
emploierons alors quelques fonctions dans une bibliothèque.
Une bibliothèque est une collection de code qui peut être
employée par de nombreux programmes. Cela nous aide à
appeler simplement des fonctions qui facilitent la
communication avec le LCD. Si vous êtes intéressé par le
fonctionnement du LCD, vous pouvez observer l’intérieur de la
bibliothèque, mais expliquer ce code est hors de propos pour le
moment. Créez un répertoire nommé « libraries » dans le
répertoire de votre sketchbook, puis redémarrez l’IDE Arduino
en le fermant et en débutant. Il est important de noter que si vous
ne redémarrez pas l’IDE Arduino, vous ne pourrez pas utiliser la
bibliothèque.
#include <WProgram.h>.
#include <Print.h>.
void init() ;
void clear() ;
privé :
Caractère non signé pin_sclk ;
Caractère non signé pin_sdin ;
Caractère non signé pin_dc ;
unsigned char pin_reset ;
Caractère non signé pin_cs ;
unsigned char pin_backlight ;
#endif
void setup()
{
lcd. init() ;
lcd. setCursor(0,0) ;
lcd. print('Hello, World!') ;
}
void loop()
{
lcd. setCursor(0,1) ;
lcd. print(millis()) ;
}
void setup()
{
lcd. init() ;
lcd. setCursor(10,0) ;
lcd. print("Température :") ;
}
void loop()
{
float temperatureC = getTemperatureC() ;
float temperatureF = convertToF(temperatureC) ;
lcd. setCursor(21,1) ;
lcd. print(temperatureC) ;
lcd. print(' C') ;
lcd. setCursor(21,2) ;
lcd. print(temperatureF) ;
lcd. print(' F') ;
delay(100) ;
}
float getTemperatureC()
{
int lecture = analogRead(kPin_Temp) ;
J usqu’à maintenant, nous n’avions que du texte sur notre écran LCD,
mais comme nous avons un écran LCD graphique, il est temps d’y
dessiner des images. En premier lieu, nous allons dessiner certains
graphiques statiques (cela signifie que nous savons à l’avance ce que nous
allons dessiner. Par la suite, nous laisserons l’Arduino décider de ce qu’il
faut dessiner en fonction de l’entrée. Toutefois, avant de passer au dessin,
nous devrons faire une petite diversion afin d’expliquer quelques détails qui
seront demandés afin d’envoyer les graphiques à l’écran. Quand vous
comptez, vous utilisez normalement la base 10, ce qui signifie que chaque
chiffre a une valeur 10 fois supérieure à celle de son voisin de droite. Par
exemple :
1
10 = 1 x 10
100 = 10 x 10
1,000 = 10 x 10
10 000 = 10 x 10 x 10
...
Quand nous observons un nombre comme 423, nous savons qu’il s’agit
en fait de : (4 x 100) + (2 x 10) + 3. Le souci réside dans le fait que les
appareils électroniques numériques n’ont que les 2 états suivants : HIGH et
LOW (ou ON et OFF). Notez que ceux-ci sont normalement représentés par
0 et 1. Ainsi, en base 2 (communément nommée binaire), chaque chiffre a
une valeur 2 fois supérieure à celle de son voisin de droite. Par exemple :
10 = 1 x 2
100 = 2 x 2 (4)
1000 = 2 x 2 x 2 (8)
1 0000 = 2 x 2 x 2 (16)
...
Alors, quand un ordinateur voit 1101, nous savons qu’il s’agit en fait de
: (1 x 8) + (1 x 4) + (0 x 2) + (1 x 1) ou 13 (en base 10). Vous pouvez en
effet insérer des valeurs binaires dans votre code grâce au préfixe 0b : int
value = 0b1101 ;
Cette approche serait vraiment coûteuse, imaginez le nombre 200 : (1 x
128) + (1 x 64) + (0 x 32) + (0 x 16) + (1 x 8) + (0 x 4) + (0x 2) + (0x 1) :
int value = 0b11001000 ;
Remarquez que les programmeurs n’aiment pas perdre du temps, c’est
pourquoi la majorité des ordinateurs fonctionnent sur le concept d’octets de
8 bits (d’où 8 « chiffres » en base 2). Afin de faciliter la saisie (tout en
restant simple à convertir du format binaire), nous employons la base 16
(communément nommée hexadécimale). En base 16, nous aurons ce qui
suit :
1
10 = 1 x 16 (16)
100 = 16 x 16 (256)
1000 = 16 x 16 (4096)
...
(Vous avez probablement remarqué que j’avais l’habitude d’avoir un
espace après 4 chiffres en base 2. Il s’agit d’une convention, car 4 chiffres
en base 2 se convertissent en exactement 1 chiffre en base 16). Il y a un
souci. Nous n’avons que les chiffres de 0 à 9, car nous sommes habitués à la
base 10. Des symboles totalement nouveaux auraient pu être inventés,
toutefois la solution consiste à utiliser des lettres. (A = 10, B = 11, C = 12,
D = 13, E = 14 et F = 15) Alors, afin de représenter 200 (base 10) en base
16, nous aurions :
C8
(12 * 16) + (8 * 1)
192+8
200
Nous pouvons insérer des valeurs hexadécimales dans notre code avec
le préfixe 0x afin d’indiquer au compilateur que nous employons des
valeurs hexadécimales. C’est l’une des rares fois où vous pouvez employer
des lettres minuscules ou majuscules sans faire de distinction : int value =
0xC8 ;
Comme nous envoyons les données à l’écran LCD une colonne à la fois,
ce serait : 0b000001, 0b0000010, 0b00000100, 0b00001000, 0b000100,
0b00100000, 0b010000, 0b10000000. Alternativement, comme les
programmeurs emploient en général la base 16 dans leurs programmes au
lieu de la base 2, ils seraient : 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
0x80). Veuillez remarquer l’ordre, le pixel supérieur de chaque colonne est
représenté par 1, le suivant par 2, le suivant par 4 et ainsi de suite. Vous
pouvez employer cette méthode et du papier millimétré afin de déterminer
précisément ce que vous devez envoyer. Cela serait complexe et prendrait
du temps (et il serait facile de commettre une erreur). Heureusement, il
existe une méthode meilleure et plus simple. L’un d’entre nous (Jordan
Liggitt) a gentiment écrit un programme qui fonctionnera sur n’importe
quel navigateur moderne et générera le code dont vous avez besoin dans
votre programme : http://www.introtoarduino.com/utils/pcd8544.html.
Vous êtes en mesure de changer la largeur de l’image à n’importe quel
nombre jusqu’à la largeur de l’écran. Mais la hauteur de l’image ne peut se
faire que par lot de 8. Afin d’activer un pixel (foncé), il suffit de cliquer sur
le carré. Vous pouvez faire un clic droit afin de désactiver à nouveau un
pixel. Ici, nous l’employons afin de réaliser un graphique qui ressemble à
un thermomètre et qui sera montré à l’écran :
void setup()
{
lcd. init() ;
lcd. setCursor(10,0) ;
lcd. print("Température :") ;
lcd. setCursor((LCD_WIDTH-THERMO_WIDTH) / 2, 3) ;
lcd. drawBitmap(thermometerBitmap, THERMO_WIDTH, ← !
THERMO_HAUTEUR) ;
}
void loop()
{
float temperatureC = getTemperatureC() ;
// maintenant convertir en Fahrenheit
float temperatureF = convertToF(temperatureC) ;
lcd. setCursor(21,1) ;
lcd. print(temperatureF) ;
lcd. drawBitmap(degreesBitmap, DEGREE_WIDTH,
DEGREE_HEIGHT) ;
lcd. print(' F') ;
lcd. setCursor(21, 2) ;
lcd. print(temperatureC) ;
lcd. drawBitmap(degreesBitmap, DEGREE_WIDTH,
DEGREE_HEIGHT) ;
lcd. print(' C') ;
delay(500) ;
}
float getTemperatureC()
{
int lecture = analogRead(kPin_Temp) ;
Nous avons déjà analysé une importante partie du code, mais les
nouveautés concernent la définition d’un petit graphique (5 pixels de large
sur 1 « ligne » (8 pixels) de haut) que nous emploierons comme symbole de
degré.
Après avoir défini la largeur et la hauteur de l’écran LCD, nous
emploierons par la suite ces variables afin de calculer où positionner les
éléments pour qu’ils soient centrés. En fait, afin de centrer un graphique, il
suffit de le régler sur lcdWidth-graphicWidth / 2 . Il faudra probablement
certains exemples pour vous convaincre de son efficacité, mais il n’en
manque pas une. Nous employons cette méthode afin de déterminer la
colonne de départ, dans ce cas la « ligne » de départ est 3, alors en dessous
de notre affichage. Rappelez-vous que les lignes débutent à 0, il s’agit donc
en fait de la quatrième ligne. Finalement, nous nommons la méthode
drawBitmap() pour dessiner le bitmap. (Bitmap est le nom d’un élément
graphique dans lequel vous donnez les pixels exacts qui doivent être activés
ou désactivés). Cela dessine tout simplement un bitmap de qualité
inférieure.
void setup()
{
lcd. init() ;
lcd. setCursor(10,0) ;
lcd. print("Température :") ;
lcd. setCursor(0, LCD_HEIGHT - THERMO_HEIGHT) ;
lcd. drawBitmap(thermometerBitmap, THERMO_WIDTH, ← !
THERMO_HAUTEUR) ;
}
void loop()
{
float temperatureC = getTemperatureC() ;
// maintenant convertir en Fahrenheit
float temperatureF = convertToF(temperatureC) ;
lcd. setCursor(21,1) ;
lcd. print(temperatureF) ;
lcd. drawBitmap(degreesBitmap, DEGREE_WIDTH,
DEGREE_HEIGHT) ;
lcd. print(' F') ;
si(xChart >= LCD_WIDTH){
xChart = THERMO_WIDTH + 2 ;
}
lcd. setCursor(xChart, 2) ;
int dataHeight = map(temperatureF, MIN_TEMP, MAX_TEMP, 0, ← !
HAUTEUR DU GRAPHIQUE * 8) ;
drawColumn(dataHeight) ;
drawColumn(0) ; // marqueur pour voir la position actuelle du
graphique
xChart++ ;
delay(500) ;
}
float getTemperatureC()
{
int lecture = analogRead(kPin_Temp) ;
drawColumn(dataHeight) ;
drawColumn(0) ; // marqueur pour voir la position actuelle du
graphique
xChart++ ;
PISTOLET ÉLASTIQUE
#include <Servo.h>.
Servo servo1 ;
void setup()
{
servo1.attach(kPinServo1) ;
}
void loop()
{
int val = analogRead(kPinPot) ;
val = map(val, 0, 1023, 0, 180) ;
servo1.write(val) ;
retard (15) ;
}
Il n’y a que deux choses qui sont nouvelles ici. Effectivement, nous avons
connecté le servo (en lui indiquant sur quelle broche il se trouve) et envoyé
une valeur (0 à 180) pour l’angle.
Un joystick, qui peut être employé avec le pouce, sera aussi nécessaire
pour notre petit projet. Il se compose de 2 potentiomètres (un pour l’axe des
x et un pour l’axe des y) et d’un interrupteur (pour le moment où l’on
appuie sur le bouton).
void setup()
{
pinMode(kPinJoystickFire, INPUT) ;
digitalWrite(kPinJoystickFire, HIGH) ; // activer la résistance pull-up
Serial. begin(9600) ;
}
void loop()
{
int xVal = analogRead(kPinJoystickX) ;
int yVal = analogRead(kPinJoystickY) ;
Comme les lectures du joystick se trouvent dans une plage comprise entre 0
et 1023, nous divisons cette plage en sections. Nous définissons une valeur
inférieure à 300 comme GAUCHE (ou HAUT), supérieure à 700 comme
DROITE (ou BAS) et tout ce qui se situe entre les deux est CENTRAL. Le
+F affiche que le joystick a été pressé.
Maintenant que nous disposons d’une excellente base, il ne nous
manque plus que deux composants afin de mener à bien notre petit projet,
dont le support panoramique/inclinable. Nous avons attaché deux servos au
support de pan/tilt. Cela nous aidera à effectuer un panoramique (0-180
degrés) et une inclinaison (0-180 degrés). Attachons-le au joystick pour la
visée.
Voici une recommandation : si vous ne démontez pas le circuit dans la
dernière section, vous pouvez débuter par l’étape 9.
1. Connectez la colonne la plus à droite à GND sur l’Arduino.
2. Connectez la colonne suivante à droite au +5V de l’Arduino.
3. Réglez le circuit imprimé du joystick sur d1-d5.
4. Connectez a1 sur la planche à pain à la colonne suivante sur la droite
(+5V).
5. Connectez a2 sur la planche à pain à A5 sur l’Arduino.
6. Connectez a3 sur la planche à pain à A4 sur l’Arduino.
7. Connectez a4 sur la planche à pain à la broche 2 de l’Arduino.
8. Connectez a5 sur la planche à pain à la colonne la plus à droite
(GND).
9. Connectez le fil noir du servo du bas (le servo panoramique) à la
colonne de l’extrême droite (GND).
10. Connectez le fil rouge du servo du bas (le servo panoramique) à la
colonne suivante sur la droite (+5V)
11. Connectez le fil blanc du servo en bas (le plateau du servo) à la
broche 9 de l’Arduino.
12. Connectez le fil noir du servo au centre (le servo d’inclinaison) à la
colonne à l’extrême droite (GND).
13. Connectez le fil rouge du servo au centre (le servo d’inclinaison) à
la colonne suivante à droite (+5V).
14. Connectez le fil blanc du servo au centre (le servo d’inclinaison) à la
broche 10 de l’Arduino.
Voici ci-dessous le code dont vous avez besoin :
#include <Servo.h>.
Servo panServo ;
TiltServo ;
int panAngle = 0 ;
int tiltAngle = 90 ;
void setup()
{
panServo. attach(kPinServoPan) ;
tiltServo. attach(kPinServoTilt) ;
}
void loop()
{
int xVal = analogRead(kPinJoystickX) ;
int yVal = analogRead(kPinJoystickY) ;
panServo. write(panAngle) ;
tiltServo. write(tiltAngle) ;
delay(20) ; // attendez que les servos arrivent.
}
#include <Servo.h>.
Servo panServo ;
TiltServo ;
Servo fireServo ;
int panAngle = 90 ;
int tiltAngle = 90 ;
int fireAngle = 0 ;
void setup()
{
pinMode(kPinJoystickFire, INPUT) ;
digitalWrite(kPinJoystickFire, HIGH) ; // activer le pull-up â†!
résistance
fireServo. attach(kPinServoFire) ;
fireServo. write(0) ;
delay(500) ;
fireServo. detach() ;
panServo. attach(kPinServoPan) ;
tiltServo. attach(kPinServoTilt) ;
}
void loop()
{
int xVal = analogRead(kPinJoystickX) ;
int yVal = analogRead(kPinJoystickY) ;
panServo. write(panAngle) ;
tiltServo. write(tiltAngle) ;
delay(20) ; // attendez que les servos arrivent.
si(digitalRead(kPinJoystickFire) == LOW){
fireServo. attach(kPinServoFire) ;
fireServo. write(180) ;
delay(500) ;
fireServo. write(0) ;
delay(500) ;
fireServo. detach() ;
while(digitalRead(kPinJoystickFire) == LOW){
// attendre qu'il ne soit plus bas
}
}
}
Une fois que vous avez l’ensemble des composants nécessaires, voici la
façon que vous devez câbler votre Arduino :
C : Municipalité
NC : Normalement fermé
NO : Normalement ouvert
Le code est en fait assez facile. Il initialise tout d’abord le relais dans la
méthode setup(), puis attend une entrée sur le port série dans la méthode
loop(). Si un '1' est reçu en entrée, le relais est activé ; si un '0' est reçu, le
relais est désactivé. Comme l’Arduino UNO utilise son port UART pour la
programmation, il ne peut pas communiquer avec l’ordinateur et recevoir
des données du module Bluetooth HC-05 en même temps. Si vous tentez le
code ci-dessus sur un Arduino UNO, vous devriez recevoir l’erreur ci-
dessous :
avrdude : stk500_getsync() attempt 1 of 10 : not in sync : resp=0x00
Une erreur s'est produite lors du téléchargement de l'esquisse
Bien que les cas ci-dessus soient certainement plus difficiles que la
commande d’un appareil électrique via un relais, notre objectif ultime est de
construire un système domotique à faire soi-même, peu coûteux et évolutif.
Je vous invite alors à expérimenter, à rechercher et à développer de
nouvelles solutions, toujours en toute sécurité. ATTENTION : Le courant
alternatif haute tension peut être potentiellement vraiment dangereux,
veillez donc à respecter les mesures de sécurité appropriées. Nous
n’assumons aucune responsabilité pour toute blessure ou tout dommage qui
pourrait survenir en suivant ce livre. Si vous avez des doutes, demandez à
un expert ou renseignez-vous sur Internet.
12
DOMOTIQUE ET RFID
RFID et Arduino
C’est le principe de fonctionnement de base et maintenant observons la
façon que nous pouvons employer la RFID avec Arduino et construire notre
propre serrure RFID. Nous emploierons des étiquettes basées sur le
protocole MIFARE et le lecteur RFID MFRC522, qui ne coûte que
quelques euros.
Ces étiquettes possèdent une mémoire de 1 kb et une puce capable
d’effectuer des opérations arithmétiques. Il est important de noter que leur
fréquence de fonctionnement est de 13,56 MHz et la distance de
fonctionnement peut atteindre 10 cm selon la géométrie de l’antenne.
Remarquez que si l’on tient l’une de ces étiquettes à la lumière ou devant
une source lumineuse, nous sommes en mesure de constater que l’antenne
et la micropuce mentionnées ci-dessus.
Quant au module de lecture RFID, il emploie le protocole SPI pour
communiquer avec la carte Arduino et voici la façon dont nous devons les
connecter. Veuillez remarquer que nous devons connecter le VCC du
module à 3.3V et que pour les autres broches, nous n’avons pas à nous
inquiéter parce qu’elles sont tolérantes à 5V.
Voici aussi le mapping du PIN sur l’Arduino :
#define RST_PIN 9
#define SS_PIN 10
octet readCard[4] ;
char* myTags[100] = {} ;
int tagsCount = 0 ;
String tagID = '' ;
boolean successRead = false ;
booléen correctTag = false ;
int proximitySensor ;
booléen doorOpened = false ;
Par la suite, si la porte est fermée, en employant les mêmes lignes que nous
avons décrites dans la fonction personnalisée getID(), nous scannerons et
obtiendrons l’UID du nouveau tag. Nous pouvons observer ici que le code
n’ira pas plus loin tant que nous n’aurons pas scanné une balise, en raison
de l’instruction « return » de l’instruction « if ». Une fois que le tag a été
scanné, nous vérifions si ce tag est le maître que nous avons précédemment
enregistré, si c’est le cas, nous entrons dans le mode dédié. Il est important
de savoir que dans ce mode, si nous scannons une étiquette déjà autorisée,
elle sera supprimée du système ou, si l’étiquette est inconnue, elle sera
ajoutée au système comme autorisée.
// Vérifie si l'étiquette scannée est l'étiquette principale.
if (tagID == myTags[0]) {
lcd. clear() ;
lcd. print("Mode programme :") ;
lcd. setCursor(0, 1) ;
lcd. print("Add/Remove Tag") ;
while ( ! successRead) {
successRead = getID() ;
si ( successRead == true) {
for (int i = 0 ; i < 100 ; i++) {
if (tagID == myTags[i]) {
myTags[i] = '' ;
lcd. clear() ;
lcd. setCursor(0, 0) ;
lcd. print(' Tag Removed!') ;
printNormalModeMessage() ;
retour ;
}
}
myTags[tagsCount] = strdup(tagID. c_str()) ;
lcd. clear() ;
lcd. setCursor(0, 0) ;
lcd. print(' Tag Added!') ;
printNormalModeMessage() ;
tagsCount++ ;
retour ;
}
}
}
#define RST_PIN 9
#define SS_PIN 10
octet readCard[4] ;
char* myTags[100] = {} ;
int tagsCount = 0 ;
String tagID = '' ;
boolean successRead = false ;
booléen correctTag = false ;
int proximitySensor ;
booléen doorOpened = false ;
void setup() {
// Initiation
SPI. begin() ; // bus SPI
mfrc522.PCD_Init() ; // MFRC522
lcd. begin(16, 2) ; // écran LCD
myServo. attach(8) ; // Servo moteur
void loop() {
int proximitySensor = analogRead(A0) ;
// Si la porte est fermée...
if (proximitySensor > 200) {
if ( ! mfrc522.PICC_IsNewCardPresent()) { //Si un nouveau PICC est
placé sur le lecteur RFID, continuez.
retour ;
}
if ( ! mfrc522.PICC_ReadCardSerial()) { //Puisqu'un PICC est placé,
récupérer Serial et continuer
retour ;
}
tagID = '' ;
// Les PICC MIFARE que nous utilisons ont des UID de 4 octets.
for ( uint8_t i = 0 ; i < 4 ; i++) { //
readCard[i] = mfrc522.uid. uidByte[i] ;
tagID. concat(String(mfrc522.uid. uidByte[i], HEX)) ; // Ajoute les 4
octets dans une seule variable String
}
tagID. toUpperCase() ;
mfrc522.PICC_HaltA() ; // Arrêt de la lecture
correctTag = false ;
// Vérifie si l'étiquette scannée est l'étiquette principale.
if (tagID == myTags[0]) {
lcd. clear() ;
lcd. print("Mode programme :") ;
lcd. setCursor(0, 1) ;
lcd. print("Add/Remove Tag") ;
while ( ! successRead) {
successRead = getID() ;
si ( successRead == true) {
for (int i = 0 ; i < 100 ; i++) {
if (tagID == myTags[i]) {
myTags[i] = '' ;
lcd. clear() ;
lcd. setCursor(0, 0) ;
lcd. print(' Tag Removed!') ;
printNormalModeMessage() ;
retour ;
}
}
myTags[tagsCount] = strdup(tagID. c_str()) ;
lcd. clear() ;
lcd. setCursor(0, 0) ;
lcd. print(' Tag Added!') ;
printNormalModeMessage() ;
tagsCount++ ;
retour ;
}
}
}
successRead = false ;
// Vérifie si l'étiquette scannée est autorisée.
for (int i = 0 ; i < 100 ; i++) {
if (tagID == myTags[i]) {
lcd. clear() ;
lcd. setCursor(0, 0) ;
lcd. print(" Accès autorisé ! ") ;
myServo. write(170) ; // Déverrouille la porte
printNormalModeMessage() ;
correctTag = true ;
}
}
si (correctTag == false) {
lcd. clear() ;
lcd. setCursor(0, 0) ;
lcd. print(' Accès refusé!') ;
printNormalModeMessage() ;
}
}
// Si la porte est ouverte...
else {
lcd. clear() ;
lcd. setCursor(0, 0) ;
lcd. print(' Door Opened!') ;
while ( ! doorOpened) {
proximitySensor = analogRead(A0) ;
if (proximitySensor > 200) {
doorOpened = true ;
}
}
doorOpened = false ;
delay(500) ;
myServo. write(10) ; // Verrouille la porte
printNormalModeMessage() ;
}
}
uint8_t getID() {
// Se préparer à la lecture des PICC
if ( ! mfrc522.PICC_IsNewCardPresent()) { //Si un nouveau PICC est
placé sur le lecteur RFID, continuez.
retourner 0 ;
}
if ( ! mfrc522.PICC_ReadCardSerial()) { //Puisqu'un PICC a été placé,
récupérer Serial et continuer
retourner 0 ;
}
tagID = '' ;
for ( uint8_t i = 0 ; i < 4 ; i++) { // Les PICC MIFARE que nous
utilisons ont 4 octets UID
readCard[i] = mfrc522.uid. uidByte[i] ;
tagID. concat(String(mfrc522.uid. uidByte[i], HEX)) ; // Ajoute les 4
octets dans une seule variable String
}
tagID. toUpperCase() ;
mfrc522.PICC_HaltA() ; // Arrêt de la lecture
retour 1 ;
}
void printNormalModeMessage() {
retard (1500) ;
lcd. clear() ;
lcd. print("-Access Control-") ;
lcd. setCursor(0, 1) ;
lcd. print(' Scan Your Tag!') ;
}
13
DOMOTIQUE EXTRÊME
Le coût total est d’environ 50 euros, mais peut varier en fonction des
éléments et de la qualité des composants sélectionnés. L’idée est de
fabriquer une boîte pour accueillir ce système, une sorte de tout-en-un. Je
n’entrerai pas dans les détails de la fabrication de la boîte, car vous pouvez
trouver de bons tutoriels en ligne, mais tout ce dont vous avez besoin, c’est
d’un peu de dextérité manuelle et probablement de savoir faire usage d’un
pistolet à clous ou de la colle à bois.
Comme nous construisons un système de pompage d’eau, il pourrait
être utile de protéger le bois de l’eau, j’ai alors appliqué environ 4 couches
de Polycrylic afin de rendre le bois « tolérant à l’eau ». Dans mon cas, la
boîte a été découpée, ensuite les panneaux ont été collés ensemble.
Planification
Un simple programme de chronométrage qui suit aussi la journée est au
cœur de notre Arduino. J’ai écrit certains compteurs « push » de base qui
vous aident à régler l’heure et les minutes localement pour l’heure et
l’irrigation. Le suivi des jours est arbitraire et débute à partir du premier
jour. Le décompte se fait jusqu’à un jour « x » selon le mois. J’ai pensé à
construire un système flexible, en fait, ce code a la capacité énumérée ci-
dessous :
*/
#include<Time.h>
#include<TimeAlarms.h>
#include<LiquidCrystal.h>
int x = 0 ;
long previousMillis = 0 ;
long intervalIdle = 300 ;
int LCDalarm=0 ;
unsigned char delayms = 250 ; // délai entre les bips (fait le buzzer)
int minutePushCounter =0 ;
int minuteState= 0 ;
int lastminuteState = 0 ;
int hourPushCounter =0 ;
int hourState= 0 ;
int lasthourState = 0 ;
int setButtonState = 0 ;
int alarmHRPushCounter =1 ;
int alarmMinPushCounter =1 ;
int alarmHR = 0 ;
int alarmHRState = 0 ;
int lastalarmHRState = 0 ;
int alarmMin = 0 ;
int alarmMinState = 0 ;
int lastalarmMinState = 0 ;
eau octet[8] ={
B01110, B00100, B10100, B11110, B11111, B10001, B00000, B00001}
;
octet calendrier[8] ={
B01010, B11111, B11111, B10001, B10001, B10001, B11111} ;
int dayoftheweek = 1 ;
void setup() {
lcd. begin(20.4) ;
pinMode(minutePin, INPUT_PULLUP) ;
pinMode(hourPin, INPUT_PULLUP) ;
pinMode(timeSetButton, INPUT_PULLUP) ;
pinMode(alarm1SetButton, INPUT_PULLUP) ;
pinMode(alarm1EnablePin, INPUT_PULLUP) ;
pinMode(alarmLED, OUTPUT) ;
pinMode(relayOverride, INPUT_PULLUP) ;
pinMode(relayPinA0, OUTPUT) ;
pinMode(relayPinA1, OUTPUT) ;
pinMode(relayPinA2, OUTPUT) ;
pinMode(relayPinA3, OUTPUT) ;
lcd. createChar(1,water) ;
lcd. createChar(2,calendar) ;
//==================Basic Clock
Protocals===========================
void loop() {
//lire la tension au potentiomètre convertir en 0-1023
digitalClockDisplay() ;
minute_reset59() ;
hour_reset24() ;
setAlarmHR_Min() ;
setTime_Hour_Minute() ;
AmPm() ;
//=============Day Alarm================
/*
if (digitalRead(alarm1EnablePin)==LOW) { //code par défaut. au cas où
ce code serait détruit
alarme() ; } */
si (digitalRead(alarm1EnablePin)==LOW) {
lcd. setCursor(1,1) ; lcd. print("=ACTIVE") ;
si (day()%dayInterval==0)
alarme() ; }
else{
lcd. setCursor(1,1) ; lcd. print("=off ") ;
digitalWrite(relayPinA0,LOW) ; digitalWrite(relayPinA1,LOW) ;
digitalWrite(relayPinA2,LOW) ; digitalWrite(relayPinA3,LOW) ;
digitalWrite(alarmLED,LOW) ;
}
void setAlarmHR_Min() {
while (digitalRead(alarm1SetButton)==LOW) {
alarmHRState = digitalRead(hourPin) ;
if (alarmHRState != lastalarmHRState) {
if (alarmHRState == LOW) {
alarmeHRPushCounter ++ ; }}
alarmMinState = digitalRead(minutePin) ;
if (alarmMinState != lastalarmMinState) {
si (alarmMinState == LOW) {
alarmMinPushCounter ++ ; }}
lastalarmHRState = alarmHRState ;
lastalarmMinState = alarmMinState ;
digitalClockDisplay() ;
minute_reset59() ;
hour_reset24() ;
}
}
void alarm(){
//--------------------RELAY Alarm ON Toggles------------------------------------
-----
if (hour()== alarmHRPushCounter &&
minute()==alarmMinPushCounter && second()<=1){ //définit le temps
de déclenchement de l'alarme
digitalWrite(relayPinA0,HIGH) ; // la carte relais se déclenche sur
HIGH
delay(100) ; digitalWrite(relayPinA1,HIGH) ;
delay(100) ; digitalWrite(relayPinA2,HIGH) ;
delay(100) ; digitalWrite(relayPinA3,HIGH) ; }
void hour_reset24() {
si (hourPushCounter > 23){
hourPushCounter = 0;}
void setTime_Hour_Minute () {
minuteState = digitalRead(minutePin) ;
if (minuteState != lastminuteState) {
if (minuteState == LOW) {
minutePushCounter++ ;
}
}
hourState = digitalRead(hourPin) ;
if (hourState != lasthourState) {
if (hourState == LOW) {
compteur d'heures++ ;
}
}
lastminuteState = minuteState ;
lasthourState = hourState ;
setButtonState = digitalRead(timeSetButton) ;
if (setButtonState == LOW) {
setTime(hourPushCounter, minutePushCounter,00,dayoftheweek, 7,
2000) ; // (HH,MM,SS,Day, Month, Year)
}
}
//--------------------------------------------------------
void AmPm () {
if (hour()>=12) {lcd. setCursor(18,0) ; lcd. print('PM') ; }
else { lcd. setCursor(18,0) ; lcd. print("AM") ; }
//--------------------------------------------------------
void digitalClockDisplay() {
pumpDuration = analogRead(potPin1) ;
dayInterval = analogRead(potPin2) ;
dayInterval = map(dayInterval, 0,1000, 1,7) ;
//--------------------------------------------------------
void printDigits(int digits) {
si (chiffres < 10)
lcd. print('0') ;
lcd. print(digits) ;
}
//--------------------------------------------------------
Il est important de savoir que vous placez la pompe dans le réservoir (cuve)
et vous alimentez les tuyaux de sortie dans un joint en T. De plus, vous
pouvez diviser les lignes d’arrosage en fonction du nombre de vos plantes.
Notez que j’ai mis en place ce système à quatre lignes, car je ne veux
m’occuper que de quelques plantes d’intérieur, les plus délicates et les plus
belles. Mettre les plantes dans une « boîte » n’est probablement pas la
meilleure chose à faire ; il faut alors que la lumière du soleil soit artificielle
et c’est pourquoi je vais employer des ampoules fluorescentes compactes.
Je vous conseille de choisir les bonnes ampoules qui donneront à votre
plante la bonne lumière [UV] dont elle a besoin. L’ensemble sera monté sur
le dessus de ma boîte et les ampoules descendront à travers une grille qui
maintiendra les tubes en nylon.
Oui, nous avons de l’eau juste à côté du 120 V. Je vous invite alors, une
fois de plus, à ne pas essayer chez vous ou ailleurs. L’Arduino et les
lumières sont connectés à une seule prise. La pompe est connectée à l’autre
prise qui est contrôlée par le relais (Arduino).
Finalement, j’ai imprimé en 3D des clips faciles qui acheminent et
fixent le tuyau d’eau au pot de la plante, mais vous pouvez aussi employer
des colliers de serrage ordinaires, une méthode simple et moyennement
efficace.
Voici ci-dessous à quoi ressemble le résultat final :
Considérations finales
Ce projet peut sembler vraiment avancé, mais pensez au temps que vous
avez passé à arroser vos plantes, surtout si vous avez une villa ou un grand
jardin !
De plus, la domotique rend votre maison intelligente : des serrures qui
s’ouvrent d’une simple pression, des appareils qui font ce que vous
souhaitez quand vous n’êtes pas chez vous, des thermostats qui peuvent être
programmés en fonction de vos besoins. Tout peut être contrôlé et géré via
un téléphone portable.
Avec la diffusion des nouvelles technologies et des télécommunications,
dont Internet et les interfaces numériques, les experts ont commencé à
développer une nouvelle science, la domotique, dont le nom dérive de «
domus » (maison en latin) et « robotique ». La domotique examine les
technologies appliquées à l’environnement domestique en mettant l’accent
sur les questions environnementales, les économies d’énergie et
l’amélioration des modes de vie. L’Arduino vous aide à avoir une approche
distincte, plus proche de ce que vous souhaitez réaliser, sans avoir à
compter sur quelque chose de tout fait et construit par d’autres. Les
installations traditionnelles disposent d’un dispositif de contrôle comme un
interrupteur d’éclairage mécanique ou un thermostat, mais, depuis
l’invention de la domotique et des installations intelligentes, ces fonctions
peuvent être gérées par un système à distance et connectées directement aux
téléphones intelligents, tablettes, PC, comme nous l’avons fait dans les
chapitres précédents. Cela vous aide à surveiller la situation de votre
maison à tout moment, même quand vous en êtes absent. La maison du
futur sera certainement intelligente parce qu’elle impliquera des niveaux
élevés d’interaction entre les utilisateurs et les appareils qu’ils ont à
l’intérieur de leur maison, garantissant le contrôle, la sécurité et les
économies d’énergie. De plus, ce dernier point est l’un des principes de
base de la domotique.
Les systèmes d’alimentation électrique intelligents visent à réduire la
quantité d’électricité utilisée. Comment ? En contrôlant à distance vos
appareils afin d’éviter de dépasser la limite maximale du compteur
électrique ; en enregistrant et en signalant les anomalies potentielles du
système ; en vous alertant si des appareils fonctionnent alors que vous
n’êtes pas chez vous. Permettez-moi vous donner un exemple concret : en
plein été, vous devez quitter la maison et vous savez que vous devrez rester
dehors durant 5 heures, malheureusement il fait vraiment chaud et vous
souhaitez trouver la maison fraîche à votre retour. Sans une maison
domotique, vous devriez laisser votre climatiseur allumé, probablement au
ralenti, afin de trouver la maison fraîche à votre retour. Avec une maison
domotique, vous pourriez allumer votre climatiseur à distance,
probablement avec un Arduino faisant office de télécommande infrarouge.
Ce serait vraiment facile et cela vous aiderait d’économiser de l’énergie et
de l’argent. Respectueux de l’environnement, mais surtout des personnes.
En simplifiant la manière dont nous gérons les dispositifs et les
appareils, il est possible de réduire le gaspillage d’énergie qui a un impact
négatif sur l’environnement et augmente les coûts. De plus, les maisons
intelligentes aident à économiser de l’argent et consistent en des systèmes
aidant d’éviter les déchets ménagers. Finalement, la domotique est
aujourd’hui moins coûteuse qu’auparavant : elle ne nécessite pas de
systèmes et de câbles onéreux, dans la plupart des cas, un signal Wi-Fi
suffit. Grâce à la télécommande, vous êtes en mesure d’utiliser votre four,
votre machine à laver, votre plaque à induction au moment de la journée où
l’électricité est moins chère, ou même recharger votre voiture électrique si
vous en avez une.
Le monde change, probablement avons-nous vraiment pris conscience
que nous ne disposons pas de ressources infinies et que nous ferions mieux
de débuter à bien les utiliser, probablement en améliorant notre qualité de
vie.
14
DÉPANNAGE
Test de la carte
De plus, si le premier exemple, le clignotement d’une LED, ne fonctionnait
pas ? Ne serait-ce pas un peu déprimant ? Tentons de savoir ce qu’il faut
faire. Avant de débuter à blâmer le projet, vous devez vous assurer que
certaines choses sont en ordre, comme le font les pilotes de ligne quand ils
passent par une liste de contrôle afin de s’assurer que l’avion volera
correctement avant le décollage : branchez votre Arduino dans une prise
USB de votre ordinateur.
Si vous avez fait toutes ces étapes correctement, vous pouvez être
certain que votre Arduino fonctionne correctement.
Test du circuit
Connectez maintenant la carte à la planche d’essai en reliant les connexions
5V et GND aux rails positifs et négatifs de la planche d’essai. Si le voyant
vert PWR s’éteint, retirez tout de suite les fils.
Cela veut dire qu’il y a une grosse erreur dans votre circuit et que vous
avez un « court-circuit » quelque part. Quand cela se produit, votre carte
consomme trop de courant et l’alimentation est coupée afin de protéger
votre ordinateur. Si vous rencontrez un court-circuit, notez que vous devez
effectuer le processus de « simplification et de segmentation », cela signifie
que vous devez passer en revue tous les capteurs de la conception et les
connecter un par un.
La première chose à faire est toujours de débuter par l’alimentation (les
connexions 5V et GND). Vérifiez bien le circuit et assurez-vous que chaque
partie du circuit est alimentée correctement. Travailler étape par étape et
effectuer un seul changement à la fois est la règle numéro un pour bien faire
les choses.
C’est vraiment essentiel, car vous saurez ainsi ce qui a résolu le
problème (il est trop simple de perdre de vue la modification qui a
réellement résolu le souci, voilà pourquoi il est si essentiel d’en faire une à
la fois). Chaque expérience de débogage créera une « base de
connaissances » des défauts et des solutions possibles dans votre tête, et
avant que vous ne le sachiez, vous deviendrez un expert. Alors, tout sera
parfait, car dès qu’un débutant vous dira « Ça ne marche pas ! », vous
jetterez un coup d’œil rapide et vous aurez la réponse en une fraction de
seconde - c’est ça l’expérience !
Isoler le problème
Une autre règle essentielle consiste à trouver un moyen fiable de reproduire
un problème. Si votre circuit se comporte bizarrement à des moments
aléatoires, efforcez-vous de déterminer le moment exact où le souci se
produit et la cause. Ce processus vous aidera à penser à une cause possible,
il est également vraiment utile pendant que vous devez expliquer à
quelqu’un d’autre ce qui se passe.
Décrire le souci aussi précisément que possible est aussi une excellente
méthode afin de trouver une solution. Tentez de trouver quelqu’un à qui
vous pouvez expliquer le souci : dans de nombreux cas, une solution vous
viendra en formulant le souci.
Si vous êtes bloqué, ne passez pas des jours seuls à chercher le souci :
demandez de l’aide. L’une des meilleures choses à propos d’Arduino est sa
communauté, vous pouvez toujours trouver de l’aide si vous pouvez décrire
votre souci correctement.
Prenez l’habitude de couper et de coller les erreurs dans un moteur de
recherche et observez si quelqu’un les mentionne. Par exemple, pendant
que l’IDE Arduino renvoie un mauvais message d’erreur, copiez et collez-le
dans une recherche Google et observez ce qui en ressort. Faites de même
avec les morceaux de code sur lesquels vous travaillez ou simplement le
nom d’une fonction spécifique. Regardez autour de vous : tout a déjà été
inventé et est stocké quelque part sur une page Web.
Pour en savoir plus, visitez le site Web principal www.arduino.cc et
consultez la FAQ, puis passez au terrain de jeu, un wiki librement
modifiable que tout utilisateur peut éditer afin de contribuer à la
documentation, c’est l’un des meilleurs aspects de la philosophie du logiciel
libre.
Les gens aident à la documentation et aux exemples de tout ce que vous
pouvez exécuter avec Arduino. Avant de débuter un projet, cherchez sur le
terrain de jeu et vous trouverez un code ou un schéma de circuit afin de
vous aider à démarrer.
Void setup () est la première partie du sketch, utilisée afin de configurer les
broches, les variables, les bibliothèques et les communications série ;
La boucle vide () est mise en place après la configuration, et exécute
cycliquement ce qui y est écrit ;
/*..... */ est le bloc de commentaires ;
// est le bloc de commentaires pour une seule ligne ;
#define attribue une valeur constante avant la phase de compilation ;
Delay () ; met en pause l’esquisse pendant la période indiquée dans les
rubriques ;
Millis () ; renvoie le temps écoulé depuis que l’Arduino a débuté à
exécuter le sketch ;
Faux une valeur de 0 ;
Vrai toutes les conditions de vrai dans un sens bouilli ;
INPUT configure la broche comme une entrée ;
OUTPUT configure la broche comme une sortie ;
À des significations diverses selon la configuration des broches ;
LOW si la broche est en entrée, elle a la valeur low ; si la broche est en
sortie, elle a la valeur OV ;
Le booléen ne prend que deux valeurs : true et false ;
Char a un seul caractère :
Unsigned char une variable qui utilise des nombres non signés ;
Byte est la variable qui remplace unsigned char ;
Unsigned int stocke les entiers non signés ;
Nombres à virgule flottante
Nombre à double virgule flottante ;
Char str définit un ensemble d’éléments du même type ;
Char () convertit une valeur en un type de données char ;
Byte () convertit une valeur en octets ;
Int () convertit une valeur en int ;
Word () convertit une valeur en mot ;
Long () convertit une valeur en long ;
Float () convertit une valeur en un flottant ;
Si exécute des blocs d’esquisses ;
Interrupteur ... Le cas compare la valeur d’une variable avec un
ensemble de données ;
Interrompre vous permet d’interrompre la recherche de cas lorsqu’une
correspondance est trouvée ;
Partie d’esquisse facultative par défaut à insérer à la fin de switch.case ;
Pour répéter l’instruction ou un bloc d’instructions un nombre fixe de
fois ;
Condition la condition évaluée à chaque répétition ;
L’incrémentation est employée afin de modifier une valeur ou pour
l’amener à l’état où la condition est fausse ;
While : une instruction répétée jusqu’à ce que la condition soit vraie ;
Do ... while la condition est toujours vérifiée après que le bloc de
commande a été exécuté au moins une fois ;
Goto afin de faire des sauts d’un point à un autre dans le code ;
|| Symbole affichant que l’une des deux conditions doit être remplie ;
= est l’opérateur d’affectation et aide à stocker la valeur située à droite
du symbole dans la variable située à gauche ;
Addition (+), soustraction (-), multiplication (*), division (/) : les
opérations qui permettent d’obtenir la somme, la différence, le produit et le
quotient entre deux valeurs ;
% calcule le reste d’une division.
Finalement, je voudrais demander pourquoi un prototype électronique est
une première étape importante pour toute entreprise, grande ou petite, afin
de développer un nouveau produit ou un dispositif matériel, ou même
simplement pour le plaisir.
La principale raison pour laquelle Arduino est une excellente plateforme
pour le prototypage électronique est sa courbe d’apprentissage rapide. Les
personnes ayant peu d’expérience sur le plan du matériel ou de
micrologiciel peuvent lire certains tutoriels et être tout de suite en mesure
de débuter à travailler sur la mise en œuvre au sein de l’écosystème
Arduino. Cela n’est pas possible lorsque nous essayions de développer une
solution matérielle d’une autre façon. Bien que cela ne soit pas impossible,
il serait complexe d’attendre d’un entrepreneur qu’il apprenne à concevoir
des circuits imprimés et à programmer des microprogrammes en un temps
raisonnablement court.
Une autre raison importante pour laquelle Arduino est devenu un tel
succès est la communauté qui l’entoure. Il existe des milliers et des milliers
de tutoriels sur Internet. Plusieurs entreprises ont aussi débuté à suivre la
méthodologie open source grâce à Arduino. Cette vaste communauté aide à
répondre aux questions et de résoudre les soucis gratuitement. Le forum
officiel Arduino et divers subreddits sont tous deux incroyablement actifs et
donnent une assistance gratuite. Nous ne pouvions nier la rapidité avec
laquelle nous pouvons réaliser un prototype en employant Arduino. Si vous
disposez d’un laboratoire d’électronique bien approvisionné en cartes
Arduino, vous pouvez concevoir et construire un prototype grossier en un
après-midi. Il est impossible d’atteindre cette vitesse avec d’autres
approches et sans Arduino.
Je tiens aussi à mentionner le grand nombre de bibliothèques de
micrologiciels à code source ouvert. C’est un autre gain de temps
considérable et, comme vous l’avez vu, nous en avons employé quelques-
uns dans ce livre. Il est bien connu que, souvent, l’aspect du matériel qui
cause les plus grands retards dans la planification est en fait le micrologiciel
qui le sous-tend. Les bogues et les soucis de microprogrammes ont
tendance à être beaucoup plus complexes à diagnostiquer et à résoudre que
les soucis matériels. La possibilité de tirer parti des bibliothèques Arduino
existantes est un outil incroyable. Bien que leur optimisation laisse quelque
peu à désirer, ils constituent un excellent point de départ.
Maintenant que vous faites vous aussi partie de la grande communauté
Arduino, vous serez certainement en mesure de créer quelque chose d’utile
et d’intéressant, probablement le prochain produit sur le marché ! Continuez
à expérimenter, ne vous arrêtez pas, et vous observerez que tous vos efforts
seront récompensés !