Vous trouverez d'autres articles PHMARDUINO ICI
Vous trouverez le site officiel Arduino ICI
Les schémas des montages ont été réalisés avec le logiciel gratuit Fritzing que vous pouvez télécharger ICI
Vous trouverez sur ce site quelques exemples très simples de mise en œuvre de l'Arduino UNO et de l'Arduino Ethernet sous Windows.
Micro contrôleur | ATmega328 |
Tension de fonctionnement | 5V |
Tension d'alimentation recommandée | 7 à 12V |
Tension d'alimentation limite | 6 à 20 V |
Entrées/sorties numériques | 14 dont 6 disposent d'une sortie PWM |
Entrées analogiques | 6 (ATTENTION : le niveau max en entrée doit être de 5 volts) |
Courant max par broches E/S | 40 mA (ATTENTION : 200 mA cumulé pour l'ensemble des broches E/S) |
Courant max sur sortie 3,3 V générée par le régulateur interne | 50 mA |
Mémoire Flash | 32 KB dont 0.5 KB utilisée par le bootloader |
Mémoire SRAM | 2 KB |
Mémoire EEPROM | 1 KB |
Fréquence horloge | 16 MHz |
Vous trouverez ci-dessous un tableau de consolidation des principaux composants nécessaires pour ces premières réalisations avec des exemples de fournisseurs et de références :
Composant | Photo | Exemple de fournisseur | Référence |
---|---|---|---|
Arduino Uno | Snootlab | ||
Afficheur LCD 2*16 caractères | Sélectronic | ||
Capteur de température LM35 DZ | Sélectronic |
Ce premier test permet de vérifier très rapidement en quelques minutes que l'Arduino fonctionne bien en faisant clignoter
la LED branchée sur la patte 13 et montée en standard sur la carte Arduino.
Code du programme Arduino :
/* Objet : Clignotement de la LED présente sur l'Arduino en série Nom : phm_blink.ino Infos sketch : Créé en 2011 le 26 octobre par PHM */ // Définition patte de l'arduino sur laquelle est connectée la LED const int patteLED = 13; // La patte de l'arduino avec la LED est la 13 void setup() { // On positionne la patte 13 de l'arduino en sortie pinMode(patteLED, OUTPUT); } void loop() { // On allume et on éteint alternativement la LED sur la patte 13 digitalWrite(patteLED, HIGH); delay(500); digitalWrite(patteLED, LOW); delay(1000); }
Video du montage :
A compléter
A compléter
/* Sketch : phm_chenillard.ino Auteur : PHMARDUINO Date création : 21 12 2012 Date dernière modification : so Description : Chenillard avec 5 Leds et aller retour */ // 5 leds sont connectées en sortie de l'Arduino sur les sorties 5,6,7,8 et 9 int led1 = 5; int led2 = 6; int led3 = 7; int led4 = 8; int led5 = 9; // Initialisations void setup() { // Init des sorties pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); } // Boucle infinie void loop() { // Allumage Aller digitalWrite(led1, HIGH); // allume led1 delay(100); // attente 0,1 seconde digitalWrite(led1, LOW); // extinction led1 delay(10); // attente 0,01 seconde digitalWrite(led2, HIGH); // allume led2 delay(100); // attente 0,1 seconde digitalWrite(led2, LOW); // extinction led2 delay(10); // attente 0,01 seconde digitalWrite(led3, HIGH); // allume led3 delay(100); // attente 0,1 seconde digitalWrite(led3, LOW); // extinction led3 delay(10); // attente 0,01 seconde digitalWrite(led4, HIGH); // allume led4 delay(100); // attente 0,1 seconde digitalWrite(led4, LOW); // extinction led4 delay(10); // attente 0,01 seconde digitalWrite(led5, HIGH); // allume led5 delay(100); // attente 0,1 seconde digitalWrite(led5, LOW); // extinction led5 delay(100); // attente 0,1 seconde //Allumage puis extinction de toutes les LEDs avant retour digitalWrite(led1, HIGH); // allume led1 digitalWrite(led2, HIGH); // allume led2 digitalWrite(led3, HIGH); // allume led3 digitalWrite(led4, HIGH); // allume led4 digitalWrite(led5, HIGH); // allume led5 delay(1000); // attente 1 seconde digitalWrite(led1, LOW); // extinction led1 digitalWrite(led2, LOW); // extinction led2 digitalWrite(led3, LOW); // extinction led3 digitalWrite(led4, LOW); // extinction led4 digitalWrite(led5, LOW); // extinction led5 delay(1000); // attente 1 seconde // Allumages Retour digitalWrite(led4, HIGH); // allume led4 delay(100); // attente 0,1 seconde digitalWrite(led4, LOW); // extinction led4 delay(10); // attente 0,01 seconde digitalWrite(led3, HIGH); // allume led3 delay(100); // attente 0,1 seconde digitalWrite(led3, LOW); // extinction led3 delay(10); // attente 0,01 seconde digitalWrite(led2, HIGH); // allume led2 delay(100); // attente 0,1 seconde digitalWrite(led2, LOW); // extinction led2 delay(10); // attente 0,01 seconde digitalWrite(led1, HIGH); // allume led1 delay(100); // attente 0,1 seconde digitalWrite(led1, LOW); // extinction led1 }
A compléter
A compléter
A compléter
Nous allons maintenant mettre en œuvre les trois exemples précédents combinés pour commander un chenillard à l'aide :
A compléter
A compléter
/* Objet : Clignotement de la LED présente sur l'Arduino en série Nom : phm_blink_serial.ino Infos sketch : Créé en 2011 le 26 octobre par PHM */ // Définition patte de l'arduino sur laquelle est connectée la LED const int patteLED = 13; // La patte de l'arduino avec la LED est la 13 void setup() { // On positionne la patte 13 de l'arduino en sortie pinMode(patteLED, OUTPUT); //initialisation de la liaison série à 9 600 bauds Serial.begin(9600); } void loop() { // On allume et on éteint alternativement la LED sur la patte 13 digitalWrite(patteLED, HIGH); Serial.println ("Allumage de la LED"); //Ecriture sur la sortie série avec un saut de ligne delay(2000); Serial.println ("Extinction de la LED"); //Ecriture sur la sortie série avec un saut de ligne digitalWrite(patteLED, LOW); delay(2000); }
A compléter
A compléter
A compléter
A compléter
Composant | Photo | Exemple de fournisseur | Référence |
---|---|---|---|
Arduino Uno | Snootlab | ||
Capteur de température LM35 DZ | Sélectronic |
Broches | Désignation |
---|---|
VS | Alimentation du capteur |
OUT | Sortie proportionnelle à la température |
GND | Masse du capteur |
////////////////////////////////////////////////////// // Objet : Mesure de temperature avec un LM35 DZ // // lm35_phm_temperature.ino // // Auteur : PHM // // Date création : Le 10 juin 2011 // // Date dernière mise à jour : Le 27 juin 2011 // /////////////////////////////////////////////////////// //Déclaration et initialisation des variables float mesure=0; //Variable pour le stockage mesure retournée par le capteur float tension=0; //Variable pour le stockage de la tension float temperature=0; //Variable pour le stockage de la température float tempmin=100; //Temperature min float tempmax=0; //Temperature max int portana0 = 0; //Numéro du port analogique sur lequel la température est mesurée //Traitements initialisation void setup() { analogReference(INTERNAL); //Permet de fixer la temperature de refernce à 1,1 volt Serial.begin(9600); //initialisation de la liaison série à 9 600 bauds } //Traitements itératifs void loop() { mesure = analogRead(portana0); //Lecture de la valeur fournie par le capteur de température tension = mesure * 1.1 / 1024; //Conversion en tension (en volt) temperature = tension * 100; //Conversion en température (en degré Celsius) if (temperature < tempmin) {tempmin = temperature;} //Calcul temperature mini if (temperature > tempmax) {tempmax = temperature;} //Calcul temperature maxi //Envoi de la tension et des températures au PC par la liaison série pour affichage dans la console Serial.print("Tension : "); Serial.print (tension); Serial.print(" Volts - "); Serial.print("Temperatures :"); Serial.print(" >Actuelle : "); Serial.print (temperature); Serial.print(" >Mini : "); Serial.print (tempmin); Serial.print (" >Max : "); Serial.println (tempmax); //Attente de 5 secondes avant de faire une nouvelle mesure delay(5000); }
A compléter
A compléter
A compléter
A compléter
A compléter
Couches du modèle TCP/IP |
---|
Couche Application (Browser WEB par exemple utilisant le protocole HTTP) |
Couche Transport (utilisant par exemple soit le protocole TCP , soit le protocole UDP) |
Couche réseau Internet (utilisant le protocole IP) |
Couche Accès réseau (utilisant le protocole Ethernet par exemple) |
Micro contrôleur | ATmega328 |
Tension de fonctionnement | 5V |
Tension d'alimentation plug (limites) | 6 à 18V |
Tension d'alimentation PoE (limites) | 36 à 57 V |
Entrées/sorties numériques | 14 dont 4 disposent d'une sortie PWM (Pattes Arduino réservées : 10 à 13 pour la connexion Ethernet, 4 pour la carte SD et 0 (Réception RX) à 1 (Émission TX) si la liaison série est utilisée) |
Entrées analogiques | 6 (ATTENTION : le niveau max en entrée doit être de 5 volts) |
Courant max par broches E/S | 40 mA (ATTENTION : 200mA cumulé pour l'ensemble des broches E/S) |
Courant max sur sortie 3,3 V générée par le régulateur interne | 50 mA |
Mémoire Flash | 32 KB dont 0.5 KB utilisée par le bootloader |
Mémoire SRAM | 2 KB |
Mémoire EEPROM | 1 KB |
Fréquence horloge | 16 MHz |
Autres | Contrôleur Ethernet TCP/IP embarqué W5100, jack magnétique Power Over Ethernet, lecteur carte Micro SD avec transfo de tension active |
Ce premier test permet de vérifier très rapidement en quelques minutes que l'Arduino Ethernet fonctionne bien en faisant clignoter
la LED présente sur la carte et connectée à la patte 9 et pas la 13 comme sur l'Arduino UNO.
Code du programme Arduino :
/* Objet : Clignotement de la LED présente sur l'Arduino Ethernet en série Nom : phm_blink_ethernet.ino Infos sketch : Créé en 2011 le 26 octobre par PHM */ // Définition patte de l'arduino sur laquelle est connectée la LED const int patteLED = 9; // La patte de l'arduino avec la LED est la 9 void setup() { // On positionne la patte 9 de l'arduino en sortie pinMode(patteLED, OUTPUT); } void loop() { // On allume et on éteint alternativement la LED sur la patte 9 digitalWrite(patteLED, HIGH); delay(200); // Attente de 200 ms digitalWrite(patteLED, LOW); delay(200); // Attente de 200 ms }
/* Nom sketch : phm_WebClient.ino Description : Exemple de Web client qui se connecte au site Google pour faire par exemple dans le cas présent une recherche sur le mot clé Arduino. Ce sketch s'inspire de l'exemple standard de David A. Mellis Auteur : PHMARDUINO Date modification : 30 07 2013 */ #include <SPI.h> #include <Ethernet.h> byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x65, 0x6F }; // MAC adresse de mon arduino ethernet IPAddress server(173,194,67,147); // Initialisation de l'objet server avec l'adresse IP du site // Google (à vérifier et à modifier éventuellement car // car celle-ci peut evoluer) // Initialisation objet client EthernetClient client; void setup() { // Initialisation communication série Serial.begin(9600); Serial.println("Envoi demande de configuration DHCP\n"); // Initialisation communication Ethernet if (Ethernet.begin(mac) == 0) { Serial.println("Echec demande configuration DHCP\n"); // Fin des traitements for(;;) ; } Serial.println("Configuration DHCP OK\n"); // Affichage adresse IP Arduino Serial.print("Adresse IP obtenue : "); Serial.println(Ethernet.localIP()); Serial.println(); // Laisse une seconde au shield Ethernet pour initialisation delay(1000); Serial.println("Connexion en cours...\n"); // Connexion obtenue if (client.connect(server, 80)) { Serial.println("Connexion OK\n"); // Envoi de la requete HTTP client.println("GET /search?q=arduino HTTP/1.0"); client.println(); } else { // Echec connexion au serveur Google Serial.println("Echec connexion"); } } void loop() { // Lecture resultat requete if (client.available()) { char c = client.read(); Serial.print(c); } // Arret client a la deconnexion du serveur if (!client.connected()) { Serial.println(); Serial.println("Deconnexion\n"); client.stop(); // Arret des traitements for(;;) ; } }
/* Nom sketch : phm_WebClient_api_temp.ino Description : Exemple de Web client qui se connecte au site Google pour faire par exemple dans le cas présent une recherche sur le mot clé Arduino. Ce sketch s'inspire de l'exemple standard de David A. Mellis Auteur : PHMARDUINO Date modification : 31 07 2013 */ #include <SPI.h> #include <Ethernet.h> byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x65, 0x6F }; // MAC adresse de mon arduino ethernet IPAddress server(188,125,73,190); // Initialisation de l'objet server avec l'adresse IP du site // Yahoo pour les API weather // Initialisation objet client EthernetClient client; void setup() { // Initialisation communication série Serial.begin(9600); Serial.println("Envoi demande de configuration DHCP\n"); // Initialisation communication Ethernet if (Ethernet.begin(mac) == 0) { Serial.println("Echec demande configuration DHCP\n"); // Fin des traitements for(;;) ; } Serial.println("Configuration DHCP OK\n"); // Affichage adresse IP Arduino Serial.print("Adresse IP obtenue : "); Serial.println(Ethernet.localIP()); Serial.println(); // Laisse une seconde au shield Ethernet pour initialisation delay(1000); Serial.println("Connexion en cours...\n"); // Connexion obtenue if (client.connect(server, 80)) { // w: ID from your City // http://weather.yahooapis.com/forecastrss?w=12893459&u=c // Serial.println("Connection à l'api Yahoo Weather..."); client.println("GET /forecastrss?w=601787&u=c HTTP/1.0"); client.println("HOST:weather.yahooapis.com\n\n"); client.println(); Serial.println("Connection OK..."); } else { // Echec connexion au serveur Google Serial.println("Echec connexion"); } } void loop() { // Lecture resultat requete if (client.available()) { char c = client.read(); Serial.print(c); } // Arret client a la deconnexion du serveur if (!client.connected()) { Serial.println(); Serial.println("Deconnexion\n"); client.stop(); // Arret des traitements for(;;) ; } }
// // Nom sketch : phm_WebServer_lm35.ino // Date : 28 04 2012 // Auteur : PHM d'après l'exemple standard Arduino // #include <SPI.h> #include <Ethernet.h> // Remplacer les adresses MAC et IP par celles de votre Arduino Ethernet byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xF6, 0x27 }; byte ip[] = { 192,168,0, 20 }; // Création de l'objet server de type EthernetServer disponible sur le port 80 EthernetServer server(80); void setup() { // Démarrage de la connexion Ethernet et du serveur WEB server Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600); analogReference(INTERNAL); //Permet de fixer la temperature de refernce à 1,1 volt } void loop() { //Déclaration et initialisation des variables float mesure=0; //Variable pour le stockage mesure retournée par le capteur float tension=0; //Variable pour le stockage de la tension float temperature=0; //Variable pour le stockage de la température float tempmin=100; //Temperature min float tempmax=0; //Temperature max int portana0 = 0; //Numéro du port analogique sur lequel la température est mesurée //Ecoute des requetes client (browser WEB) mesure = analogRead(portana0); //Lecture de la valeur fournie par le capteur de température tension = mesure * 1.1 / 1024; //Conversion en tension (en volt) temperature = tension * 100; //Conversion en température (en degré Celsius) delay(1000); Serial.println(temperature); //Ecriture de la temperature sur le potr série delay(1000); EthernetClient client = server.available(); if (client) { // Gestion de la fin de la requête WEB qui est indiquée par l'envoi d'une ligne blanche boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { client.print("Temperature ambiante = "); client.print(temperature); client.stop();} }}}
// // Nom sketch : phm_WebServer_ldr.ino // Date modification : 19 12 2012 // Auteur : PHMARDUINO d'après l'exemple standard Arduino // Description : affichage luminosité grace à une ldr dont la sortie est connectée sur l'entrée analogique // A0 de l'Arduino. La luminosité retournée varie de 0 dans l'obscurité totale à 1024 en pleine lumière. // La luminosité peut être visualisée soit via le moniteur série, soit en interrogeant le serveur WEB embarqué // sur l'Arduino Ethernet. Dans le cas présent, il faut saisir pour cela l'adresse IP locale du serveur WEB // Arduino choisie à savoir 192.168.0.20 #include <SPI.h> #include <Ethernet.h> // Initialisation avec de l'adresse MAC avec celle de mon Arduino Ethernet byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x65, 0x6f }; // Initialisation de l'adresse IP locale de mon serveur WEB Arduino que j'ai choisie byte ip[] = { 192,168,0, 23 }; // Création de l'objet server de type EthernetServer disponible sur le port 80 EthernetServer server(80); void setup() { // Initialisation de la connexion Ethernet Ethernet.begin(mac, ip); // Démarrage du serveur WEB server server.begin(); // Initialisation de la liaison série Serial.begin(9600); } void loop() { int lumi=0; //Variable pour le stockage de la luminosité retourrnée par la ldr int portana0 = 0; //Numéro du port analogique sur lequel la température est mesurée lumi = analogRead(portana0); //Lecture de la valeur fournie par la ldr Serial.print("Luminosite : "); //Ecriture de la temperature sur le port série Serial.println(lumi); delay(1000); // Attente de une second avant de refaire une mesure //Ecoute des requetes client (browser WEB) EthernetClient client = server.available(); //Une requete est à traiter if (client) { //Envoi de la réponse HTTP au browser qui a envoyé une requete while (client.connected()) { if (client.available()) { //Envoi du header standard HTTP au browser client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); //Envoi des données client.print("Luminosite = "); client.print(lumi); client.stop();} //Cloture connexion }}}
/* Objet : Test liaison Bluetooth en emission Nom sketch : phm_bluetooth_test.ino Infos sketch : Créé le 05 07 2014 par PHMARDUINO Commentaire : Ce sketch permet à l'arduino UNO d'envoyer en Bluetooth via le module HC06, celui-ci est preregle en usine avec les parametres serie suivant : 9600, N, 8, 1 */ int compteur = 0; // Compteur de messages envoyes unsigned long temps; // Mesure temps ecoule void setup() { Serial.begin(9600); //Demarrage liaison serie pinMode(13, OUTPUT); //La LED 13 est utilisee comme temoin de bon fonctionnement } void loop() { digitalWrite(13, HIGH); // Allumage de la LED 13 delay(200); // Temporisation de 200 ms digitalWrite(13, LOW); // Extinction de la LED 13 ++compteur // Incrementation compteur de message temps = millis(); // Envoi message via Bluetooth Serial.print("PHMARDUINO - Test du module Bluetooth HC06 - "); Serial.print("Compteur de messages : "); Serial.print(compteur); Serial.print(" - Temps en ms : "); Serial.println(temps); delay(1000); //Delai d une seconde }
/* Objet : Commandes AT Bluetooth Nom sketch : phm_bluetooth_at.ino Infos sketch : Créé le 06 07 2014 par PHMARDUINO Commentaire : Ce sketch permet à l'arduino UNO d'envoyer des commandes Bluetooth au HC-06 */ #include <SoftwareSerial.h> #define RxD 10 //Pin 10 pour RX #define TxD 11 //Pin 11 pour TX SoftwareSerial BTSerie(RxD,TxD); void setup() { Serial.begin(9600); delay(500); Serial.println("PHMARDUINO - Veuillez entrer une commande AT"); pinMode(RxD, INPUT); pinMode(TxD, OUTPUT); BTSerie.begin(9600); delay(1000); } void loop() { char caractereRecu; //Lecture message envoyé par le HC06 et ecriture sur le terminal serie if (BTSerie.available()) { caractereRecu = BTSerie.read(); Serial.print(caractereRecu); } // Lecture message envoye par le terminal serie et envoi au HC06 if (Serial.available()) { caractereRecu = Serial.read(); BTSerie.write(caractereRecu); } }
Nous reprenons dans cette réalisation le montage de mesure de température utilisant le capteur LM35 DZ. Mais cette fois-ci, au lieu d'afficher la température sous forme de texte dans la console Arduino, nous allons afficher la température instantanée dans la console Processing dans cet exemple puis sous forme graphique avec son évolution dans le temps grâce à Processing dans un l'exemple suivant.
/////////////////////////////////////////////////////////////////////////////////////////// // Objet : Mesure de temperature avec un LM35 DZ et envoi à Processing pour affichage // // Nom sketch Arduino : phm_lm35_processing.ino // // Auteur : PHM // // Date création : Le 24 juin 2011 // // Date dernière mise à jour : Le 28 octobre 2011 // /////////////////////////////////////////////////////////////////////////////////////////// //Déclaration et initialisation des variables int mesure=0; //Variable pour le stockage mesure retournée par le capteur int portana0 = 0; //Numéro du port analogique sur lequel la température est mesurée //Traitements initialisation void setup() { analogReference(INTERNAL); //Permet de fixer la temperature de refernce à 1,1 volt Serial.begin(9600); //initialisation de la liaison série à 9 600 bauds } //Traitements itératifs void loop() { mesure = analogRead(portana0); //Lecture de la valeur fournie par le capteur de température Serial.println (mesure); //Envoi mesure au PC par la liaison série pour affichage dans Processing delay(5000); //Attente de 5 secondes avant de faire une nouvelle mesure }
/////////////////////////////////////////////////////////////////////////////////////////// // Objet : Affichage temperature ambiante mesurée par un LM35 et envoyée par Arduino // // Nom skecth processing : phm_lm35_console.pde // // Auteur : PHM // // Date création : Le 24 juin 2011 // // Date dernière mise à jour : Le 27 octobre 2011 // // Commentaires : Utiliser avec un Arduino et un LM35 pour la capture de temperature // /////////////////////////////////////////////////////////////////////////////////////////// //Import de la librairie communication serie import processing.serial.*; //Initialisation des variables Serial monPort; //Déclatation port série pour la lecture des données envoyées par l'Arduino int mesure; //Mesure lue sur le port //Traitements d'initialisation void setup() { println(Serial.list()); // Affichage dans la console de la liste des ports serie du PC monPort = new Serial(this, "COM7", 9600); //Initialisation de la communicaiton port serie monPort.bufferUntil('\n'); //Attend la réception d'un fin de ligne pour généer un serialEvent() } //Traitements itératifs de lecture et affichage temperature void draw() { // pas de traitement car tout est réalisé dans la fonction serialEvent() } //Traitements à réception d'une fin de ligne void serialEvent (Serial monPort) { //Récupération sur le port série de la tension sous forme de chaine de caractères String tensionCar = monPort.readStringUntil('\n'); if (tensionCar != null) { // Suppression des blancs tensionCar = trim(tensionCar); // Conversion tensoin en caractères en décimal et calcul température int tensionNum = int(tensionCar); float temperature = 100 * tensionNum * 1.1 / 1024; println ("La temperature est de : " + temperature + " degrés"); } }
/////////////////////////////////////////////////////////////////////////////////////////// // Objet : Affichage temperature sous forme graphique // // Nom skecth : phm_lm35_graph.pde // // Auteur : PHM // // Date création : Le 29 aout 2011 // // Date dernière mise à jour : Le 28 octobre 2011 // /////////////////////////////////////////////////////////////////////////////////////////// //Import de la librairie communication serie import processing.serial.*; //Initialisation des variables Serial monPort; //Déclatation port série pour la lecture des données envoyées par l'Arduino int mesure; //Mesure lue sur le port //Initialisation des variables int temperature=25; //Temperature mesurée par l'Arduino int tempmini=34; //Temperature mini mesurée par l'Arduino int tempmax=12; //Temperature maxi mesurée par l'Arduino int j; //Indice de travail int k; //Indice de travail int x=0; //Abcisse int x0=0; //Abcisse précédente int y=0; //Ordonnée int y0; //Ordonnée précédente PImage thermometre; PFont police; //Traitements d'initialisation void setup() { //Initialisations port série println(Serial.list()); // Affichage dans la console de la liste des ports serie du PC monPort = new Serial(this, "COM7", 9600); //Initialisation de la communicaiton port serie monPort.bufferUntil('\n'); //Attend la réception d'un fin de ligne pour généer un serialEvent() //Initialisatiopns graphiques size (1000,610); background(#9FB84D); smooth(); //On active le lissage //Dessin des cadres ------------------------- stroke(0); strokeWeight(1); fill(230); rect (20,20,210,500); //Thermometre rect (20,525,210,65); //Textes rect (240,20,750,500); //Courbe historique //Dessin des titres ------------------------- fill(255,0,0); police = loadFont("SansSerif.italic-16.vlw"); textFont(police,16); text("Température instantanée", 35, 40); text("Historique température", 520, 40); thermometre = loadImage("thermometre.jpeg"); image(thermometre,290,525,65,65); fill(0,0,255); police = loadFont("TimesNewRomanPS-BoldItalicMT-50.vlw"); textFont(police,48); text("Suivi température", 420, 570); police = loadFont("Corbel-14.vlw"); textFont(police,14); //Dessin du thermomètre ----------------------- fill(50); noStroke(); rect(100,70,20,420); ellipse(110, 490, 40, 40); //Dessin du réservoir ellipse(110, 70, 20, 20); fill(#0BB305); ellipse(110, 490, 30, 30); //Gradations et textes tous les 5 degrés fill(50); strokeWeight(2); stroke(50); //à gauche for (int i = 0; i < 11; i++) { j=i*40; k=i*5; line(90, 475-j, 100,475-j); text(k+" °C", 50, 475-j); } //à droite for (int i = 0; i < 11; i++) { j=i*40; k=i*5; line(120, 475-j, 130,475-j); text(k+" °C", 140, 475-j); } //Gradations fines des degrés //à gauche strokeWeight(1); stroke(50); for (int i = 0; i < 50; i++) { j=i*8; line(95, 475-j, 100,475-j); } //à droite strokeWeight(1); stroke(50); for (int i = 0; i < 50; i++) { j=i*8; line(120, 475-j, 125,475-j); } //Affichage courbe ----------------------- //Tracé des axes fill(0,0,255); stroke(#0650E4); strokeWeight(2); //horizontal line (290,475,960,475); triangle(960, 475, 950, 480, 950, 470); text("Température (°C)", 250, 40); //vertical line (290,475,290,50); triangle(290, 50, 295, 60, 285, 60); text("Tempts (mn)", 910, 510); //Gradations et textes tous les 5 degrés fill(0,0,255); strokeWeight(2); stroke(#0650E4); for (int i = 0; i < 11; i++) { j=i*40; k=i*5; line(285, 475-j, 290,475-j); text(k, 260, 480-j); } //Gradations fines des degrés strokeWeight(1); stroke(#0650E4); for (int i = 0; i < 50; i++) { j=i*8; line(285, 475-j, 290,475-j); } //Gradations des minutes strokeWeight(2); for (int i = 0; i < 11; i++) { j=i*60; line(290+j, 475, 290+j,480); text(i, 295+j, 490); } } //Traitements itératifs void draw() { // Pas de traitement car tout est réalisé dans la fonction serialEvent() } //Traitements à réception d'une fin de ligne void serialEvent (Serial monPort) { //Récupération sur le port série de la tension sous forme de chaine de caractères String tensionCar = monPort.readStringUntil('\n'); if (tensionCar != null) { tensionCar = trim(tensionCar); // Suppression des blancs int tensionNum = int(tensionCar); // Conversion tensoin en caractères en décimal et calcul température float temperature = 100 * tensionNum * 1.1 / 1024; int tempInt = int(temperature); println ("La temperature est de : " + temperature + " degrés : " + tempInt); //Dessin graphe avec temperature actuelle ----------------------- stroke (0,255,0); strokeWeight(1); //dessin du nouveau point sur la courbe x0=x; // Mémorisation abscisse point précédent x=x+5; // L'Arduino envoie une nouvelle mesure de température toutes les 5 secondes if (x >600) {x=5;} y0=y; // Mémorisation ordonnée point précédent y = tempInt*8; // Un degré correpond à 8 points sur les ordonnées if (y > tempmax*8) {tempmax = y/8;} //Mise à jour temp max if (y < tempmini*8) {tempmini = y/8;} //Mise à jour temp min if (x == 5) { //Si on rédémarre une nouvelle courbe noStroke(); fill(230); rect(291,65,655,410); //Effacement courbe précédente point(x+287,475-y); } else { line(x0+287,475-y0,x+286,475-y); } //Dessin thermometre avec temperature actuelle ----------------------- temperature=y/8; noStroke(); fill(#0BB305); rect(105,475-temperature*8,10,temperature*8+5); fill(#08F500); rect(110,480-temperature*8,3,temperature*8-5); //Affichage des températures ---------------- //Dessin des cadres ------------------------- stroke(0); strokeWeight(1); fill(230); rect (20,525,210,65); //Dessin du thermomètre ----------------------- fill(50); noStroke(); rect(100,70,20,420); ellipse(110, 490, 40, 40); // Dessin du réservoir ellipse(110, 70, 20, 20); fill(#0BB305); ellipse(110, 490, 30, 30); //Dessin temperature actuelle ----------------------- noStroke(); fill(#0BB305); rect(105,475-temperature*8,10,temperature*8+5); fill(#08F500); rect(110,480-temperature*8,3,temperature*8-5); noStroke(); fill(230); rect(160,500,70,20); //effacement texte précédent heure rect(25,500,60,20); //effacement texte précédent date fill(0,0,255); text(hour()+" : "+minute()+" : "+second(), 160, 514); text(day()+" / "+month()+" / "+year(), 25, 514); //Textes fill(0,0,255); text("Température actuelle :", 40, 540); text("Température mini :", 40, 560); text("Température max :", 40, 580); textAlign(RIGHT); fill(#0BB305); text(temperature+" °C", 220, 540); fill(0,0,255); text(tempmini+" °C", 220, 560); fill(255,0,0); text(tempmax+" °C", 220, 580); textAlign(LEFT); } }
Cette réalisation permet de commander un chenillard réalisé à l'aide de LEDs connectées à l'Arduino avec un interface graphique réalisé
à l'aide de Processing.
Cet interface graphique permet de démarrer/arrêter le chenillard, de modifier la vitesse de défilement et de choisir le sens de défilement.
La trame définie pour les communications de Processing vers l'Arduino est : #PARAM1:PARAM2$ (# : et $ pour délimiter).
A compléter
A compléter
Site | Thèmes principaux | Description |
---|---|---|
http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.HomePage | Général | Traduction partielle en français du site de référence en anglais |
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ARDUINO | Général | Site très complet avec plus d'une centaine d'exemples |
http://www.jlectronique.org/index.htm | Ethernet | Quelques exemples sur les entrées/sorties analogiques et les accès à internet via un shield Ethernet |
A compléter
A compléter
N° Patte | Désignation | Description |
---|---|---|
1 | GND | Masse |
2 | TRIG | Déclenchement |
3 | OUT | Sortie |
4 | RESET | Remise à zéro |
5 | CONT | Accès à la référence interne (2/3 Alimentation) |
6 | THRES | Signale la fin de la temporisation lorsque la tension dépasse 2/3 de l'alimentation |
7 | DISCH | Décharge |
8 | VCC | Alimentation comprise en tre 5 et 15 Volts |
Fréquence | Utilisation |
---|---|
433,9 MHz | ???? |
2,7 GHz | ???? |