Fonctionnement buzzer Arduino Uno

Bonjour,

Présentation:

Actuellement en Terminale STI2D sin, je dois réaliser un projet pour le bac. Mon projet est un radar de recul, avec 4 Capteurs Ultrasons sur un Arduino qu’on nommera “A” ainsi que transmetteur onde radio. Les mesures effectuées grâce aux 4 capteurs d’ultrasons sont traitées et envoyés à un autre arduino appelé “B”.

Cet arduino B est chargé de receptionner l’information de l’arduino A. Ensuite en fonction de la distance critique (dans mon cas, une mesure de l’obstacle < 50 cm des capteurs) un buzzer devra faire une sonnerie de plus en plus rapide quand l’obstacle se rapproche. En même temps, un bargraph avec 10 Leds devra quant à eux s’illuminer progressivement.

Mon problème:

L’arduino A ne pose aucun problème, je reçois bien l’information (les mesures) sur l’arduino B, sur le moniteur série nous pouvons les voirs. Mon problème actuellement, c’est de faire fonctionner le buzzer et le bragraph en fonction de la mesure entre les capteurs et l’obstacle. En vain, au bout d’un certain temps d’essai avec les professeurs.

Programmes:

La pièce jointe “radar_reel2.ino” est le programme pour l’arduino A
La pièce jointe “Radar_Rx.ino” est le programme pour l’arduino B

En espérant d’avoir été assez claire dans l’explication de mon problème.
En attente de votre réponse :slight_smile: :slight_smile:

Merci d’avance,

Bonne journée.

radar_reel2.ino (2.58 KB)

Radar_Rx.ino (1.77 KB)

Bonjour (on a déplacé votre post dans le forum français)

il y aurait un peu de nettoyage à effectuer dans vos codes pour l'optimiser et le simplifier (passez le port série à 115200 bauds au lieu de 9600 pour pas créer de lenteurs inutiles en debug, pourquoi séparer l'envoie du ping et la lecture de la distance associée par exemple, pas la peine de les passer les pins en output à chaque appel, autant le faire dans le setup, il serait bon de nommer les pins dans les 2 codes (const byte buzzerPin = 4; par exemple et utiliser buzzerPin au lieu de 4 partout dans le code), construire une représentation ASCII de votre entier peut se faire tout simplement avec itoa(), pas besoin de pointeur supplémentaire pour envoyer les data, utiliser le nom du tableau qui va être ce pointeur, dans votre fonction controlerBuzzer() vous pourriez utiliser des "else" entre vos "if", ce serait plus efficace, vous pourriez regarder la librairie newPing qui est plus efficace que pulseIn() pour gérer vos capteurs (attention au timer) ...) mais globalement ça tient la route comme c'est.

Utilisez vous des UNO ? La librairie VirtualWire utilise le Timer1 par défaut et le Timer1 impacte le fonctionnement du PWM sur les pins 9 et 10 sur uno.

Je n'ai pas regardé la librairie grove pour la bar LED mais Je vois que vous avez votre barre qui utilise la pin 9 Grove_LED_Bar bar([color=red]9[/color], 8, 0); - il se pourrait qu'il y ait un conflit avec le timer1

-> avez vous essayé en changeant de pin et en connectant votre bar graph ailleurs, par exemple sur les pins 6 et 7 ?

J'ai jeté un oeil à la librairie grove pour la bar LED et il ne semble pas avoir de conflit sur les pins. le problème vient peut être alors de l'alimentation de votre système

pouvez vous expliquer comment tout est câblé et alimenté? avez vous une résistance de protection sur le buzzer (quel est le type de haut parleur), quelle radio utilisez vous avec Virtual Wire (433MHz?) et quel est son besoin en énergie ?