Bonjour à toutes et tous,
J'ai enfin assez d'avancement à mon goût pour vous présenter une de mes récentes réalisations à base d'arduino.
En combinant tout ce que j'ai appris ces dernières années en électronique et en programmation, j'ai voulu créer un vrai objet fini qui aurait une utilité et serait simple d'utilisation.
Il s'agit d'une petite station météo portative, à poser idéalement sur le balcon près des plantes, et qui affiche ses données sur l'arduino ioT cloud. Elle est constitué d'une arduino 33IOT (pour la communication wifi) reliée à différents capteurs environnementaux (en digital et I2C) et alimentée par une batterie Li-ion 3,7V.
Le module en lui même est très simple, et contient juste ce qu'il faut de soudures un peu délicate au moment du montage sur plaque (mais c'est surtout que je m'étais lancé le défi de faire le plus compact possible en prévision du remplacement de l'arduino 33IOT par un module Xiao ESP32...).
Le principe du circuit électrique est le suivant:
notez que les 2 modules en I2C ne sont pas connectés: j'attends la livraison pour demain soir...
//
J'avais bien préparé mon histoire avant de monter les composants et j'ai notamment utilisé ce dessins pour le repérage physique de mes composants avant de sortir le fer à souder:
Avec les proportions en tête, j'ai pu ajuster mes pattes de résistances, et à part la résistance 1MOhm, tout est glissé/soudé entre les pattes de la carte arduino.
//
Coté alimentation, j'utilise plusieurs combos batterie Li-ion - chargeur USB - convertisseur de courant. Depuis peu je prends l'habitude d'y connecter un fil supplémentaire pour mesurer le voltage de la carte (il sera connecté à la pin A3 dans la station météo) et de raccorder les embouts avec des sockets (des headers femelles) plutôt que des embouts mâles.
ici un montage (pas encore soudé sur la photo) sur batterie LiPo 250mAh de récupération. Environ 5 à 6h d'espérance de vie (voir plus bas).
un autre plus récent, batterie 18650 Li-ion 3,7V 3500mAh (pile de cigarette électronique). Va sans doute tenir 24h avant de s'éteindre dans la même configuration que la batterie LiPo.
//
Voici l'aspect final (tout du moins en attendant une petite boite et les 2 capteurs en I2C), monté sur sa batterie, et posé dans un coin vers la fenêtre depuis 2 jours pour tester:
- la résistance au chat;
- l'autonomie des différentes batteries que j'ai sous la main (et là c'était la bonne idée de garder les connexions par Socket/Pin plutôt que soudées à la carte);
- l'enregistrement des datas et leur transmission à l'arduino cloud;
- le domaine de valeur que me renvoie la LDR.
C'est moche et ça marche? Mission accomplie

coté code, je suis pas allé chercher très loin, j'ai même testé plutôt la voie "tutorial" sur le cloud:
- j'avais déjà mis à jour ma arduino 33IOT sur le cloud, et depuis j'avais passé plusieurs sketchs différents dessus (j'entends sans lien avec le wifi ou le cloud);
- j'ai créé 2 "things" sur le cloud, à lire toutes les 15minutes, c'est à dire les 2 variables que je souhaite remonter pour l'instant: la valeur de batterie lue sur A3 et la luminosité lue sur la LDR connectée à A7;
- j'obtient coté cloud les outils graphiques pour visualiser mes données, et coté sketch, un squelette de code qui contient les fonctions nécessaires à la communication wifi ET la liste des fameuses "things". Même pas besoin de les instancier, au contraire, être vigilant sur l'orthographe et on les manipules dans le code de façon transparente.
//
ici la vue coté arduino ioT cloud:
et le sketch correspondant:
/*
Sketch generated by the Arduino IoT Cloud Thing "Untitled"
https://create.arduino.cc/cloud/things/235ba9d1-5132-45b3-8e0c-9ba0a7ffcb7f
Arduino IoT Cloud Variables description
The following variables are automatically generated and updated when changes are made to the Thing
CloudElectricPotential battery_value;
int lDR_value;
Variables which are marked as READ/WRITE in the Cloud Thing will also have functions
which are called when their values are changed from the Dashboard.
These functions are generated with the Thing and added at the end of this sketch.
*/
#include "thingProperties.h"
const int Pin_Battery = A3;
//const int Pin_SDA = A4;
//const int Pin_SCL = A5;
const int Pin_power_LDR = A6;
const int Pin_read_LDR = A7;
void setup() {
pinMode(Pin_Battery, INPUT);
pinMode(Pin_power_LDR, OUTPUT);
pinMode(Pin_read_LDR, INPUT);
// Initialize serial and wait for port to open:
Serial.begin(115200);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
// Your code here
delay(900);
READ_BATTERIE();
// DISPLAY_BATTERIE();
READ_LDR();
// DISPLAY_LDR();
}
void READ_BATTERIE() {
analogReference(AR_INTERNAL1V0);
delay(5);
uint16_t stamp = analogRead(Pin_Battery);
float temp = (float)analogRead(Pin_Battery)/165;
battery_value = temp;
//for (int i = 0; i < 10; i++) {
// ARCHIVE_BATTERIE[i] = analogRead(Pin_Battery);
// delay(1);
//}
}
void READ_LDR() {
analogReference(AR_DEFAULT);
delay(5);
READ_1_LDR();
lDR_value = READ_1_LDR();
// for (int i = 0; i < 10; i++) {
//
// ARCHIVE_LDR[i] = READ_1_LDR();
//}
}
uint16_t READ_1_LDR() {
digitalWrite(Pin_power_LDR, HIGH);
delay(2);
uint16_t stamp = analogRead(Pin_read_LDR);
digitalWrite(Pin_power_LDR, LOW);
return stamp;
}
J'ai pas hésité à faire un code très "scolaire" mais l'un dans l'autre, j'avais surtout besoin de fonctions très basiques sans interférer avec le fonctionnement du cloud.
La seule subtilité vient de la bascule de analogReference()
entre la valeur par défaut (3,3V) pour la lecture de la LDR et la référence (1,0V) pour la lecture de la tension de la batterie. Une question de composants à souder que j'ai préféré résoudre par la programmation...
Voilà c'est tout!
Et il me reste plein de trucs à faire:
- souder et faire parler les 2 modules que j'attends;
- changer le code pour jouer sur l'alimentation de la carte (pour le moment, elle tourne "à fond à vide", j'en profite pour évaluer mes batteries);
J'attends également un panneau solaire et son module pour recharger une batterie. Je vais sans doute m'en bricoler une unité d'alimentation que je pourrais substituer à ma batterie actuelle.
Si la configuration me satisfait, j'envisage carrément des modules complémentaires comme la surveillance de la terre et une station d'arrosage!