Ce soir c'est samedi, et samedi soir, c'est arduino !
Donc je comptais m'attaquer à l'utilisation d'un condensateur. Pour commencer je voudrais juste le charger, et le decharger dans une led.
Ca doit paraitre évident pour certains, mais j'ai pas vraiment d'idée pour cabler tout ça, surtout que je redoute vraiment la décharge dans mes doigts..
Pour info, j'ai deux condos polarisés 25V, 47µF.
Donc si quelqu'un connait les "précautions d'utilisations" et autre chose sur ce sujet je suis preneur !
Un condensateur sur lequel est écrit 25 V, ça veut dire que si tu lui mets Plus, il y a de grandes chances qu'il s'ouvre comme une banane trop mûre en crachant son électrolyte. Plus tu dépasse la tension max, et plus le mûrissement de la banane est violent (explosion).
Donc, niveau tension, on se garde une marge: Je dirai 15 V pour 25 V (les experts rectifierons)
Pour la capacité: Le temps de décharge est régi par le constante de temps R C.
Plus simplement: plus la résistance dans laquelle tu décharge le condo est faible et plus ça dure moins longtemps.
Ex: Une led 20 mA; 2V R= U/I -> 100 Ohms et 100 * 4710^-6 = 47* 10^-4 seconde. Pour voir quelque chose il faudrait prendre un 2000µF.
Mais attention: Ton condo est chargé à 15 ou 20 Volts, et c'est donc 20 V que tu va balancer dans la led, ça va pas durer, mais c'est pas dit qu'elle ne va pas mourute.
Pour ce qui est de tes doigts, avec 25 V aucun risques.
Par contre si tu prends un condo de four micro ondes et que tu le charge à 200 V (continus hein ) et bien tu te prends une bonne castagne ; mais si tu n'est pas cardiaque, et ben tu ne meurs pas. Mais vaut mieux pas essayer.
Mais tu peux prendre un 2000µF et le charger sous 2 V; et là plus de risque pour la led.
Bienvenue dans le monde de l'électronique mais je pense qu'il vaut mieux commencer par acquérir quelques bases.
Il y a un site super dans bien des domaines, il est très connu par son ancien nom : le site du zéro qui est accessible à des débutants totaux.
Il a changé de nom et s'appelle désormais openclassroom.
Il existe deux cours pour l'électronique dont un adapté spécialement à l'Arduino. http://fr.openclassrooms.com/sciences/electronique/cours
Juste un point au sujet de tes condensateurs : les condensateurs de forte valeur (>1 µF) sont généralement des "chimiques". Ces condensateurs ont une tension de service qu'il ne faut jamais dépasser et même comme te l'a dit Carolyne prendre une marge.
Le risque est qu'ils explosent et la fumée blanche dégagée est assez désagréable mais tu ne risque rien, c'est même une blague de potache assez répandue que de changer en douce un condensateur par un autre de très faible tension.
Et surtout nombre de condensateurs sont polarisés. Il faut absolument respecter le sens de branchement.
Il importe également de limiter le courant de charge et de décharge.
Pour ma part je tenterais le montage suivant :
R1 sert de limitation du courant de charge quand 3 passe à HIGH. je conseille de ne pas descendre en dessous de 270 ohms. Plus la valeur sera élevée, plus le condensateur va mettre du temps pour se charger.
R2 permet de limiter le courant maximal dans la LED. je propose 1 kilo ohm. Pour la LED privilégier une rouge dont le seuil de conduction est le plus faible. Je n'ai pas pris le temps de tester ce montage, mais j'ai l'intention d'utiliser pour C un 1000µF 35V disponible ici.
Voici comment j'envisage le programme :
Pour charger le condensateur 4 passe HIGH, la LED est ainsi isolée.
3 Passe alors à HIGH et la charge commence. Au début la tension augmente assez rapidement aux bornes de C, mais plus elle s'approche de 5Vcc plus le courant de charge diminue. En fait il faut un temps infini pour charger à 100%.
L'entrée analogique A0 va permettre de déterminer quand nous considèrerons que C est chargé. Je pense choisir comme seuil 80% de la tension.
Dès que le condensateur est chargé, on passe à la décharge. 3 est alors configurée en entrée pour ne pas continuer à fournir du courant. 4 passe à LOW et le courant traverse la LED. A0 continue à mesurer la tension aux bornes du condensateur. Quand elle se réduit à 25% de la tension Vcc, je considère que le condensateur est déchargé. On repasse 3 en sortie et l'on recommence un cycle de charge.
Bref, toute cette élucubration doit encore être testée en réel pour en trouver les failles, mais c'est déjà une piste pour commencer.
Coucou c'est remoi-remoi !
Bon, j'ai testé ce montage qui fonctionne du premier coup.
Il est préférable de remplacer R1 par une valeur plus élevée pour augmenter la constante de temps.
2,7 Khom me semble un bon compromis.
Voici le programme utilisé :
/* Test de charge décharge d'un condensateur */
const byte Entree_mesuree = 0; // Entrée analogique 0 utilisée.
const byte Sortie_CHARGE = 3; // Broche 3 utilisée.
const byte Pilotage_LED = 4; // Broche 3 utilisée.
const byte LED_Arduino = 13; // Broche 3 utilisée.
float CNA; // Mesure analogique retournée par le CNA.
// Attention : Déclarer en float et non en byte, car
// les décimales affichées seraient des zéros.
float Tension_mesuree; // Variable pour calculer U.
// float pour avoir U avec deux chiffres décimaux.
void setup() {Serial.begin(19200);
pinMode(Sortie_CHARGE, INPUT);
pinMode(Pilotage_LED, OUTPUT);
pinMode(LED_Arduino, OUTPUT);}
void loop() {
//============== CHARGE DU CONDENSATEUR ==============
digitalWrite(Pilotage_LED, HIGH); // Isoler la LED de l'U.C.
pinMode(Sortie_CHARGE, OUTPUT);
digitalWrite(Sortie_CHARGE, HIGH); // Début de la charge.
digitalWrite(LED_Arduino, HIGH); // Indiquer la charge.
do {CNA = analogRead(Entree_mesuree);
Tension_mesuree = CNA * 5 / 1023;
// Pour 5 Vcc sur l'entrée le CNA retourne 1023.
Serial.print("Tension de charge : ");
Serial.print(Tension_mesuree); Serial.println("Vcc.");
delay(200); }
while (Tension_mesuree < 4.9);
//============== DÉCHARGE DU CONDENSATEUR ==============
pinMode(Sortie_CHARGE, INPUT);
digitalWrite(Pilotage_LED, LOW); // Décharger C dans la LED.
digitalWrite(LED_Arduino, LOW); // Indiquer la décharge.
do {CNA = analogRead(Entree_mesuree);
Tension_mesuree = CNA * 5 / 1023;
Serial.print(" Tension de decharge : ");
Serial.print(Tension_mesuree); Serial.println("Vcc.");
delay(200); }
while (Tension_mesuree > 1.8 );
La liaison série est utilisée comme un voltmètre placé aux bornes du condensateur.
Conformément aux prévisions, quand la charge est estimée complète, on passe à la décharge. La LED s'illumine brusquement puis sa clarté va en diminuant.
J'ai choisi le seuil de décharge pour tenir compte de la tension de conduction de la LED.
Pour le seuil de détection de pleine charge, plus vous allez définir une tension proche de 5Vcc plus la durée sera longue. Par exemple testez avec 4.95, la durée augmente de façon significative.
Enfin, c'est de la PHYSIQUE "de base". Vous pouvez donc procéder par calcul pour évaluer la constante de temps en fonction de la valeur de C et de R1, mais attention : la charge ne part pas de zéro ce qui fausse les calculs. Les formules de base ne permettent que d'évaluer grossièrement le résultat qui sera obtenu.
Amusez-vous bien avec ce petit programme.
Si tu clique sur le "#" de la barre d'outils, et que tu mets ton code entre les balises générées par le dit "#".
Et ban ça fera plus "pro"......preuuu.
float CNA; // Mesure analogique retournée par le CNA.
// Attention : Déclarer en float et non en byte, car
// les décimales affichées seraient des zéros.
float Tension_mesuree; // Variable pour calculer U.
// float pour avoir U avec deux chiffres décimaux.
......
void loop() {
.....
do {CNA = analogRead(Entree_mesuree);
Tension_mesuree = CNA * 5 / 1023;
// Pour 5 Vcc sur l'entrée le CNA retourne 1023.
analogRead retourne un int donc CNA doit être un int
Par contre dans le calcul de Tension_mesuree il faut mettre les constantes en flotant sinon le rapport 5/1023 est lui-même un int.
Il faut l'écrire comme ça:
intCNA; // Mesure analogique retournée par le CNA.
float Tension_mesuree; // Variable pour calculer U.
// float pour avoir U avec deux chiffres décimaux.
......
void loop() {
.....
do {CNA = analogRead(Entree_mesuree);
Tension_mesuree = (float)CNA * 5.0 / 1023.0; // Les 2 constantes avec un point décimal pour indiquer que ce sont des flottants
// Pour 5 Vcc sur l'entrée le CNA retourne 1023.
Merci Carolyne pour cette information relative aux délimiteurs fonctionnels #, j'ai édité mon "post" en ce sens et effectivement c'est facile à faire et pour les lecteurs c'est plus agréable à lire.
Merci fdufnews pour tes remarques concernant l'optimisation du code. Je ne trifouille Arduino que depuis environ deux mois et je n'avais jamais programmé en C. J'ai encore pas mal de galères avec la syntaxe et les types de données, d'autant plus que contrairement à Pascal, j'observe un certain nombre de "tolérances" et "incohérances" qui me compliquent un peu la "vie".
Ceci dit, Arduino est vraiment sympa et en deux mois j'ai déjà réalisé plein de programmes qui fonctionnent. (Horloge calendrier sur afficher LCD, petit écran photo graphique couleur interactif, mesure de distance avec capteurs ultrasons, détecteur de présence à infrarouges, boussole magnétique statique etc) Avec les modules que l'on trouve en ligne c'est presque un jeu d'enfant.