Étant novice en programmation sur Arduino et ayant un projet pour le bac à la fin de l'année, j'aurai besoin de quelques conseils ! J'ai lu les cours proposés sur le site mais je n'arrive pas à tout saisir.
Alors mon problème est le suivant : Faire que l'arduino envoie sur une PIN une tension de 5 Volts qui sera relié à un Transistor pour le faire saturer. Le transistor en question sert pour une gâche électrique afin de "lâcher" une impulsion pour permettre l'ouverture ( ou la fermeture) de celle-ci. L'impulsion électrique sera envoyé lors que 5V sera envoyé sur une autre PIN. (Si ce n'est pas assez clair merci de me poser d'autres questions)
J'ai essayé de m'inspirer d'un programme basique pour un moteur DC le fonctionnement me semble être le même, envoyer une tension de 5v lorsque l'on presse un bouton poussoir
#define transistor 6
int on = false;
void setup(){
pinMode(transistor, OUTPUT);
}
void loop(){
if (analogRead(A2) > 1000 && on == false) {
digitalWrite(transistor, HIGH);
on = true;
}
else if (analogRead(A2) > 1000) {
digitalWrite(transistor, LOW);
on = false;
}
delay(250);
}
J'ai à ma disposition le matériel suivant :
Carte Arduino Uno
Transistor 2n2222
Boutons poussoirs
Différentes Résistances allant de 100 à 1M ohm
Et si il manque du matériel je peux facilement m'en procurer
Ta demande n'est pas très claire. Tu veux envoyer une impulsion quand l'entrée passe à 5V? ou tu veux que l'impulsion soit tout le temps que l'entrée est à 5 V?
J'ai peur que le 2N2222 soit un peut juste pour commander une gache électrique. Ne pas oublier une diode de roue libre aux bornes de la gache.
Pour compléter le post de kamill, ton code va faire "une impulsion" de 5V sur le transistor tant que l'entrée analogique A2 est à environ 5V (voir la description ici il faut faire une équation proportionnelle pour connaitre la valeur exacte. Sans autre précision disons que 5V = 1024). Cette impulsion sera très brève car la variable "on" va changer d'état et la première condition ne sera plus respectée.
Ce que tu souhaite faire c'est de mettre à l'état logique haut la sortie 6 ou autre qui va commander un transistor quand une entrée numérique ??? reçoit une un signal logique lui aussi haut.
Je partirais comme aide du proramme : Button (voir exemples) qui allume une LED quand on appuie sur un bouton poussoir, dans ton cas remplace la commande la de LED par celle du transistor, qui doit etre mieux dimensionné.
@+
Merci pour votre aide, alors oui je veux envoyer une impulsion de 5 volt sur le transistor lorsque au préalable l'arduino reçoit 5v sur une des pins, en l’occurrence la pin 6. Le courant qui traverse le transistor est de 400 mA, j'ai effectué des tests le transistor ne "saute" pas mais il change de couleur (Transistor avec boitier en métal). J'aimerai que le délai de l'impulsion soit d'environ 15s (le temps pour une personne d'ouvrir une porte et pour la fermer). Hameau je vais de ce pas tester ton idée, elle m'a l'air faisable et plus facile que ce que j'avais en tête.
Rtra:
Le courant qui traverse le transistor est de 400 mA, j'ai effectué des tests le transistor ne "saute" pas mais il change de couleur (Transistor avec boitier en métal).
C'est pas bon signe.
J'en chercherais un légèrement plus costaud à ta place.
Comme l'a dit hameau, pour lire une entrée logique il faut utiliser digitalRead().
Tu peux aussi utiliser analogRead, mais ce n'est pas utile et surtout il faut baisser le seuil parce qu'avec un seuil de 1000, compte tenu des tolérances d'alimentation, il il y a des chances que tu ne l'atteigne jamais.
Ensuite il te suffit de commander la gache, d'attendre 15s et de la relacher.
Si tu n'as rien d'autre à faire, le programme est très simple
Si tu as d'autre choses à faire pendant la commande de la gache voir l'utilisation de millis().
Pour le transistor, vois plutôt pour l'utilisation d'un TIP120 ou équivalent.
J'ai comme l'impression qu'il n'y a pas résistance dans la base du transistor, ni de diode de roue libre pour le protéger. Une gâche électrique c'est un bobinage comme un relai.
Un 2N2222, même si ce n'est pas le modèle le plus approprié devrait suporter un courant de 400 mA en étant CORRECTEMENT utilisé.
Mais maintenant qu'il a subit les outrages de passer par les couleurs de l'arc en ciel je pense :
qu'il est préférable de le changer
que tu ferai bien de lire le tuto sur les transistors dans le sous-forum "Tuto et Cours" avant d'en remettre un neuf sous tension.
Pour tester si une entrée est à l'état Haut ou à l'état Bas il faut utiliser digitalRead(num_pin).
analogRead() c'est volmètre ! De plus comme te l'a dit Kamill le seuil n'est bon.
Le micro commute " autour de Vcc\2) " et il faut tenir compte de l'hystérésis. Vire les analogRead pour lire un état logique.
Dernier conseil : un texte écrit en continu est difficile à lire.
Utilise le retour à la ligne, saute des lignes.
Tu fera comme tu veux mais pour beaucoup ici : texte peu lisble = texte pas lu.
J'ai hésité à lire, mais je ne referai pas d'effort pour continuer.
68tjs, STP peux tu mieux m'expliquer comment faire pour tester si une entrée est à l'état haut ou bien à l'entrée bas en utilisant digitalRead(num_pin). Et j'aimerai bien comprendre le phénoméne d'hystérisis.
J'ai l'impression que tu fais comme le coucou en t'installant dans le nid des autres mais comme la question sur l'hystérésis peut intéresser d'autres je vais exceptionnelement répondre façon coucou.
Comment faire pour tester si une entrée est à l'état haut ou bien à l'entrée bas en utilisant digitalRead(num_pin).
Hystérésis :
Cela devient sérieux parce que pour la question précédente reconnais que tu n'a fait aucun effort.
Si on fixe un seuil égal à exactement 2,5 V .
V > 2,5V --> l'entrée vaut 1 logique ou HIGH ou TRUE
V < 2,5V --> l'entrée vaut 0 logique ou LOW ou FALSE
Ca c'est l'ideal mais dans la réalité il y a toujours des instabilités dans les signaux dues principalement au bruit électrique.
Si on a 50 mV de bruit crète à crète et si le signal moyen vaut 4V ou 2V les +/- 25 mV autour la valeur moyenne ne seront pas dangeureux.
Mais si le signal moyen est proche de 2,5V, (2,52 V par exemple), la lecture donnera aléatoirement 0 ou 1 en fonction de l'état du bruit.
L'hystérésis consiste à créer deux valeurs de seuil de basculement selon le sens du signal
Pour passer du niveau 0 au niveau 1 ou en tension de 0V à 5V on va fixer le seuil à 2,55V.
Pour passer du niveau 1 au niveau 0 ou de 5V à 0V on va fixer le seuil à 2,45 V.
Comme cela il faudrait que le bruit soit de +/-100mV pour créer des faux basculements.
On dit qu'on a créé un hystérésis de 100 mV
fdufnews:
C'est pas bon signe.
J'en chercherais un légèrement plus costaud à ta place.
Mon prof m'a conseillé celui-ci tout en sachant l'amplitude de mon projet, de plus c'est le seul transistor que nous ayons utilisé en cours, il est donc plus facile à utiliser.
kamill:
Bonjour,
Comme l'a dit hameau, pour lire une entrée logique il faut utiliser digitalRead().
....
Si tu n'as rien d'autre à faire, le programme est très simple
Ton programme est effectivement plus simple, je ne sais pas pourquoi je me suis embêtée à mettre plusieurs conditions... Je vais de suite le tester sur une platine tout en prenant un nouveau transistor merci !
68tjs:
J'ai comme l'impression qu'il n'y a pas résistance dans la base du transistor, ni de diode de roue libre pour le protéger.
Il y a pourtant une résistance de 470 Ohms directement relié à la base du transistor.
En faut-il également au niveau du collecteur ?
Et si tu joignais un schéma à jour avec toutes les valeurs de composants tu ne crois pas que ce serait plus efficace pour avoir des réponses ?
Normalement si la gâche doit être alimentée sous 5 V il ne faut pas de résistance dans le collecteur.
Répond à cette question déjà posée : il y avait-il une diode de protection dite de roue libre ?
S'il n'y en avait pas tu as probablement détruit le transistor.
Dans ton lycée il y a-t-il un transistormètre pour le contrôler ?
Tu devrai lire cela : http://forum.arduino.cc/index.php?topic=100727.0
Dans la base 470 ohms imposent un courant de 9 mA.
Est-ce bien ce que tu as choisi d'envoyer ?
Dans la mesure où il n'est pas détruit (où avec un neuf avec diode de roue libre) :
Le transistor est-il bien saturé ?
Quel est son Vce mesuré au voltmètre en statique ou à l'oscillo en dynamique ?
Il faut comprendre pourquoi le boîtier de ce transistor a changé de couleur . Si c'est une erreur de manipulation ce n'est pas grave, si c'est une erreur de principecela pourra recommencer indéfiniment.
A propos de l'hystérésis, merci beaucoup pour l'explication. Cependant, a quel niveau sera tu entres 2,45V et 2,55V?
Merci pour ton support.
A
68tjs:
J'ai l'impression que tu fais comme le coucou en t'installant dans le nid des autres mais comme la question sur l'hystérésis peut intéresser d'autres je vais exceptionnelement répondre façon coucou.
Hystérésis :
Cela devient sérieux parce que pour la question précédente reconnais que tu n'a fait aucun effort.
Si on fixe un seuil égal à exactement 2,5 V .
V > 2,5V --> l'entrée vaut 1 logique ou HIGH ou TRUE
V < 2,5V --> l'entrée vaut 0 logique ou LOW ou FALSE
Ca c'est l'ideal mais dans la réalité il y a toujours des instabilités dans les signaux dues principalement au bruit électrique.
Si on a 50 mV de bruit crète à crète et si le signal moyen vaut 4V ou 2V les +/- 25 mV autour la valeur moyenne ne seront pas dangeureux.
Mais si le signal moyen est proche de 2,5V, (2,52 V par exemple), la lecture donnera aléatoirement 0 ou 1 en fonction de l'état du bruit.
L'hystérésis consiste à créer deux valeurs de seuil de basculement selon le sens du signal
Pour passer du niveau 0 au niveau 1 ou en tension de 0V à 5V on va fixer le seuil à 2,55V.
Pour passer du niveau 1 au niveau 0 ou de 5V à 0V on va fixer le seuil à 2,45 V.
Comme cela il faudrait que le bruit soit de +/-100mV pour créer des faux basculements.
On dit qu'on a créé un hystérésis de 100 mV
L'hystérésis se crée soit électroniquement soit par programation.
Electronique : regarde dans la datasheet du comparateur LM393, (National Semiconducteur est la meilleure), et tu trouvera des exemples expliqués.
Indice : quand le comaprateur bascule le circuit se modifie.
Programmation : il faut ajouter des seuils selon le sens de la /comparaison.
Si "le point milieu" est 2,5 V
sens "montée"
if (valeur > (2,5 + 0,05) )