Projet

Général

Profil

Réveil Arduino Éloïse

Histoire

Éloïse, élève de 3e au collège Alfred Mauguin, est venue au Fablab de sa propre initiative pour apprendre l'électronique et la programmation, au travers de son projet personnel de Réveil Arduino. André Bougerolles qui l'accompagne dans son projet, et utilisait le Redmine pour échanger des fichiers avec Éloïse et lui laisser des instructions, des exercices et des corrections.
Ceci n'est qu'une mise en forme de leur travail.

Le projet

L'objectif est de fabriquer une horloge/réveil à base d'Arduino, d'un module RTC, d'un système d'affichage, ... qui servira de base pour d'autres projets plus ambitieux (jardin connecté ...), et qui permet à Éloïse d'apprendre l'électronique et la programmation. Ce projet permet aussi de découvrir divers composants très utilisés dans les montages Arduino.

Les documents

Tous les documents de ce projet sont sauvegardés ici . On y retrouve les programmes d'exercices au format .INO, des bibliothèques et des fiches techniques.

Suivi Éloïse

09/10/2019

Ajouté au redmine :
  • ce fichier de suivi
  • les fonctionnalités de la bibliothèque RTC
  • un exercice sur RTC à temier
  • l'exercice terminé
Consignes pour Éloïse : terminer l'exercice RTC :
  • ajouter les variables manquantes (mois, année...)
  • attribuer les valeurs aux variables
  • afficher les valeurs à l'écran

Pour mémoire : utiliser les instructions déjà vues (serial.print, serial.begin)

On peut faire copier/coller

08/01/2020

Réaliser un détecteur d'humidité de sol.
Utiliser la fiche guide "détecteur humidité sol"

15/01/2020

Faire fonctionner un servomoteur SG90 en utilisant la fiche.
Assembler sur la même plaque de test les mesures de température, humidité air, humidité terre, mise en marche servomoteur, allumage diodes.

Utilisation de la bibliothèque RTClib.h

Mettre dans les déclarations du programme Arduino :

#include <RTClib.h>
#include <Wire.h>
RTC_DS1307 RTC;

Les fonctions de la bibliothèque :
  • Remettre à l'heure le circuit avec l'horloge du micro ordinateur, à mettre en général dans le setup :
    RTC.adjust(DateTime(__DATE__, __TIME__));
  • Mise à jour manuelle en entrant les valeurs :
    RTC.adjust(DateTime(2016,6,13,14,35,0));
  • Lancer la fonction de lecture des registres (heure, minute, seconde, année, mois) et fige les données (important)
    DateTime now = RTC.now();
  • Autres fonctions :
now.year()
donne l'année
now.month()
donne le mois
now.day()
donne le jour
now.hour()
donne l'heure
now.minute()
donne les minutes
now.second()
donne les secondes
now.dayOfWeek()
jour de la semaine, 0 = dimanche, 1 = lundi ...

Capteur d'humidité au sol avec Arduino

L'objectif est de mesurer le taux d'humidité dans le sol d'une plantation, d'interpréter la mesure, et de décider en fonction du résultat de la mesure : arroser en commandant un robinet ou une vanne ou ne pas arroser.
Le montage peut s'intégrer dans un système plus complexe qui associe mesure de température, d'humidité de l'air, mesure de l'éclairage ambiant ....

Le principe : le détecteur est alimenté en 0v-5v et le niveau d'humidité se mesure sur la broche S reliée à une entrée analogique de l'Arduino.

void setup() {
  Serial.begin(9600); // open serial port, set the baud rate as 9600 bps
}
void loop() {
  int val;
  val = analogRead(0); //connect sensor to Analog 0
  Serial.println(val); //print the value to serial port
  delay(100);
}

Utilisation du servomoteur SG90 avec l'Arduino

Les servomoteurs sont des moteurs un peu particuliers, qui peuvent tourner avec une liberté d'environ 180° et garder de manière relativement précise l'angle de rotation que l'on souhaite obtenir. On utilise des servomoteurs couramment en modélisme pour contrôler des systèmes mécaniques (gouverne d'avion, accélérateur de moteur thermique, etc.). Les servomoteurs sont aussi couramment utilisés en robotique pour faire des mini-robots, des actionneurs ou des indicateurs rotatifs.

Les caractéristiques du SG90 sont les suivantes :

  • Dimensions : 22 x 11.5 x 27 mm.
  • Poids : 9 gr.
  • Tension d’alimentation : 4.8v à 6v.
  • Vitesse : 0.12 s / 60° sous 4.8v.
  • Couple : 1.2 Kg / cm sous 4.8v.
  • Amplitude : de 0 à 180°.

Le servomoteur est équipé d’une prise de type Graupner à 3 fils.

La correspondance des fils est la suivante :

Marron Masse
Rouge +5V
Orange Commande

Utilisation

On utilise la bibliothèque Servo.h :
#include <Servo.h>
Servo monservo;
crée l’objet pour contrôler le servomoteur , on peut créer plusieurs objets servo1, servo2, etc.
monservo.attach(9);
utilise la broche 9 pour le contrôle du servomoteur
monservo.write(0);
positionne le servomoteur à `l'angle 0°
monservo.write(position);
positionne le servomoteur à "position" qui peut varier de 0° à 180°

Exemple de programme :

#include <Servo.h>

Servo monservo; //crée lobjet pour contrôler le servomoteur

void setup()
{
  monservo.attach(9); //utilise la broche 9 pour le contrôle du servomoteur
  monservo.write(0); //positionne le servomoteur à 0°
}

void loop()
{
  monservo.write(0);
  delay(1000);
  monservo.write(70);
  delay(1000);
  monservo.write(150);
  delay(1000);
}

Bibliothèque LiquidCrystal_I2C

Pour utiliser les afficheurs cristaux liquides connectés en I2C.

Initialisation

#include <Wire.h>
appel de la bibliothèque Wire.h pour communiquer en I2C
#include <LiquidCrystal_I2C.h>
pour utiliser la bibliothèque
LiquidCrystal_I2C lcd(0x27,16,2);
règle l'adresse du LCD à 0x27 pour 16 caractères et 2 lignes d'affichage

Les commandes de la fonction

lcd.begin(); et/ou lcd.init();
Initialisation de l'écran LCD, doit être faite en 1er
lcd.backlight();
allumer le rétro-éclairage
lcd.clear();
effacer l'écran
lcd.write(blablabla);
écrire à l'écran "blablabla"
lcd.setCursor(x, y);
positionner le curseur à la colonne x et à la ligne y, x = 0 à 15 et y = 0 à 1
lcd.home();
le prochain caractère sera affiché à la première position de l'écran
lcd.blink();
faire clignoter le curseur indicateur
lcd.noBlink();
arrêter le clignotement du curseur
lcd.noCursor();
cacher le curseur
lcd.cursor();
montrer le curseur
lcd.noDisplay();
masquer tous les caractères à l'écran
lcd.display();
montrer les caractères à l'écran après la commande précédente
lcd.leftToRight();
écrire de gauche à droite
lcd.rightToLeft();
écrire de droite à gauche