Câbler et lire un +5V en input sur Arduino

J'avais bien compris, je me suis senti con c'est pour ça... Il y a 4 Ω :yum:

Je vais faire l'essai et mesurer les valeurs.

Au niveau du programme, je suis plutôt satisfait. J'arrive à obtenir ce que je veux, bien qu'il semble y avoir quelques conflits, mais je n'ai pas encore regardé. Je ne connais pas bien le code, je m'aide d'AI... hm

Au cas où, voici l'esquisse :

// Déclaration des broches
const int capteurHall = 6;
const int sirene = 7;
const int ledRouge = 8;
const int ledVerte = 9;
const int ledBleue = 10;
const int buzzer = 11;
const int moduleRF = 12;

// États du système
enum State { MISE_SOUS_TENSION, REPOS, ALARME_ACTIVE, DETECTION_INTRUSION };
State etatActuel;

// Fonction de changement d'état
void changerEtat(State nouvelEtat) {
  etatActuel = nouvelEtat;
  Serial.print("Changement d'état: ");
  switch (etatActuel) {
    case MISE_SOUS_TENSION:
      Serial.println("MISE_SOUS_TENSION");
      // Séquence de mise sous tension avec LEDs et buzzer
      digitalWrite(ledRouge, HIGH);
      tone(buzzer, 1000); // Fréquence 1 kHz
      delay(377);
      digitalWrite(ledRouge, LOW);
      noTone(buzzer);

      digitalWrite(ledVerte, HIGH);
      tone(buzzer, 1500); // Fréquence 1.5 kHz
      delay(377);
      digitalWrite(ledVerte, LOW);
      noTone(buzzer);

      digitalWrite(ledBleue, HIGH);
      tone(buzzer, 2000); // Fréquence 2 kHz
      delay(377);
      digitalWrite(ledBleue, LOW);
      noTone(buzzer);

      digitalWrite(sirene, HIGH);
      delay(233);
      digitalWrite(sirene, LOW);
      break;

    case REPOS:
      Serial.println("REPOS");
      // LED verte pour indiquer le mode repos
      digitalWrite(ledRouge, LOW);
      digitalWrite(ledVerte, HIGH);
      digitalWrite(ledBleue, LOW);
      digitalWrite(buzzer, LOW);
      digitalWrite(sirene, LOW);
      // Ajout de deux bips
      tone(buzzer, 1500); // Fréquence 1.5 kHz
      delay(150);
      noTone(buzzer);
      delay(150);
      tone(buzzer, 1500); // Fréquence 1.5 kHz
      delay(150);
      noTone(buzzer);
      break;

    case ALARME_ACTIVE:
      Serial.println("ALARME_ACTIVE");
      // LED rouge pour indiquer que l'alarme est active
      digitalWrite(ledRouge, HIGH);
      digitalWrite(ledVerte, LOW);
      digitalWrite(ledBleue, LOW);
      // Ajout d'un bip
      tone(buzzer, 1000); // Fréquence 1 kHz
      delay(150);
      noTone(buzzer);
      break;

    case DETECTION_INTRUSION:
      Serial.println("DETECTION_INTRUSION");
      // LED rouge et activation du buzzer et de la sirène
      digitalWrite(ledRouge, HIGH);
      digitalWrite(ledVerte, LOW);
      digitalWrite(ledBleue, LOW);
      digitalWrite(buzzer, HIGH);
      digitalWrite(sirene, HIGH);
      break;
  }
}

void setup() {
  Serial.begin(9600);  // Initialisation de la communication série
  while (!Serial) {
    ; // Attendre que le port série soit prêt (nécessaire pour certains systèmes)
  }

  Serial.println("Système démarré");

  // Initialisation des broches
  pinMode(capteurHall, INPUT);
  pinMode(sirene, OUTPUT);
  pinMode(ledRouge, OUTPUT);
  pinMode(ledVerte, OUTPUT);
  pinMode(ledBleue, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(moduleRF, INPUT_PULLUP);

  // Passer à l'état MISE_SOUS_TENSION
  changerEtat(MISE_SOUS_TENSION);

  // Passage à l'état ALARME_ACTIVE après la mise sous tension
  delay(1000);
  changerEtat(ALARME_ACTIVE);
}

void loop() {
  // Lecture du module RF
  bool rfEtat = digitalRead(moduleRF) == HIGH;

  // Transition entre les états selon les lectures
  switch (etatActuel) {
    case REPOS:
      if (rfEtat) {
        changerEtat(ALARME_ACTIVE);
      }
      break;

    case ALARME_ACTIVE:
      if (!rfEtat) {
        changerEtat(REPOS);
      } else if (digitalRead(capteurHall) == HIGH) {
        changerEtat(DETECTION_INTRUSION);
      }
      break;

    case DETECTION_INTRUSION:
      if (!rfEtat) {
        changerEtat(REPOS);
      }
      break;
  }

  // Ajoutez un court délai pour éviter la lecture trop rapide
  delay(100);
}

Y a pas de quoi se sentir con, et moi je me sens moins con maintenant que je sais d'où viennent ces 4 Ohms.

Si la LED et la résistance entre OUT+ et OUT- dérange votre scénario, vous pouvez les remplacer par une résistance de 320 à 500 Ohms (voir 1k).

1 Like

C'est exactement ce qui se passe. :muscle:

J'ai effectivement enlever la led sauf que je ne l'avais pas remplacée par une résistance mais un simple pontage..

Pour info, le transistor est un 20N06 .

Yep, la faute à bibi, j'ai pas vraiment réfléchis avant d'acheter ce module chez le géant chinois, j'imaginais que ce serait plus simple, ça m'apprendra... :upside_down_face:

J'ai effectivement bien essayer de cette manière mais j'obtiens, comme le dis Jef59 , toujours un haut. C'est peut-être dû au fait que la commande est réglée en "Latched Mode" et non "Momentary".. boh

Actuellement voiçi ce qui fonctionne:

const int QAR011 = 12; // Broche pour lire l'état de la sortie du module QA-R-011

void setup() {
  Serial.begin(9600);            // Initialisation de la communication série
  pinMode(QAR011, INPUT_PULLUP); // Définir la broche comme entrée avec pull-up
}

void loop() {
  int etatSortie = digitalRead(QAR011); // Lire l'état de la sortie

  if (etatSortie == LOW) {
    Serial.println("Haut"); // Afficher "Haut" lorsque la sortie est activée
  } else {
    Serial.println("Bas");  // Afficher "Bas" lorsque la sortie est désactivée
  }

  delay(100); // Attendre 500 ms avant de lire l'état à nouveau
}

Cela vous semble t-il correct?

D'un point de vue élec:

Je cherchais à savoir si la commande de la charge (ampoule, Led, résistance...) par votre module RFID était en NPN ou PNP, schémas réguliérement utilisés en élec

Comme dans ces schémas.

L'inter est généralement un transistor.

Ici c'est sûrement le 20N06 que l'on voit sur votre module et qui est un MOS canal N (et non un bipolaire à collecteur ouvert comme je le supposais).

Le MOS canal N est adapté pour le schéma NPN avec la Source au GND et le Drain à OUT-


Le transistor faisant office de contact ouvert ou fermé entre OUT- et GND.

Quand il est fermé, il "tire" votre entrée Arduino D12 à 0V et elle voit un niveau LOW.

Quand il est ouvert, la résistance de PULLUP interne de cette entrée la "tire" à +5V et elle voit 1 niveau HIGH.

Comme c'est un transistor MOS je pense que pour réduire la consommation sur votre 5V (c'est toujours bénéfique), vous pouvez augmenter la valeur de la résistance qui fait office de "LOAD" entre OUT+ et OUT- et voir si ça marche encore bien avec 4.7k au lieu de 0.470 k Ohms.

La diode entre D12 et OUT-, ne connaissant pas le schéma de votre module RFID, c'est uniquement pour prévenir des éventuels retour de courant de votre module RFID vers l'entrée Arduino.

Elle pourrait être remplacée par un simple fil je pense...mais...
C'est une précaution peut-être inutile de la garder.

Je vais tâcher de m'appliquer à cette solution, de comprendre en détail le maximum.
Encore merci pour toutes ces informations précieuse. C'est l'occasion pour moi de combler certaines lacunes.

Je grifonne un petit schéma récapitulatif et j'envoie cela.

EDIT, le schéma

1 Like

Bonjour, bonjour :wave:

Une vrai mine d'or ce papier à mes yeux, merci.
À manger et à boire.. par contre il m'a mit en PLS :exploding_head: :joy:
J'ai dû revoir pas mal de choses et ce n'est pas fini... :dove:

Si j'ai bien compris,

MOSFET Canal N

Réception du Signal RF > Décodage du Signal par le Microcontrôleur > Contrôle par MCU de Gate/Grille au N-MOSFET (0v ou 3,3v dans ce cas) > Gate maintient ou relâche selon l'état > La Source de courant est drainée ou bloquée vers/au Drain

Diode 1N4148

Bien qu'inutile dans ce cas, elle agit comme une barrière de protection et a une valeur de référence de 0,6 V due au matériau (silicium) en lui-même, si je comprends bien. Donc l'Arduino lit une valeur haute ou basse sur une tension comprise entre 0v/0,6v et non 0/5v.

Lushproject

Au passage, j'ai découvert Lushproject, bien qu'un peu pousser pour moi, cela me semble assez adapté pour étudier, faire quelques essais. Je galère à comprendre toutes les valeurs et dénominations mais c'est super intéressant de voir comment ça circule en visuel..
Je n'aimerais pas vous faire perdre votre temps mais je suis assez curieux de savoir ce que vous pensez de ce site?

Voici le lien ou

Bonne journée

MOS canal N:
:+1:Tu a pigé le truc.

DIODE 1N4148:
C'est pas encore ça.
Si le transistor MOS N est bloqué, le courant "drainé" (par le drain) est nul, donc le courant dans la diode et la résistance de PULLUP interne à l'entrée Arduino peut être considéré comme nul.

Pour éviter la PLS, je reprend:
Transistor bloqué --->courant dans la diode et R PULLUP = 0.
Donc chute de tension dans R PULLUP = 0
Donc tension sur l'entrée = 5V = HIGH

Transistor passant:
Voir les caractéristiques de 1N4148.
On ne connait pas vraiment la valeur du courant dans la diode car Arduino donne une fourchette trés large de la valeur de PULLUP (10k à 30k voir plus).
Mais quoi qu'il en soit, avec 10k par exemple le courant dans la diode est au maxi = 5/10 = 0,5mA (3,3/10 = 0,33mA).

Et pour de telle valeur de courant


On a une tension "Forward" de l'ordre de 0,7V.
Ce qui est considéré par l'entrée digitale Arduino comme étant un niveau LOW.

Oups, je n'avais pas cliqué le lien sur Lushproject.

Je regarde de plus prés, ce qui serait intéressant, c'est que les néophytes de l'élec qui ont trouvé des trucs pour apprendre eux même donnent aussi leurs avis (à priori, vu l'avis de certains, je ne suis pas l'exemple à suivre).

Il y a aussi ça

Super, merci beaucoup pour ces informations supplémentaires ! :muscle: :man_teacher:

J'avais découvert Wokwi il y a quelque temps, c'était vraiment bien, simple, mais je ne comprenais pas assez bien les bases à l'époque et je n'ai plus suivi le fil.
Je n'arrivais plus à me rappeler du nom, donc merci de me l'avoir rappelé. Je vais très certainement l'utiliser aussi !

Effectivement, ce serait intéressant. J'ai fait une rapide recherche mais je n'ai pas trouvé grand-chose à ce propos.

Je ne suis pas au courant des opinions des autres membres ou des éventuels conflits passés, mais vos réponses sont assez clair et concises pour ma part :+1:
Cela fait plaisir de trouver réponse à ses questions dans tous les cas :slight_smile:

A propos de wolkwi, la base de temps de ce simulateur est un peu perturbante, et il manque quelques composants classiques.

Moi j'utilise Tkinkercad, mais je ne l'ai pas cité car je ne sais plus si c'est gratuit ou non?

Ah bon ? Je vais quand même essayer, car pour l'instant je ne vois pas de problème... Aujourd'hui, je suis un peu fatigué pour ça, héhé :yum:

Tinkercad est effectivement gratuit. Quand j'ai regardé, je n'ai pas trouvé tous les composants que je souhaitais aussi, mais ce n'est probablement pas très grave ("je pense qu'on peut les faire soit même?"). C'est largement suffisant pour débuter ou tester des petits circuits rapidement. On peut combiner les deux en fonction du projet. Au début, j'avais l'habitude de chercher des exemples de circuits tout faits sur les moteurs de recherche style "Led RGB arduino wokwi" juste pour voir comment ils étaient réalisés. C'est utile au début, mais il y a rapidement des limitations.

Je vais aussi tester la conception 3D (wouhouu je viens d'acquérir une petite imprimante 3D). Ça pourrait être sympa de centraliser tout cela dans Tinkercad pour des petits projets Arduino. En revanche, je ne comprends pas encore très bien ce que fait exactement le codeblock...

A priori la "machine forum arduino" déconseille de poursuivre sur un sujet quand il a été résolut.

"Ce sujet a été résolu
Répondez uniquement si ... "

Vous n'avez plus qu'à trouver un nouveau petit sujet réunissant tout cela (Arduino, 3D, Tinkercad..." et voir s'il y a des adeptes pouvant vois éclaircir sur le sujet.

(moi je ne connais pas).
A+