Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
LM35
Temperature Sensor
1
1. Initiation Arduino Uno
Microcontrôleur ATmega328
Tension de fonctionnement 5V
Tension d'alimentation (recommandée) 7-12V
Tension d'alimentation (limites) 6-20V
Broches E/S numériques 14 (dont 6 disposent d'une sortie PWM)
Broches d'entrées analogiques 6 (utilisables en broches E/S numériques)
40 mA (ATTENTION : 200mA cumulé pour
Intensité maxi disponible par broche E/S (5V)
l'ensemble des broches E/S)
Intensité maxi disponible pour la sortie 3.3V 50 mA
En fonction de l'alimentation utilisée - si
Intensité maxi disponible pour la sortie 5V
port USB utilisé seul: 500 mA max
32 KB (ATmega328) dont 0.5 KB sont
Mémoire Programme Flash
utilisés par le bootloader
Mémoire SRAM (mémoire volatile) 2 KB
Mémoire EEPROM (mémoire non volatile) 1 KB
Vitesse d'horloge 16 MHz
1. Initiation Arduino
Il existe plusieurs versions de cartes Arduino.
• Les plus anciennes utilisent le microcontrôleur ATmega8,
• La version suivante est Diecimila, utilise le microcontrôleur ATmega168,
• La version courante de base, la Duemilanove (2009), utilise le
microcontrôleur Atmel ATmega328,
• La carte Arduino Mega (à plus grande capacité) est basée sur l'ATmega1280
2
1. Initiation Arduino
Les autres cartes Arduino
Carte Arduino LilyPad Carte Arduino Fio Carte Arduino Pro Carte Arduino ProMini
1. Initiation Arduino
Les Modules disponibles avec les cartes Arduino
3
1. Initiation Arduino
Environnement de développement – Arduino IDE
(https://www.arduino.cc/en/Main/Software)
• Permet d’éditer, vérifier, compiler (verify/compile) et charger (upload) le
firmware dans la mémoire du microcontrôleur,
• De dialoguer avec la carte lors de son fonctionnement (serial monitor)
• Il fournit des bibliothèques de code pour étendre les fonctionnalités.
• Sélectionner la liaison série COM_XX (menu Tools\serial_port)
Programme Arduino:
Le programme est au moins constitué de 2 fonctions:
• La fonction void setup() qui assure l’initialisation des E/S du microcontroleur.
• La fonction void loop() (qui contient les instructions) est indéfiniment
exécuté.
4
Faire communiquer le PC et la carte Arduino:
Liaison série
• La liaison Série est un protocole de communication entre le PC et la carte
Arduino via le câble USB permettant un échange d’informations via un
moniteur série !
• Le moniteur série est accessible depuis le logiciel Arduino en cliquant sur
la loupe en haut à droite de la fenêtre :
• Pour activer et configurer la liaison série.
Ajouter dans la fonction setup() la ligne:
Serial.begin(9600);
• Pour que la carte Arduino envoie un message
sur le moniteur série on a cette fonction : 9600 baud: Fréquence de
transmission du moniteur série.
Serial.print("Hello les makers ");
5
3. Objet IOT 1: Capteur de température
int temp;
Acquisition de température : LM35 void setup()
Présentation du capteur : { Serial.begin(9600);
• Alimenter les pattes VCC et GND. }
• Brancher la patte void loop()
• centrale à une entrée analogique. { temp = analogRead(A0);
Lecture du capteur : Serial.write(temp);
delay(1000);
• 10mV 1C°
}
• 1V 100 C°
• La lecture analogique d’un signal de 0 à 5V étant codée de 0 à 1023.
• Temp = Volt*(5/1023)*100
• Volt est entre 0 et 1023
Fonctionnement de la plaque d'essaie (breadboard)
6
4. Introduction à l'interface série pour périphérique (SPI)
• Aux 3 lignes communes, s'ajoutent une ligne de sélection SS "Slave Select":
o Active en niveau BAS, quand cette broche est mise au niveau HAUT, l’esclave
ignore ce qui se passe sur le bus SPI.
o Le maître peut l’utiliser pour activer ou désactiver le(s) esclave(s)
périphérique(s) voulu(s).
7
Principe de mise en œuvre de la communication SPI
Il y a 4 modes de transmission qui combinent la polarité et la phase
d'horloge. La fonction SPI.setDataMode() est défini en accord avec ce
tableau: Mode Clock Polarity (CPOL) Clock Phase (CPHA)
0 0 0
1 0 1
2 1 0
3 1 1
• Une fois que les paramètres SPI sont configurés, il ne reste plus qu'à
déterminer quels registres (32 registres internes 8 bits, R0 à R31) à utiliser.
• Pour inclure la librairie SPI dans un programme, on ajoutera au programme
la ligne : #include <SPI.h> ou le menu du logiciel Arduino Programme >
Importer Librairie > Nom_librairie
• Les fonctions de la librairie SPI: begin(), end(), setBitOrder(),
setClockDivider(), setDataMode() et transfer().
Tag
5. Objet IOT 2: Contrôle d'accès avec RFID
Connecter le module
• Branchez le module LCD aux broches de l’Arduino comme représenté
Radio Frequency
ci-dessous : IDentification
• Table de correspondance
RFID-RC522 Arduino
VCC 3.3V
RST 9
GND GND
MISO 12
MOSI 11
SCK 13
NSS 10
IRC /
8
Installation de la bibliothèque
#include <SPI.h>
Exemple de programme #include<MFRC522.h>
// Affectation des broches
#define RST_PIN 9
L’exemple de code suivant (à #define SS_PIN 10
MFRC522 mfrc522(SS_PIN, RST_PIN);
copier dans l’IDE Arduino) void setup() {
initialise le module RFID et affiche // Initialisation du Module RFID
Serial.begin(9600);
les données de la carte ou du while(!Serial);
SPI.begin();
badge présenté sur le moniteur mfrc522.PCD_Init();
mfrc522.PCD_DumpVersionToSerial(); // Affichage des données de la
série (CTRL+MAJ+M pour ouvrir le bibliothèque
moniteur série) : Serial.println(F("Scan PICC to see UID, type, and data blocks..."));
}
void loop() {
// Attente d'une carte RFID
if( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Récupération des informations de la carte RFID
if( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
// Affichage des informations de la carte RFID
mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}
9
Contrôle d'accès avec RFID
Nous allons tester le module RFID en assemblant un contrôle d'accès
qui vérifie le droit d’accès (ou non) à travers une porte contrôlée
par un servomoteur (microservo 9G):
servomoteur
10
Fonctionnement et contrôle d'un servomoteur
• Cette consigne est transmise au moyen d'une impulsion
numérique (PWM).
• Pour que le servomoteur reste à une position donnée, il faut
transmettre toutes les 20 millisecondes (50Hz) une impulsion
d'une longueur comprise entre 1 et 2 millisecondes.
– Une impulsion de 1 milliseconde correspond à 0°.
– Une impulsion de 2 millisecondes correspond à 180.
– En envoyant une impulsion d'une longueur intermédiaire,
on obtient des angles différents.
11
Fonctionnement et contrôle d'un servomoteur
code
• La bibliothèque de code à utiliser est nommée Servo.
• Elle permet de contrôler jusqu'à 12 servomoteurs simultanément.
• Elle rend inutilisable les broches D9 et D10 en PWM avec analogWrite().
#include <Servo.h>
Servo monServomoteur; //créer un objet Servo
void setup() { monServomoteur.attach(9); } //numéro de broche sur laquelle le servomoteur est câblé
void loop() {
// Fait bouger le bras de 0° à 180°
for (int position = 0; position <= 180; position++) {
monServomoteur.write(position);
delay(15);
}
// Fait bouger le bras de 180° à 10°
for (int position = 180; position >= 0; position--) {
monServomoteur.write(position);
delay(15);
}
}
/** * Exemple de code pour un servomoteur, il fait faire des va-et-vient à la tête du servomoteur. */
/* Inclut la lib Servo pour manipuler le servomoteur */
#include <Servo.h> /* Créer un objet Servo pour contrôler le servomoteur */
Servo monServomoteur;
void setup() {
/ / Attache le servomoteur à la broche D9
monServomoteur.attach(9); }
void loop() {
// Fait bouger le bras de 0° à 180°
for (unsigned long position = 1000; position <= 2000; position += 5) {
monServomoteur.writeMicroseconds(position);
delay(15);
}
// Fait bouger le bras de 180° à 10°
for (unsigned long position = 2000; position >= 1000; position -= 5) {
monServomoteur.writeMicroseconds(position);
delay(15);
}
}
12
#include <SPI.h> for (byte i = 0; i < mfrc522.uid.size; i++) {
#include <MFRC522.h> Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
#include <Servo.h> Serial.print(mfrc522.uid.uidByte[i], HEX);
Servo microservo9g; contenu.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
#define SS_PIN 10 contenu.concat(String(mfrc522.uid.uidByte[i], HEX)); }
#define RST_PIN 9 Serial.println();
MFRC522 mfrc522(SS_PIN, RST_PIN); Serial.print(" Publier : ");
int led_libéré = 5; contenu.toUpperCase();
int led_refusé = 6; if (contenu.substring(1) == "D8 4B 12 22") {
char st[20]; microservo9g.write(-90);
void setup() { digitalWrite(led_libéré, HIGH);
pinMode(led_libéré, OUTPUT); Serial.println(" Carte 1 - Accès débloqué !");
pinMode(led_refusé, OUTPUT); Serial.println(); delay(3000);
microservo9g.attach(3); microservo9g.write(90);
microservo9g.write(90); digitalWrite(led_libéré, LOW); }
Serial.begin(9600); if (contenu.substring(1) == "87 4B DC 8A") {
SPI.begin(); Serial.println(" Carte 2 - Accès refusé !!");
mfrc522.PCD_Init(); Serial.println();
Serial.println(" Rapprochez votre carte du lecteur..."); for (int i= 1; i<5 ; i++) {
Serial.println(); } digitalWrite(led_refusé, HIGH);
void loop() { delay(200);
if ( ! mfrc522.PICC_IsNewCardPresent()) { digitalWrite(led_refusé, LOW);
return; } delay(200); }
if ( ! mfrc522.PICC_ReadCardSerial()) { return; } }
Serial.print(" Numéro d'identification UID:"); delay(1000);
String contenu= ""; }
byte lettre;
7. Objets connectés
Connecter Arduino à l’Internet en utilisant le module WiFi ESP8266
• Le module Wifi ESP8266 est un réseau WiFi Commandes Description Type
complet où on peut facilement nous connecter, AT+RST Restart module basic
AT+CWMODE Wifi mode wifi
en tant qu'adaptateur Wi-Fi de service, grâce à AT+CWJAP Join AP wifi
sa connectivité via la communication série ou AT+CWLAP List AP wifi
l'interface UART. AT+CWQAP Quit AP wifi
AT+CIPSTATUS Get status TCP/IP
• Il peut être programmé en utilisant directement AT+CIPSTART Set up TCP or UDP TCP/IP
AT+CIPSEND Send data TCP/IP
les commandes AT, le code Arduino ou encore AT+CIPCLOSE Close TCP or UDP TCP/IP
le micrologiciel python, AT+CIFSR Get IP TCP/IP
AT+CIPMUX Set multiple TCP/IP
connections
• Des nombreuses informations sur le web sont
AT+CIPSERVER Set as server TCP/IP
périmées ou tout simplement fausses.
13
Application 1
ESP8266 Arduino
Étape 1: parler au module manuellement
GND GND
• L'ESP8266 n'est strictement alimenté VIN 3.3v
qu'en 3,3 V. ENABLE 3.3v
• Téléverser le Sketch Blink pour TX RX
allouer la liaison série, RX TX
• Régler le terminal pour envoyer Schéma pour initialiser
CR et LF en caractère de fin de manuellement l'ESP8266
avec les commandes AT
ligne et le débit à 115200 baud.
Puis envoyer la commande AT
(suivie d'un retour à la ligne).
14
Application 2
Réglage du téléphone Android:
1. Téléverser le code ci-après dans l’Arduino UNO
(esp8266Sample.ino).
2. Télécharger le client Telnet pour Android
3. Connecter au ESP8266 Wifi
4. Une fois connecté, obtenir l'adresse IP
5. Ouvrir le client Telnet sur le téléphone Android.
6. Créer une connexion en cliquant sur se connecter,
sur Ajouter IP et sur le port 80.
Une fois connecté, envoyez une demande en tapant:
esp8266: <any AT Commands>
Application 2
Étape 3: À propos du code
Toutes les requêtes lues et analysées sont dans la fonction loop()
if(wifiSerial.available()>0){
String message = readWifiSerialMessage();
if(find(message,"esp8266:")){
String result = sendToWifi(message.substring(8,message.length()),responseTime,DEBUG);
if(find(result,"OK"))
sendData("\n"+result);
else
sendData("\nErrRead"); //At command ERROR CODE for Failed Executing statement
}else
if(find(message,"HELLO")){ //receives HELLO from wifi
sendData("\\nHI!"); //arduino says HI
}else if(find(message,"LEDON")){
digitalWrite(13,HIGH);
}else if(find(message,"LEDOFF")){
digitalWrite(13,LOW);
} else{
sendData("\nErrRead"); //Command ERROR CODE for UNABLE TO READ
} }
15
Application 2
• Pour communiquer avec Arduino UNO on ajoute cette condition
if(find(message,""))
{ //something to do here
}
Lit dans le flux jusqu'à ce que le target donné soit trouvé (rep. vrai ou faux).
Application 3
• L’ESP démarre en mode Point d’Accès, on peut donc s’y connecter à l'aide
d'un smartphone pour un contrôle à distance.
• Séquence vidéo (https://www.youtube.com/watch?v=2cjufbgOBYo) illustre
les étapes à réaliser de l’application.
• Environnement de développement utilisé est Remotexy.
• Code voir: https://goo.gl/cxptgA#stay_creative #nothing_impossible
16
8. Diagrammes fonctionnels
Rappels
• Les appareils qui se connectent aux réseaux WiFi sont appelés stations (STA).
• La connexion au WiFi est assurée par un point d'accès (AP), qui fait office de
concentrateur pour une ou plusieurs stations.
• L’AP est connecté de l'autre extrémité à un réseau câblé.
• Un AP est généralement intégré à un routeur pour fournir l'accès d'un réseau
WiFi à l’Internet.
• Chaque AP est reconnu par un SSID (Service Set IDentifier), qui est
essentiellement le nom du réseau qu’on sélectionne lors de la connexion d'un
appareil (station) au WiFi.
Diagrammes fonctionnels
• L’ESP8266 peut fonctionner comme une station, nous pouvons donc le connecter
au réseau WiFi.
• Il peut également fonctionner comme un AP logiciel (soft-AP), pour établir son
propre réseau WiFi.
• Lorsque le module ESP8266 fonctionne comme un soft-AP, nous pouvons
connecter d'autres stations au module ESP.
• L'ESP8266 peut également fonctionner à la fois comme une station et un soft-
AP. Cela offre la possibilité de construire un réseaux maillés.
17
Diagrammes fonctionnels: Station
• Le mode Station (ST) est utilisé pour connecter le
module ESP à un réseau WiFi établi par un AP.
L’ESP8266 fonctionner
en mode soft-AP
18
Diagrammes fonctionnels: Client
La classe Client crée des clients qui peuvent accéder aux services fournis
par les serveurs afin d'envoyer, de recevoir et de traiter des données.
L’ESP8266 fonctionner
comme un Serveur
19
9. Ajouter un Shield GSM/GPRS à Arduino UNO
//Programme d'envoi d'un sms toutes les heures
//Shield GSM/GRPRS ITEA //Arduino uno //Pin 2 : TX //Pin 3 : RX
//Carte sim sans code pin
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;
int numdata;
boolean started=false;
char smsbuffer[160];
char n[20];
char num_tph[] = "+21698600000";
void setup(){
//Serial connection.
Serial.begin(9600);
Serial.println("GSM Shield testing.");
//Start configuration of shield with baudrate 2400(pour le shield ITEA)
if (gsm.begin(2400)) {
Serial.println("\nstatus=READY");
started=true;
} else Serial.println("\nstatus=IDLE");
if(started) {
if (sms.SendSMS(num_tph, "start"))
Serial.println("\nSMS sent OK"); }};
void loop(){
if(started) {
sms.SendSMS(num_tph, "message");
delay(3600000); }};
20
11. Application IOT-1
Problème
Un agriculteur, qui cultive des légumes sur un champ de 5
kilomètres carrés, cherche à mettre en œuvre un système Wi-Fi
de surveillance de la température et de l'humidité entièrement
indépendant, autonome et sans utiliser des fils.
Solution: Création d'un réseau Wi-Fi ESP8266
• Diviser le champ en 4 parties de zones,
• Dans chaque zone, on construit un sous-réseau de 9 ESP8266,
• Au centre du terrain, on place un boîtier central (central Box) contenant
– 1 module ESP8266,
– 1 Arduino uno,
– 1 module compatible GPRS Arduino.
• Dans chaque sous-réseau, on dispose :
– 3 ESP comme répéteurs de signaux (middleman)
– 6 autres ESP pour les lectures des capteurs (workers).
21
11. Application IOT-1
• Les 6 workers sont, la plupart du temps, en DEEP_SLEEP et se
réveillent à 1 heure d'intervalle pour lire les capteurs,
• Les 3 middleman sont à la fois en AP et ST avec un serveur Web
démarré, en attente des requêtes à venir des workers.
Comment programmer les modules?
• Chaque worker est programmé pour se réveiller de DEEP_SLEEP, lire les
capteurs, se connecter à l'AP ESP le plus proche et envoyer une requête
HTTP à son serveur avec les données,
• Si l'AP middleman le plus proche n'était pas disponible, les workers sont
programmés pour conserver jusqu'à 10 lectures dans leurs mémoires
internes, et les envoyer chaque fois que l'AP est réveillé,
• Les workers peuvent être alimentés par 4 piles Li-Ion 3,3 V, branchés en
parallèle et chargés par des panneaux solaires de 15 V,
• Les capteurs à utiliser sont à 1 fil.
22
11. Application IOT-1
Il existe de nombreux arrangements possibles à concevoir
pour le projet.
23
11. Application IOT-2
MQTT en utilisant Arduino IDE
Le Broker MQTT utilisé est
iot.eclipse.org, qui est gratuit. Il
Subscriber existe également des Brokers
payants sur Internet et on peut
Message
même créer un Broker en
Publisher
interne, en utilisant une carte
Subscriber Raspberry Pi, par exemple.
24
//Programme: module ESP32 Wifi avec MQTT
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "WIFI-FSM";
const char* password = « 12457894";
//Envoyez le message au broker
const char* mqttServer = "mqtt.eclipse.org";
client.publish(« LFI3IOT", message);
const int mqttPort = 1883;
Serial.println("Message envoyé avec succès...");
const char* mqttUser = "abcdefg";
compteur++;
const char* mqttPassword = "123456";
delay(30000);}
WiFiClient espClient;
void reconnectbroker()
PubSubClient client(espClient);
{ // Connexion au broker MQTT
int compteur = 1;
client.setServer(mqttServer, mqttPort);
char message[30];
while (!client.connected())
void setup()
{ Serial.println(" Connexion au broker MQTT...");
{ Serial.begin(115200);
if (client.connect("ESP32Client", mqttUser, mqttPassword ))
WiFi.begin(ssid, password);
{ Serial.println(" Connexion au broker!"); }
while (WiFi.status() != WL_CONNECTED)
else
{ delay(500);
{ Serial.print("Échec de la connexion au Broker- État:");
Serial.println("Démarrage de la connexion WiFi..");}
Serial.print(client.state());
Serial.println("Connecté au réseau WiFi!");}
delay(2000);}
void loop()
}}
{ //Se connecte au Broker MQTT
reconnectbroker();
sprintf(message, "MQTT ESP32-message no. %d", compteur);
Serial.print(« Message envoyé: ");
Serial.println(message);
25
Principaux Brokers MQTT open-source
Les principaux projets de brokers Open Source
• ActiveMQ qui permet d’ajouter MQTT à un serveur Web Apache,
• JoramMQ pour l’intégration de MQTT en Java,
• Mosquitto, le plus utilisé dans les projets DIY soutenu par la fondation
eclipse.org,
• RabbitMQ, disponible également avec un support commercial,
• EMQTT, conçu pour recevoir de nombreuses connexions (jusqu’à 1 million
par serveur). Il est possible de créer un cluster (réseau de serveur) pour
accroitre le nombres de connexions simultanées.
ActiveMQ et JoramMQ sont des brokers assez spécifiques. RabbitMQ est
plus orienté entreprise.
Mosquitto est un très bon choix. Il est disponible sur toutes les plateformes
et s’installe en quelques minutes.
26