Table des matières:
- Étape 1: Nomenclature
- Étape 2: Outils/Machines/Logiciels requis
- Étape 3: matériel témoin
- Étape 4: Logiciel Telltale
- Étape 5: assemblage témoin
- Étape 6: Matériel de haut-parleur
- Étape 7: Logiciel de haut-parleur
- Étape 8: Assemblage du haut-parleur
- Étape 9: configuration/montage
- Étape 10: Dépannage
- Étape 11: Étapes suivantes possibles
Vidéo: Témoins sonores pour la voile : 11 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:07
Les témoins sont des morceaux de ficelle utilisés en voile pour indiquer s'il y a un écoulement turbulent ou laminaire à travers la voile. Cependant, les différents morceaux de fil de couleur attachés de chaque côté de la voile sont des indicateurs purement visuels. Ces témoins sonores sont un dispositif d'assistance qui vise à communiquer les informations visuelles sous une forme auditive pour les marins voyants et malvoyants, comme Pauline.
L'appareil se compose d'un système d'entrée, qui lit le mouvement du témoin, et d'un système de sortie, qui émet une série de bips transmettant des informations sur le débit d'air.
L'accès à du matériel de soudure et à une imprimante 3D est nécessaire pour la fabrication de cet appareil.
Étape 1: Nomenclature
BOM avec liens et prix
Remarque: vous aurez besoin de 2 ensembles de tous les éléments suivants.
Système d'entrée
- Arduino Nano
- PCB de planche à pain demi-taille perma-proto Adafruit
- Module émetteur-récepteur sans fil nRF24L01
- Interrupteur photo
- Carte de dérivation d'interrupteur photo Sparkfun
- Batterie 9V compatible Arduino
- pile 9V
- Plusieurs longueurs de fil de calibre 22
- Fil
- Aimants en néodyme
- Époxy
Système de sortie
- Arduino Nano
- PCB de planche à pain demi-taille perma-proto Adafruit
- Module émetteur-récepteur sans fil nRF24L01
- Batterie 9V compatible Arduino
- Potentiomètre 1K Ohm
- Résistance 120 Ohms
- Transistor 2N3904
- Condensateur 0,1 uF
- Haut-parleur compatible Arduino
Fichiers GitHub
- Tout le code et les fichiers STL nécessaires à la construction de ces témoins peuvent être trouvés dans ce référentiel GitHub.
- Vous aurez besoin de deux ensembles d'enceintes et d'un des boîtiers d'enceintes.
Étape 2: Outils/Machines/Logiciels requis
Pour programmer l'Arduino, vous devrez télécharger l'IDE Arduino. Le lien de téléchargement se trouve ici.
Pour programmer le module nRF24L01, vous devrez télécharger sa bibliothèque via l'IDE Arduino. Outils > Gérer les bibliothèques… > installer la bibliothèque RF24
Pour assembler les composants électroniques, il est nécessaire d'avoir accès à des outils de soudage de base. Une pompe à dessouder peut également être utile mais n'est pas nécessaire.
Pour construire le cadre du témoin et le boîtier du haut-parleur, vous aurez besoin d'un accès à une imprimante 3D.
Étape 3: matériel témoin
Assemblez le circuit selon les schémas ci-dessus. L'Arduino Nano doit être aligné avec le haut du protoboard. Cela vous permet d'avoir accès au port USB même après que tous les composants électroniques sont connectés.
Afin d'éviter de court-circuiter l'électronique, assurez-vous de couper les traces du protoboard sur les rangées qu'occupera le nRF24 comme indiqué dans l'image ci-dessus.
Sinon, vous aurez besoin de câbles de démarrage pour connecter le nRF24 à la carte proto.
La connexion de la résistance, GND et les fils 5V à l'interrupteur photo ne sont pas représentés. Câblez l'interrupteur photo comme indiqué sur sa carte de dérivation. Une image du tableau de répartition est incluse.
Les circuits des témoins droit et gauche sont exactement les mêmes.
Étape 4: Logiciel Telltale
Voici le code pour le témoin droit. Connectez le nano du témoin droit à votre ordinateur, ouvrez l'IDE Arduino, copiez et collez ce code dedans et téléchargez-le sur la carte.
/** Programme qui utilise photogate pour examiner les témoins
*/ #include #include #include #include radio RF24 (9, 10); // CE, adresse d'octet const CSN[6] = "00010"; //---program consts--- //time const int string_check_time = 1; const int flow_check_time = 30; const int base_delay = 5; const int flow_check_delay = 0; const int GATE_PIN = 6; const int GATE_PIN_2 = 7; const int max_when_testing = flow_check_time * 0.6; //définissez la variable ci-dessus en fonction de vos propres essais expérimentaux const int max_in_flow = min(max_when_testing, int(flow_check_time/string_check_time)); const int msg_max_val = 9; //const int string_thresh = 20; #define STRING_THRESH 0.2 //---program vars--- int num_string_seen = 0; int nombre_boucles = 0; void setup() { //while(!Serial); // pour la flore //delay(500); num_string_seen = 0; nombre_boucles = 0; pinMode(GATE_PIN, INPUT); pinMode(GATE_PIN_2, INPUT); Serial.begin(115200); // pour le débogage radio.begin(); radio.openWritingPipe(adresse); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); } void loop() { // mettez votre code principal ici, pour l'exécuter à plusieurs reprises: if(num_loops % string_check_time == 0){ //vérifiez l'état de la chaîne check_string(); } if(num_loops == flow_check_time){ //examiner le flux //Serial.println(num_string_seen); int flow_num = examine_flow(); //envoyer les valeurs send_out(flow_num); //réinitialiser les variables num_string_seen = 0; nombre_boucles = 0; delay(flow_check_delay); } nombre_boucles++; delay(base_delay); } /* *Méthode pour vérifier si la chaîne traverse la porte */ void check_string(){ int string_state = digitalRead(GATE_PIN); //Série.println(string_state); if (string_state == 0){ num_string_seen++; //Serial.println("Saw string!"); }
int bot_state = digitalRead(GATE_PIN_2);
if (bot_state == 0){ num_string_seen--; //Serial.println("chaîne en bas!"); } //Serial.print("La chaîne de comptage passe: "); //Série.println(num_string_seen); revenir; } /* * Méthode pour analyser quelle fraction de temps la chaîne a couvert la porte */ int examine_flow(){ double percent_seen = double(num_string_seen)/max_in_flow; Serial.print("Pourcentage couvert: "); printDouble(percent_seen, 100); //mettre à l'échelle la valeur à l'échelle de communication int scaled_flow = int(percent_seen * msg_max_val); if(scaled_flow > msg_max_val){ scaled_flow = msg_max_val; } if(scaled_flow = 0) frac = (val - int(val)) * précision; sinon frac = (int(val)- val) * précision; Serial.println(frac, DEC); }
Voici le code du témoin gauche. Suivez les mêmes étapes que ci-dessus pour le témoin gauche. Comme vous pouvez le voir, la seule différence est l'adresse à laquelle le témoin envoie ses résultats.
/** Programme qui utilise photogate pour examiner les témoins
*/ #include #include #include #include radio RF24 (9, 10); // CE, adresse d'octet const CSN[6] = "00001"; //---program consts--- //time const int string_check_time = 1; const int flow_check_time = 30; const int base_delay = 5; const int flow_check_delay = 0; const int GATE_PIN = 6; const int GATE_PIN_2 = 7; const int max_when_testing = flow_check_time * 0.6; //définissez la variable ci-dessus en fonction de vos propres essais expérimentaux const int max_in_flow = min(max_when_testing, int(flow_check_time/string_check_time)); const int msg_max_val = 9; //const int string_thresh = 20; #define STRING_THRESH 0.2 //---program vars--- int num_string_seen = 0; int nombre_boucles = 0; void setup() { //while(!Serial); // pour la flore //delay(500); num_string_seen = 0; nombre_boucles = 0;
pinMode(GATE_PIN, INPUT);
pinMode(GATE_PIN_2, INPUT); Serial.begin(115200); // pour le débogage radio.begin(); radio.openWritingPipe(adresse); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); }void loop() { // mettez votre code principal ici, pour l'exécuter à plusieurs reprises: if(num_loops % string_check_time == 0){ //vérifiez l'état de la chaîne check_string(); } if(num_loops == flow_check_time){ //examiner le flux //Serial.println(num_string_seen); int flow_num = examine_flow(); //envoyer les valeurs send_out(flow_num); //réinitialiser les variables num_string_seen = 0; nombre_boucles = 0; delay(flow_check_delay); } nombre_boucles++; delay(base_delay); } /* *Méthode pour vérifier si la chaîne traverse la porte */ void check_string(){ int string_state = digitalRead(GATE_PIN); //Série.println(string_state); if (string_state == 0){ num_string_seen++; //Serial.println("Saw string!"); }
int bot_state = digitalRead(GATE_PIN_2);
if (bot_state == 0){ num_string_seen--; //Serial.println("chaîne en bas!"); } //Serial.print("La chaîne de comptage passe: "); //Série.println(num_string_seen); revenir; } /* * Méthode pour analyser quelle fraction de temps la chaîne a couvert la porte */ int examine_flow(){ double percent_seen = double(num_string_seen)/max_in_flow; Serial.print("Pourcentage couvert: "); printDouble(percent_seen, 100); //mettre à l'échelle la valeur à l'échelle de communication int scaled_flow = int(percent_seen * msg_max_val); if(scaled_flow > msg_max_val){ scaled_flow = msg_max_val; } if(scaled_flow = 0) frac = (val - int(val)) * précision; sinon frac = (int(val)- val) * précision; Serial.println(frac, DEC); }
Étape 5: assemblage témoin
Pièces individuelles
- Cadre révélateur
- Fil
- Circuit témoin construit
- Batterie
- Ruban électrique
- Époxy ou colle
STL pour les composants témoins d'impression 3D
- STL pour cadre témoin: gauche, droite
- STL pour boîtier électronique: haut, bas
Instructions de montage
- Placez des barreaux magnétiques dans les fentes du cadre témoin imprimé en 3D. Assurez-vous que les aimants s'alignent correctement entre le cadre droit et le cadre gauche, puis utilisez de l'époxy (ou de la colle) pour fixer les aimants au cadre. Laissez l'époxy (ou la colle) durcir complètement.
- Placez les interrupteurs photo dans les fentes supérieure et inférieure à l'arrière du cadre. Époxydez soigneusement (ou collez) les panneaux de l'interrupteur photo sur le cadre. Laisser l'époxy (ou la colle) durcir complètement
- Coupez un morceau de fil d'environ 7 pouces. Attachez une extrémité du fil à l'encoche de la première barre verticale. Coupez un petit morceau de ruban électrique et enroulez le ruban électrique sur la section du fil qui sera dans la région des interrupteurs photo. Enfilez le fil à travers le cadre afin qu'il passe à travers l'espace de la porte de l'interrupteur photo.
- Placez des barreaux magnétiques dans les fentes du fond du boîtier électronique imprimé en 3D. Assurez-vous que les aimants s'alignent correctement entre la boîte de droite et la boîte de gauche, puis utilisez de l'époxy (ou de la colle) pour fixer les aimants au cadre. Laissez l'époxy (ou la colle) durcir complètement.
- Placez le circuit témoin construit dans le boîtier électronique, en alignant les différents composants sur leurs fentes. Fermez la boîte avec le dessus du boîtier électronique imprimé en 3D. Epoxy (ou colle) la batterie sur le dessus de la boîte afin que l'interrupteur soit exposé.
Étape 6: Matériel de haut-parleur
Le système de sortie se compose de deux circuits de haut-parleurs, un pour chaque témoin, équipés d'une communication sans fil et d'un bouton de réglage du volume. Tout d'abord, préparez les protoboards à utiliser avec les modules nRF24L01 comme nous l'avons fait pour les circuits témoins en coupant les fils séparant les deux rangées de broches où la carte sera placée.
Ensuite, assemblez le circuit comme indiqué sur le schéma ci-dessus en vous référant aux photos des circuits terminés.
Instructions d'assemblage de la carte
Afin d'empiler les cartes dans l'enceinte du haut-parleur, les composants principaux doivent être placés dans certaines zones de la carte. Dans les instructions suivantes, je ferai référence au système de coordonnées utilisé pour désigner les lignes et les colonnes sur le protoboard Adafruit:
- L'Arduino Nano doit être placé contre le bord supérieur de la carte au centre afin que la broche Vin soit positionnée en G16. Cela permettra une reprogrammation facile de l'Arduino Nano une fois le circuit assemblé.
- La carte nRF24L01 doit être placée dans le coin inférieur droit de la carte couvrant les huit positions de C1 à D5. Cela laissera le nRF24L01 suspendu au protoboard pour permettre une meilleure communication sans fil.
- La batterie du système de haut-parleurs alimente les deux protoboards, alors assurez-vous de connecter les deux rails/broches GND et les broches Vin de l'Arduino Nano à l'alimentation.
-
Pour le circuit « bas », le potentiomètre doit être placé sur le dessus de la carte face vers l'extérieur de sorte que ses broches soient placées aux positions J2, J4 et J6
- J2 ↔ Sortie Arduino Nano de la broche numérique 3 (D3)
- Broche de base J4 ↔ du transistor 2N3904
- J6 ↔ non connecté
-
Pour le circuit « haut », le potentiomètre doit être placé sur le bas de la carte face vers l'extérieur de sorte que ses broches soient placées aux positions J9, J11 et J13
- J13 ↔ Arduino Nano sortie de la broche numérique 3 (D3)
- Broche de base J11 ↔ du transistor 2N3904
- J9 ↔ non connecté
Étape 7: Logiciel de haut-parleur
Voici le code du haut-parleur communiquant avec le témoin gauche. Connectez l'Arduino Nano sur la carte de haut-parleur inférieure à votre ordinateur, ouvrez l'IDE Arduino, copiez et collez ce code dedans et téléchargez-le sur la carte.
#comprendre
#include #include radio RF24 (7, 8); // CE, CSN //témoin gauche, adresse d'octet const de la carte haut-parleur supérieure[6] = "00001"; const int pas = 2000; const int pitch_duration = 200; const int locuteur = 3; const int delay_gain = 100; état entier = 0; int cur_delay = 0; caractère lu[2]; void setup() { pinMode(haut-parleur, SORTIE); Serial.begin(115200); Serial.println("Démarrage de la communication sans fil…"); radio.begin(); radio.openReadingPipe(0, adresse); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { if(radio.available()) { radio.read(&read, sizeof(read)); status = (int)(read[0]-'0'); Serial.print("Reçu: "); Serial.println(statut); cur_delay = delay_gain*status; } if (cur_delay) { tone(speaker, pitch, pitch_duration); delay(cur_delay + pitch_duration); Serial.println("Bip !"); } }
Voici le code pour le haut-parleur communiquant avec le bon témoin. Connectez l'Arduino Nano sur la carte haut-parleur supérieure à votre ordinateur, ouvrez l'IDE Arduino, copiez et collez ce code dedans, et téléchargez-le sur la carte.
#comprendre
#include #include radio RF24 (7, 8); // CE, CSN //témoin droit, adresse d'octet const de la carte de haut-parleur inférieure[6] = "00010"; const int pas = 1500; const int pitch_duration = 200; const int locuteur = 3; const int delay_gain = 100; état entier = 0; int cur_delay = 0; caractère lu[2]; void setup() { pinMode(haut-parleur, SORTIE); Serial.begin(115200); Serial.println("Démarrage de la communication sans fil…"); radio.begin(); radio.openReadingPipe(0, adresse); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { if (radio.available()) { radio.read(&read, sizeof(read)); status = (int)(read[0]-'0'); Serial.print("Reçu: "); Serial.println(statut); cur_delay = delay_gain*status; } if (cur_delay) { tone(speaker, pitch, pitch_duration); delay(cur_delay+pitch_duration); Serial.println("Bip !"); } }
Étape 8: Assemblage du haut-parleur
Pièces individuelles
- 2 circuits de haut-parleurs construits
- 2 haut-parleurs
- 1 batterie
STL pour l'impression 3D
- Haut de la boîte
- Fond de boîte
Instructions d'assemblage physique
- Placez soigneusement les circuits des haut-parleurs dans le fond de la boîte, une carte au-dessus de l'autre de sorte que les boutons de volume soient côte à côte et glissent dans les trous. Les puces de communication doivent être exposées à l'arrière du boîtier.
- Placez les haut-parleurs à gauche et à droite du circuit imprimé, en vous assurant que les haut-parleurs correspondent aux bons côtés du témoin. Alignez les haut-parleurs sur les fentes sur les côtés de la boîte.
- Faites passer les fils de la batterie à travers le petit trou à l'arrière de la boîte. Epoxy (ou colle) la batterie à l'arrière de la boîte de manière à ce que l'interrupteur soit exposé.
- Placez le haut de la boîte imprimée en 3D sur le bas de la boîte pour tout contenir.
Étape 9: configuration/montage
- Allumez les témoins en basculant les interrupteurs des batteries sur la position « ON ». Faites de même pour l'ensemble haut-parleur afin d'activer le système de sortie.
- Le montage de témoins sonores se fait le plus facilement avec deux personnes, mais peut être fait avec une seule. Pour un montage sur foc non enrouleur, les témoins seraient plus facilement mis en place avant de hisser la voile.
- Pour vous assurer que le cadre du témoin est correctement orienté, regardez l'encoche sur l'une des barres verticales. Lorsque vous maintenez le cadre droit, l'encoche doit être vers le haut. Le côté du cadre avec cette barre doit également faire face à l'avant du bateau.
- Placez l'un des témoins à la hauteur et à la position souhaitées sur la voile. Il doit être placé de telle sorte que le fil soit au même endroit qu'il le serait s'il faisait partie d'un témoin traditionnel.
- Une fois que vous en avez un dans la position souhaitée. Placez l'autre témoin de l'autre côté de la voile, exactement à l'opposé du premier que vous avez placé, de sorte que les aimants s'alignent. Une fois que les aimants ont établi une connexion, ils doivent maintenir le cadre solidement à la voile. Alignez les aimants des boîtiers électroniques, pour chaque témoin de chaque côté de la voile, de sorte qu'ils se connectent également.
- Si vous remarquez que lorsque la ficelle revient tout droit, elle ne passe pas devant la porte supérieure, faites pivoter le cadre du témoin de telle sorte que la moitié arrière du cadre se dirige vers le bas. Faites pivoter le cadre jusqu'à ce que la ficelle passe à travers l'interrupteur photo supérieur lorsque le fil revient directement.
Étape 10: Dépannage
Tous les morceaux de code ont des instructions d'impression de débogage pour indiquer qu'ils envoient, reçoivent et traitent des données. L'ouverture du port COM à l'aide de l'IDE Arduino avec l'un des sous-systèmes Arduino Nano branché sur un ordinateur vous permettra d'afficher ces messages d'état.
Si le système ne fonctionne pas correctement, basculez les interrupteurs sur tous les composants.
Étape 11: Étapes suivantes possibles
- Imperméabilisation
- Communication à plus longue portée. Le WiFi est une option prometteuse.
- Notre configuration actuelle utilise actuellement 2 interrupteurs photo par témoin. L'ajout de plus d'interrupteurs photo au système pourrait être intéressant à essayer.
Conseillé:
Connaissance des circuits analogiques - Bricolage d'un circuit d'effets sonores d'horloge à retardement sans circuit intégré : 7 étapes (avec images)
Connaissance des circuits analogiques - Bricolage d'un circuit d'effets sonores d'horloge à retardement sans IC: Ce circuit d'effets sonores d'horloge à retardement a été construit uniquement avec des transistors, des résistances et des condensateurs sans aucun composant IC. Il est idéal pour vous d'apprendre les connaissances fondamentales du circuit par ce circuit pratique et simple. Le tapis nécessaire
Ray Gun avec effets sonores V2 : 17 étapes (avec photos)
Ray Gun With Sound Effects V2: Je suis récemment tombé sur une vieille perceuse dans un magasin de brocante et à l'instant où je l'ai vue, j'ai su que je devais en faire un pistolet à rayons. J'ai maintenant fabriqué quelques pistolets à rayons et ils commencent toujours par l'inspiration d'un objet trouvé. Vous pouvez consulter mes autres versions dans t
Klaxon de voiture - Effets sonores personnalisés : 4 étapes (avec photos)
Klaxon de voiture - Effets sonores personnalisés : j'ai installé des effets sonores de klaxon personnalisés dans ma voiture sur la base de vidéos YouTube de Mark Rober et j'aime faire des trucs. D'où je viens, le klaxon de voiture standard a un
Station éolienne pour la planche à voile basée sur MQTT et AWS : 3 étapes (avec photos)
Station éolienne pour la planche à voile basée sur MQTT et AWS : à Shenzhen, il y a beaucoup de belles plages. Pendant les jours d'été, mon sport préféré est la voile. Pour le sport de la voile, je suis toujours un débutant, j'aime la sensation de l'eau de mer qui touche mon visage, et plus, je me suis fait beaucoup de nouveaux amis avec ce sport. Mais fo
Attaque de moustache à bobine de voile : 14 étapes (avec photos)
Voil Coil Whisker Striker : Lors de la construction de pièces sonores électromécaniques, je trouve parfois que les solénoïdes sont trop forts pour les applications piézo-amplifiées et de ramassage à bobine. La bobine acoustique d'un vieux disque dur permet un contrôle précis d'un petit attaquant, en particulier la voiture mince