sortie digital 5V arduino pro mini 5V 16M s'écroule sur borne 1 4N35 (optocouple

C'est pas ce que je dis depuis le début :
Tout décâbler et recâbler fonction par fonction

Quand on fait du développement c'est la seule méthode quand il se passe des phénomènes non expliqués.
Et du dev j'ai commencé à en faire en 1970, des trucs tordus j'en ai vu en pagaille et à chaque fois c'était une erreur humaine.

Quant à l'explication du HC-SR04 je demande à voir.
Le HC-SR04 est géré intérieurement par un microcontrôleur. Il faut lui envoyer l'ordre de faire une mesure et attendre le résultat de la mesure. Par contre cette bestiole est en permanence à la limite de l'accrochage.

PS : il y a des réactions imbéciles qui ne méritent que d'être que d'être gérées par l'ignorance totale et qui n'insultent que leur auteur.

PS: si la boule ne dit rien comme tu demandes à savoir c'est sur le site de gotronic ici mais il faudra prendre la peine de lire

  1. :wink: :wink:

Bonjour,

didiersee, comme tu as l'air de te contenter de ce qui marche plus ou moins bien, alors tu fais un test. Si la valeur retournee est egale a zero, tu n'en tiens pas compte. CQFD.

Sinon une recherche sur Google avec "Arduino HC-SR04" donne plus de 94000 liens.

Jacques

didiersee:
PS: si la boule ne dit rien comme tu demandes à savoir c’est sur le site de gotronic ici mais il faudra prendre la peine de lire
8) :wink: :wink:

Je n’ai rien à faire d’une notice commerciale surtout quand elle présente une directivité de 60 ° comme une directivité de 30 ° et je connais parfaitement le produit, moi.
Si je dis que ce produit est en limite d’accrochage c’est que je l’ai vérifié sur 5 exemplaires.

Il existe d’autres réalisations un peu plus chère qui sont plus fiables.

Si tu es capable de comprendre des explications d’électronique analogique, ce dont je doute fortement, voici un lien technique où tout est dit, non pas dit explicitement, mais où les manquements de cette réalisation expliquent les dysfonctionnements (quand on peut comprendre).
http://uglyduck.ath.cx/ep/archive/2014/01/Making_a_better_HC_SR04_Echo_Locator.html

Je te laisse à tes manip foireuses et tes à peu près.

Merci 68tjs maintenant je pense que tout le monde a bien compris la haute estime de votre propre personne. Aussi pourriez-vous laisser répondre d'autres personnes svp?

Y a -il quelqu'un d'autre qui aurait une idée plus constructive pour un pauvre ignorant comme moi?
Il est vrai que je ne suis pas superman :slight_smile: sinon je ne serai pas ici :wink: 8)

Voilà j’ai un code modifié pour pour ne plus afficher de valeur en dessous de 10cm dans le moniteur série et surtout pour ne pas influencer mon alarme avec ces valeurs malheureusement je n’arrive pas éviter ces valeurs malgré ma condition if(distance_mm <= 100) qui normalement renvoie au début du loop pour mesurer une une valeur Le code est ci-dessous
Quelqu’un a une idée?
Merci pour votre aide

//Attention pour carte arduino pro mini il faut choisir carte
//Arduono pro mini et processeur Atmega 168 -- 16 MHZ

/* code module ultrason simple */
/* constantes pour les broches */

const byte TRIGGER = 12; // broche TRIGGER
const byte ECHO = 11; // broche ECHO

/* Constantes pour le timeout */
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = 8m à 340m/s

/* Vitesse du son dans l'air en mm/us */
const float SOUND_SPEED = 340.0 / 1000;


void setup() { /*code pour module ultrason HCSR04 */

Serial.begin(115200);
pinMode(8, OUTPUT);  //relay
digitalWrite(8, LOW);
pinMode(9, OUTPUT);  //led verte détecteur fonctionne
digitalWrite(9, HIGH);

/* ATTENTION SUR ECRAN SERIAL MONITOR , il faudra choisir 115200 baud dans menu deroulant */
pinMode(TRIGGER, OUTPUT);
digitalWrite(TRIGGER, LOW);
pinMode(ECHO, INPUT);
}

void loop() {
/* 1 envoie une impulsion HIGH de 20 us sur broche trigger pas 10 sinon on a des zeros */
Serial.println("debut_loop");
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(20);
digitalWrite(TRIGGER, LOW);

/* 2 Mesure le temps entre l'envoi de l'impulsion et son echo */
long measure = pulseIn(ECHO, HIGH, MEASURE_TIMEOUT);

/* 3 calcul la distance a partir du temps mesuré */
float distance_mm = measure / 2.0 * SOUND_SPEED;

if(distance_mm <= 100){
Serial.println("moins que 10cm");
delay(300);
loop();
}

Serial.println("distance ");
Serial.print(distance_mm / 10.0, 2);
Serial.print("cm, ");

if (distance_mm <=500)
  {
digitalWrite(8, HIGH); //relay ON distance plus petit que 50cm
digitalWrite(9, LOW); //led verte OFF
  }
else
  {
digitalWrite(8, LOW); //relay OFF distance plus grand que 20cm
digitalWrite(9, HIGH); //led verte ON
  }
delay(2000);
}

Oups …
La loop qui rappelle la loop. Cela s’appelle récursivité. Pas vraiment indiqué.
Faire plutôt ceci :

if(distance_mm <= 100){
  Serial.println("moins que 10cm");
  delay(300);
}
else {
  Serial.println("distance ");
  Serial.print(distance_mm / 10.0, 2);
  Serial.print("cm, ");

@+

Ah bien merci comme le but est de faire une nouvelle mesure pour éviter les valeurs zero je vais essayer en recopiant le début du loop dans dans mon if puis je reviens vers vous.
Merci

Impeccable merci, mon code avec votre correction est ci-dessous.
J’aimerai maintenant faire une moyenne pondérée de 5 valeur avant de mettre mes minimum et maximum pour enclenchement ou pas de mon relai je vais mettre ça en oeuvre et reviens éventuellement vers vous
Merci encore

if(distance_mm <= 100){
Serial.println("moins que 10cm");
delay(300);
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(20);
digitalWrite(TRIGGER, LOW);
/* Resure le temps entre l'envoi de l'impulsion et son echo */
long measure = pulseIn(ECHO, HIGH, MEASURE_TIMEOUT);
/* Recalcul la distance a partir du temps mesuré */
float distance_mm = measure / 2.0 * SOUND_SPEED;
}
else {
  Serial.println("distance ");
  Serial.print(distance_mm / 10.0, 2);
  Serial.print("cm, ");
}