Bonjour,
Je tente de réaliser un chargeur USB manuel à l'aide d'un petit moteur qui fait office de générateur lorsqu'il est actionné via une manivelle.
Le générateur charge une batterie 12V à l'aide d'un régulateur de charge photovoltaique.
Les consommateurs sont chargés via des convertisseurs de tension (max 30V => 5V). Les convertisseur de tension sont alimentés par la batterie.
Dans ce cas de figure, si la batterie est chargée, dès qu'on branche un équipement à charger, il se charge automatiquement.
Je voudrais que la charge soit rendue possible UNIQUEMENT si le générateur est actionné, autrement dit si quelqu'un fait tourner la manivelle.
Pour rendre l'utilisation de la manivelle obligatoire, je pensais utiliser un ensemble relais + arduino afin d'ouvrir et de fermer le circuit de charge.
Le déclencheur serait la tension mesurée aux bornes du générateur : si on detecte une tension on ferme le circuit pour rendre la charge opérationnelle, si pas de tension on ouvre le circuit afin d'interdire la charge.
Afin d'obliger l'utilisateur à actionner la manivelle , je voudrais temporiser le relais ainsi :
a - ne pas ouvrir le circuit de charge trop rapidement : il faudrait actionner le générateur au moins 30 sec. pour commencer à charger
b - ne pas fermer le circuit de charge trop rapidement afin d'éviter les coupures trop fréquentes : si quelqu'un "mouline" trop lentement donc tension en dessous du seuil, si on change de personne pour actionner le générateur, ce délai pourrait être de 10 sec par exemple ...)
J'arrive aujourd'hui à lire la tension via l'arduino et à afficher les données via le moniteur série grace à ce tutoriel, les valeurs sont cohérentes au regard des résistance utilisées pour le pont diviseur, voici le code fonctionnel :
Je voudrais maintenant mettre en oeuvre les points a et b pour activer ou fermer une sortie digitale (la 13 par exemple) en fonction de la tension mesurée et d'un délai mais je ne sais pas comment structurer le programme, je m'explique :Code:// Fonction setup(), appelée au démarrage de la carte Arduino void setup() { // Initialise la communication avec le PC Serial.begin(9600); } // Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée void loop() { // Mesure la tension sur la broche A0 int valeur = analogRead(A0); // Transforme la mesure (nombre entier) en tension via un produit en croix float tension = valeur * (5.0 / 1023.0); // Envoi la mesure au PC pour affichage et attends 250ms Serial.println(tension); delay(250); }
- Par défaut le PIN 13 à l'état bas
- Le PIN 13 passe à l'état haut SI la tension mesurée est supérieure à un seuil déterminé (disons 0.5) PENDANT plus de 15 secondes.
- Lle PIN 13 repasse à l'état bas si la tension mesurée est inférieure au seuil (le même 0.5) pendant plus de 10 secondes.
J'ai modifié le programme existant en ajoutant les constantes et le pinMode mais je coince sur la structure.
Je présume qu'il faut utiliser un while et un delay, peut-être un case mais ne maîtrisant pas la programmation je suis coincé :
Voici une photo du montage avec le pont diviseur, sans la batterie :Code:// Constantes const int delayOn = 30; // delai avant d'ouvrir le circuit en cas d'activité - en seconde const int delayOff = 10; // delai avant de fermer le circuit en cas d'inactivité - en seconde const int seuil = 0.5; // valeur du seuil, la je m'arrange en fonction du pont diviseur const int switch = 13; // le pin attachée au switch // Fonction setup(), appelée au démarrage de la carte Arduino void setup() { // Initialise la communication avec le PC Serial.begin(9600); pinMode(switch, OUTPUT); // le pin attachée au switch en OUTPUT } // Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée void loop() { // Mesure la tension sur la broche A0 int valeur = analogRead(A0); // Transforme la mesure (nombre entier) en tension via un produit en croix float tension = valeur * (5.0 / 1023.0); // Envoi la mesure au PC pour affichage et attends 250ms Serial.println(tension); delay(250); }
Merci pour votre aide.
-----