Lecture digitale super débutant

Bonjour,

J'ai parcouru le forum pour voir si je ne trouvais pas de réponse à ma question, mais ne sachant pas bien quel terme utiliser pour la recherche, je suis peut-être passé à côté de la réponse. Dans ce cas, je vous présente mes excuses directement...

Alors voilà, je suis un super super super débutant en électronique, mais je suis un IT. Donc le concept de coder, ne m'est pas étranger.

J'ai voulu débuter avec l'Arduino, et je me suis acheté quelques composants.
Je voulais commencer par ce projet-ci :

Mais je devais pour ainsi dire lancer une grenade pour que le piezo que j'ai acheté réagisse.

Je me suis donc dit que j'allais prendre un capteur plus adapté, mais je me suis trompé dans la commande et je n'ai qu'une sortie digitale, pas analogique.

Seulement je ne trouve pas comment lire cela ni comment connecter le capteur.

Alors mon capteur c'est ceci :

et j'ai donc trois sorties : VCC, GND et OUT

Je me doute que GND je vais le relier à GND sur l'Arduino.

Le OUT, je dois le relier à quoi ? une pin du côté Digital ? Soit entre 22 et 53 sur ma Mega ?

Mais le VCC ? C'est quoi ?

Et alors pour lire le résultat ?

Je dois juste remplacer sensorReading = analogRead(knockSensor); par sensorReading = digitalRead(knockSensor); ?
Mais la partie if (sensorReading >= threshold) va perdre de son sens ? Serait-ce un code genre if (sensorReading = 1) ?

Merci de m'éclairer.

PH

bonjour,
un peu de réflexion quand même.
si tu es partit du tuto comme tu l'as indiqué, regarde bien les branchements.
un ti indice, un micro electret a besoin de courant pour fonctionner.
donc on peut en déduire quelque chose, non?
gnd => masse
out => sortie pour la mesure
vcc => ????????

vcc = le + ?

Donc je dois le relier du côté power.
Mais...3.3v ? 5v ? V1n ?

C'est idiot pour vous, mais j'ai pas pensé au courant dans l'histoire.

Par contre vu que c'est du digital, je suppose que je n'ai plus besoin de la résistance entre le gnd et le out ?

Sinon, pour le code, cela tient-il la route ?

Merci déjà, je viens de faire un pas en avant :slight_smile:

PH

Et du coup pour le code, je dois me diriger vers ceci :

?

Je crois que j'avance là ;:slight_smile:

Bon, il semble que mon sensor accepte 3.3V et 5V

Donc j'ai relié le vcc à 5V, j'ai relié le GND à GND et le OUT à la pin 7

Puis mon code donne

// these constants won't change:
const int ledPin = 13;      // led connected to digital pin 13
const int knockSensor = 7; // the piezo is connected to analog pin 0

// these variables will change:
int sensorReading = LOW;      // variable to store the value read from the sensor pin
int ledState = LOW;         // variable used to store the last LED status, to toggle the light

void setup() {
 pinMode(ledPin, OUTPUT); // declare the ledPin as as OUTPUT
 pinMode (knockSensor, INPUT); //declare the sensorReading as INPUT
}

void loop() {
  // read the sensor and store it in the variable sensorReading:
  sensorReading = digitalRead(knockSensor);    
 
  // if the sensor reading is HIGH:
  if (sensorReading = HIGH) {
    // toggle the status of the ledPin:
    ledState = !ledState;  
    // update the LED pin itself:        
    digitalWrite(ledPin, ledState);
      
  }
  delay(10);  // delay to avoid overloading the serial port buffer
}

Je pense que cela tient la route... Pourtant il ne se passe rien :frowning:
La led 13 reste allumée (je comprendrais déjà mieux qu'elle reste éteinte puisque je la défini en LOW au départ....)

Je suis perdu. Je pensais que c'était plus clair mais visiblement non :frowning:

PH

déjà dans l'exemple il est marqué pin 0, donc A0 et non 7
allez je suis dans un bon jour, je me suis fait un petit test l'autre jour pour ce type de micro, mais j'avais pas de breakout, donc je l'ai fait avec ce que j'avais sous la main.
au départ ne pas faire de bruit pour avoir la valeur la plus basse

const int ledPin = 13; // led pin 13
const int electret = A0; // pin A0 OUT

// these variables will change:
int sensorReading = 0; // variable a 0
int sensorMax = 0;
int sensorMin = 1023;
int threshold;

void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(57600);
digitalWrite(ledPin, HIGH);
while (millis() < 3000) {
threshold = analogRead(electret);

// on enregistre le maximum du son
if (threshold > sensorMax) {
sensorMax = threshold;
}

}

// fin calibration
digitalWrite(ledPin, LOW);
threshold = sensorMax;

}

void loop() {
// on lit la valeur micro
sensorReading = analogRead(electret);

// si la valeur recue est plus forte que le seuil depart
if ((sensorReading >= threshold)) {
Serial.println(sensorReading-threshold);
digitalWrite(ledPin, HIGH);

}else{digitalWrite(ledPin, LOW);}

delay(2);
}

PaulinHalenria:
Je pense que cela tient la route... Pourtant il ne se passe rien :frowning:
La led 13 reste allumée (je comprendrais déjà mieux qu'elle reste éteinte puisque je la défini en LOW au départ....)

Je suis perdu. Je pensais que c'était plus clair mais visiblement non :frowning:

PH

sauf mauvaise lecture de ma part , ton module sort juste une info binaire de seuil (dépassé ou pas) , pas une valeur analogique representative
le seuil est reglé par l'ajustable , donc si c'est bien le cas et dans un premier temps simplement tester si la sortie bascule en fonction "de l'ambiance et de l'action sur l'ajustable"

J'ai ce module : il y a une petite led qui indique quand on dépasse le seuil fixé par le potentiomètre.

pour le code du coup tu as juste à virer la lecture analogique et remplacer la condition avec le threshold par la lecture digitale puisque le threshold (seuil) est fixé matériellement

@infobarquee : Je sais que dans l'exemple c'est A0 mais dans l'exemple c'est de l'analogique via un piezo et une résistance.
Ici mon module sort en digital comme l'a dit Artouste.

En jouant sur le potentiomètre, j'ai fini par avoir quelque chose qui fonctionnait.
En fait le micro était trop sensible et du coup le signal était toujours sur HIGH simplement.

J'ai diminué la sensibilité sur le potentiomètre et cela a fonctionné.

Le code que j'ai utilisé au final est simplement celui-ci

int ledPin = 13; // LED connected to digital pin 13
int inPin = 7;   // pushbutton connected to digital pin 7
int val = 0;     // variable to store the read value

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin 13 as output
  pinMode(inPin, INPUT);      // sets the digital pin 7 as input
}

void loop()
{
  val = digitalRead(inPin);   // read the input pin
  digitalWrite(ledPin, val);    // sets the LED to the button's value
}

Merci à tous pour votre aide, je vais maintenant tenter de remplacer la sortie sur la LED 13 par déclencher mon optocoupleur pour déclencher mon flash :slight_smile:

Merci encore
PH

c'est un fait, autant pour moi.
moi j'avais juste un electret avec un condo et une resistance, mais le principe est le même puisque je calibrais le fond sonore au début et non via un potar :wink: