Inhoudsopgave:

Hoorbare telltales voor zeilen: 11 stappen
Hoorbare telltales voor zeilen: 11 stappen

Video: Hoorbare telltales voor zeilen: 11 stappen

Video: Hoorbare telltales voor zeilen: 11 stappen
Video: Part 2 - The Adventures of Tom Sawyer Audiobook by Mark Twain (Chs 11-24) 2024, November
Anonim
Image
Image
Telltale-hardware
Telltale-hardware

Telltales zijn touwtjes die bij het zeilen worden gebruikt om aan te geven of er turbulente of laminaire stroming over het zeil is. De verschillende gekleurde stukjes garen die aan elke kant van het zeil zijn bevestigd, zijn echter puur visuele indicatoren. Deze hoorbare telltales zijn een hulpmiddel dat tot doel heeft de visuele informatie in een auditieve vorm over te brengen voor zowel ziende als slechtziende zeilers, zoals Pauline.

Het apparaat bestaat uit een invoersysteem, dat de beweging van het verklikkerlichtje leest, en een uitvoersysteem, dat een reeks pieptonen uitzendt die informatie over de luchtstroom overbrengen.

Toegang tot soldeerapparatuur en een 3D-printer is vereist bij de fabricage van dit apparaat.

Stap 1: Stuklijst

Stuklijst met links en prijzen

Let op: je hebt 2 sets van al het volgende nodig.

Invoersysteem

  • Arduino Nano
  • Adafruit perma-proto half-sized breadboard PCB
  • nRF24L01 draadloze zendontvangermodule
  • Foto-onderbreker
  • Sparkfun Photo Interrupter Breakout Board
  • Arduino-compatibel 9V-batterijpakket
  • 9V batterij
  • Verschillende lengtes van 22 Gauge draad
  • Garen
  • Neodymium magneten
  • Epoxy

Uitgangssysteem

  • Arduino Nano
  • Adafruit perma-proto half-sized breadboard PCB
  • nRF24L01 draadloze zendontvangermodule
  • Arduino-compatibel 9V-batterijpakket
  • 1K Ohm potentiometer
  • 120 Ohm weerstand
  • 2N3904-transistor
  • 0.1 uF condensator
  • Arduino compatibele luidspreker

GitHub-bestanden

  • Alle code en STL-bestanden die nodig zijn om deze telltales te construeren, zijn te vinden in deze GitHub-repo.
  • Je hebt twee sets van de behuizing nodig en een van de luidsprekerbehuizingen.

Stap 2: Gereedschap/machines/softwarevereisten

Om de Arduino te programmeren, moet je de Arduino IDE downloaden. De downloadlink vind je hier.

Om de nRF24L01-module te programmeren, moet u de bibliotheek downloaden via de Arduino IDE. Extra > Bibliotheken beheren… > bibliotheek RF24 installeren

Om de elektronische componenten te monteren, is toegang tot basis soldeergereedschap vereist. Een desoldeerpomp kan ook nuttig zijn, maar is niet noodzakelijk.

Om het verklikkerframe en de luidsprekerbehuizing te bouwen, heeft u toegang nodig tot een 3D-printer.

Stap 3: Telltale-hardware

Telltale-hardware
Telltale-hardware
Telltale-hardware
Telltale-hardware

Stel de schakeling samen volgens de bovenstaande schema's. De Arduino Nano moet worden uitgelijnd met de bovenkant van het protoboard. Hierdoor heeft u toegang tot de USB-poort, zelfs nadat alle elektronica is aangesloten.

Om te voorkomen dat de elektronica wordt kortgesloten, moet u ervoor zorgen dat u de sporen van het protoboard snijdt in de rijen die de nRF24 zal innemen, zoals weergegeven in de afbeelding hierboven.

Anders heb je startkabels nodig om de nRF24 op het protoboard aan te sluiten.

De weerstandsaansluiting, GND en 5V-draden naar de fotoonderbreker zijn niet afgebeeld. Sluit de foto-onderbreker aan zoals aangegeven op het breakout-bord. Een afbeelding van het breakout board is bijgevoegd.

De circuits voor de rechter en linker telltales zijn precies hetzelfde.

Stap 4: Telltale-software

Hier is de code voor het juiste verklikkerlicht. Sluit de Right telltale's nano aan op uw computer, open de Arduino IDE, kopieer en plak deze code erin en upload deze naar het bord.

/** Programma dat photogate gebruikt om verklikkers te onderzoeken

*/ #include #include #include #include RF24 radio(9, 10); // CE, CSN const byte-adres [6] = "00010"; //---programma 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; // stel de var hierboven in op basis van uw eigen experimentele proeven 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 //---programma vars--- int num_string_seen = 0; int aantal_loops = 0; void setup() { //while(!Serial); // voor flora //vertraging(500); num_string_seen = 0; aantal_loops = 0; pinMode (GATE_PIN, INPUT); pinMode (GATE_PIN_2, INPUT); Serieel.begin(115200); // voor het debuggen van radio.begin(); radio.openWritingPipe(adres); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); } void loop() {// plaats hier je hoofdcode, om herhaaldelijk uit te voeren: if(num_loops % string_check_time == 0){ //check string state check_string(); } if (num_loops == flow_check_time) { // onderzoek stroom //Serial.println (num_string_seen); int flow_num = exam_flow(); // stuur waarden send_out (flow_num); // reset vars num_string_seen = 0; aantal_loops = 0; vertraging (flow_check_delay); } aantal_loops++; vertraging (base_delay); } /* *Methode om te controleren of string de poort passeert */ void check_string(){ int string_state = digitalRead(GATE_PIN); //Serial.println(string_state); if (string_state == 0){ num_string_seen++; //Serial.println ("Zag string!"); }

int bot_state = digitalRead (GATE_PIN_2);

if (bot_state == 0){ num_string_seen--; //Serial.println ("string aan de onderkant!"); } //Serial.print("Tellen string passeert: "); //Serial.println(num_string_seen); opbrengst; } /* * Methode om te analyseren welk deel van de tijd string de poort bedekte */ int exam_flow(){ double percent_seen = double(num_string_seen)/max_in_flow; Serial.print("Percentage gedekt: "); printDouble(percent_seen, 100); //schaal de waarde naar communicatieschaal 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)) * precisie; anders frac = (int(val)- val) * precisie; Serial.println(frac, DEC); }

Hier is de code voor het linker verklikkerlicht. Volg dezelfde stappen als hierboven voor het linker verklikkerlicht. Zoals u kunt zien, is het enige verschil het adres waarnaar de telltale zijn resultaten stuurt.

/** Programma dat photogate gebruikt om verklikkers te onderzoeken

*/ #include #include #include #include RF24 radio(9, 10); // CE, CSN const byte-adres [6] = "00001"; //---programma 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; // stel de var hierboven in op basis van uw eigen experimentele proeven 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 //---programma vars--- int num_string_seen = 0; int aantal_loops = 0; void setup() {//while(!Serial); // voor flora //vertraging(500); num_string_seen = 0; aantal_loops = 0;

pinMode (GATE_PIN, INPUT);

pinMode (GATE_PIN_2, INPUT); Serieel.begin(115200); // voor het debuggen van radio.begin(); radio.openWritingPipe(adres); radio.setPALevel(RF24_PA_MIN); radio.stopListening(); }void loop() { // plaats hier je hoofdcode, om herhaaldelijk uit te voeren: if(num_loops % string_check_time == 0){ //check string state check_string(); } if (num_loops == flow_check_time) { // onderzoek stroom //Serial.println (num_string_seen); int flow_num = exam_flow(); // stuur waarden send_out (flow_num); // reset vars num_string_seen = 0; aantal_loops = 0; vertraging (flow_check_delay); } aantal_loops++; vertraging (base_delay); } /* *Methode om te controleren of string de poort passeert */ void check_string(){ int string_state = digitalRead(GATE_PIN); //Serial.println(string_state); if (string_state == 0){ num_string_seen++; //Serial.println ("Zag string!"); }

int bot_state = digitalRead (GATE_PIN_2);

if (bot_state == 0){ num_string_seen--; //Serial.println ("string aan de onderkant!"); } //Serial.print("Tellen string passeert: "); //Serial.println(num_string_seen); opbrengst; } /* * Methode om te analyseren welke fractie van de tijd string de poort bedekte */ int exam_flow(){ double percent_seen = double(num_string_seen)/max_in_flow; Serial.print("Percentage gedekt: "); printDouble(percent_seen, 100); //schaal de waarde naar communicatieschaal 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)) * precisie; anders frac = (int(val)- val) * precisie; Serial.println(frac, DEC); }

Stap 5: Telltale Montage

Telltale Montage
Telltale Montage

Individuele onderdelen

  • Telltale frame
  • Garen
  • Geconstrueerd verklikkercircuit
  • Batterijpakket
  • Elektrische tape
  • Epoxy of lijm

STL's voor het 3D-printen van veelbetekenende componenten

  • STL voor verklikkerframe: links, rechts
  • STL's voor elektronicabox: boven, onder

Montage-instructies:

  1. Plaats staafmagneten in de sleuven van het 3D-geprinte verklikkerframe. Zorg ervoor dat de magneten goed zijn uitgelijnd tussen het rechterframe en het linkerframe en gebruik vervolgens epoxy (of lijm) om de magneten aan het frame te bevestigen. Laat epoxy (of lijm) volledig uitharden.
  2. Plaats de fotoonderbrekers in de bovenste en onderste sleuven aan de achterkant van het frame. Epoxy (of lijm) de fotoonderbrekerplaten voorzichtig op het frame. Laat epoxy (of lijm) volledig uitharden
  3. Knip een stuk garen van ~7 af. Bind het ene uiteinde van het garen bij de inkeping van de eerste verticale balk. Knip een klein stukje elektrische tape af en wikkel de elektrische tape over het gedeelte van het garen dat zich in het gebied van de fotoonderbrekers bevindt. Rijg het garen door het frame zodat het door de opening van de fotoonderbrekerpoort gaat.
  4. Plaats staafmagneten in de sleuven van de 3D-geprinte elektronicaboxbodem. Zorg ervoor dat de magneten goed zijn uitgelijnd tussen de rechter doos en de linker doos en gebruik vervolgens epoxy (of lijm) om de magneten aan het frame te bevestigen. Laat epoxy (of lijm) volledig uitharden.
  5. Plaats het geconstrueerde verklikkercircuit in de elektronicadoos en lijn de verschillende componenten uit met hun slots. Sluit de doos af met de bovenkant van de 3D-geprinte elektronicadoos. Epoxy (of lijm) het batterijpakket op de bovenkant van de doos, zodat de schakelaar zichtbaar is.

Stap 6: Luidsprekerhardware

Luidsprekerhardware
Luidsprekerhardware
Luidsprekerhardware
Luidsprekerhardware
Luidsprekerhardware
Luidsprekerhardware

Het uitgangssysteem bestaat uit twee luidsprekercircuits, één voor elk verklikkerlicht, uitgerust met draadloze communicatie en een volumeregelknop. Maak eerst de protoboards klaar voor gebruik met de nRF24L01-modules zoals we deden voor de veelbetekenende circuits door de kabels door te snijden die de twee rijen pinnen scheiden waar het bord zal worden geplaatst.

Monteer vervolgens het circuit zoals weergegeven in het bovenstaande diagram en verwijs naar de foto's van de voltooide circuits.

Board montage-instructies:

Om de borden in de luidsprekerbehuizing te stapelen, moeten de hoofdcomponenten in bepaalde delen van het bord worden geplaatst. In de volgende instructies zal ik verwijzen naar het coördinatensysteem dat wordt gebruikt om rijen en kolommen op het Adafruit-protoboard aan te duiden:

  1. De Arduino Nano moet in het midden tegen de bovenrand van het bord worden geplaatst, zodat de Vin-pin op G16 staat. Dit maakt een eenvoudige herprogrammering van de Arduino Nano mogelijk nadat het circuit is geassembleerd.
  2. Het nRF24L01-bord moet in de rechterbenedenhoek van het bord worden geplaatst, verspreid over de acht posities van C1 tot D5. Hierdoor blijft de nRF24L01 aan het protoboard hangen voor een betere draadloze communicatie.
  3. Het batterijpakket voor het luidsprekersysteem voedt beide protoboards, dus zorg ervoor dat u de twee Arduino Nano's GND-rails/-pinnen en Vin-pinnen op de voeding aansluit.
  4. Voor het 'onderste' circuit moet de potentiometer op de bovenkant van het bord naar buiten gericht worden geplaatst, zodat de pinnen op de posities J2, J4 en J6 worden geplaatst

    1. J2 ↔ Arduino Nano-uitgang van digitale pin 3 (D3)
    2. J4 ↔ basispen van 2N3904 transistor
    3. J6 (niet aangesloten)
  5. Voor het 'top'-circuit moet de potentiometer op de onderkant van het bord naar buiten gericht worden geplaatst, zodat de pinnen op de posities J9, J11 en J13 worden geplaatst

    1. J13 ↔ Arduino Nano-uitgang van digitale pin 3 (D3)
    2. J11 ↔ basispin van 2N3904 transistor
    3. J9 (niet aangesloten)

Stap 7: Luidsprekersoftware

Hier is de code voor de spreker die communiceert met het linker verklikkerlicht. Sluit de Arduino Nano op het onderste luidsprekerbord aan op uw computer, open de Arduino IDE, kopieer en plak deze code erin en upload deze naar het bord.

#erbij betrekken

#include #include RF24-radio(7, 8); // CE, CSN // linker verklikkerlicht, bovenste luidsprekerbord const byte-adres [6] = "00001"; const int toonhoogte = 2000; const int pitch_duration = 200; const int spreker = 3; const int delay_gain = 100; int-status = 0; int cur_delay = 0; char lezen [2]; void setup () { pinMode (luidspreker, OUTPUT); Serieel.begin(115200); Serial.println("Beginnen van draadloze communicatie…"); radio.begin(); radio.openReadingPipe(0, adres); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { if(radio.available()) { radio.read(&read, sizeof(read)); status = (int)(lees[0]-'0'); Serial.print("Ontvangen: "); Serieel.println(status); cur_delay = delay_gain*status; } if (cur_delay) { tone (speaker, pitch, pitch_duration); vertraging (cur_delay + pitch_duration); Serial.println("Piep!"); } }

Hier is de code voor de spreker die communiceert met de juiste verklikker. Sluit de Arduino Nano op het bovenste luidsprekerbord aan op uw computer, open de Arduino IDE, kopieer en plak deze code erin en upload deze naar het bord.

#erbij betrekken

#include #include RF24-radio(7, 8); // CE, CSN //rechter verklikkerlicht, onderste luidsprekerbord const byte-adres [6] = "00010"; const int toonhoogte = 1500; const int pitch_duration = 200; const int spreker = 3; const int delay_gain = 100; int-status = 0; int cur_delay = 0; char lezen [2]; void setup () { pinMode (luidspreker, OUTPUT); Serieel.begin(115200); Serial.println("Beginnen van draadloze communicatie…"); radio.begin(); radio.openReadingPipe(0, adres); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { if (radio.available()) { radio.read(&read, sizeof(read)); status = (int)(lees[0]-'0'); Serial.print("Ontvangen: "); Serieel.println(status); cur_delay = delay_gain*status; } if (cur_delay) { tone (speaker, pitch, pitch_duration); vertraging (cur_delay+pitch_duration); Serial.println("Piep!"); } }

Stap 8: Luidsprekermontage

Individuele onderdelen

  • 2 geconstrueerde luidsprekercircuits
  • 2 luidsprekers
  • 1 batterijpakket

STL's voor 3D-printen

  • Bovenkant van de doos
  • Doos bodem

Instructies voor fysieke montage

  1. Plaats de luidsprekercircuits voorzichtig in de bodem van de doos, het ene bord op het andere, zodat de volumeknoppen naast elkaar zitten en in de gaten glijden. De communicatiechips moeten aan de achterkant van de doos zichtbaar zijn.
  2. Plaats de luidsprekers links en rechts op de printplaat en zorg ervoor dat de luidsprekers overeenkomen met de juiste veelbetekenende kanten. Lijn de luidsprekers uit met de sleuven aan de zijkanten van de doos.
  3. Voer de draden van het batterijpakket door het kleine gaatje aan de achterkant van de doos. Epoxy (of lijm) het batterijpakket aan de achterkant van de doos, zodat de schakelaar zichtbaar is.
  4. Plaats de bovenkant van de 3D-geprinte doos over de onderkant van de doos om alles te bevatten.

Stap 9: Installatie/montage

Opstelling/montage
Opstelling/montage
  1. Schakel de telltales in door de schakelaars op de accu's in de 'AAN'-stand te zetten. Doe hetzelfde voor de luidsprekereenheid om het uitvoersysteem in te schakelen.
  2. Het monteren van akoestische telltales gaat het gemakkelijkst met twee personen, maar kan ook met één. Voor montage op een niet-rolfok, zouden de telltales het gemakkelijkst kunnen worden aangebracht voordat het zeil wordt gehesen.
  3. Om er zeker van te zijn dat het verklikkerframe correct is georiënteerd, kijkt u naar de inkeping op een van de verticale balken. Als u het frame rechtop houdt, moet de inkeping naar boven gericht zijn. De zijkant van het frame met die balk moet ook naar de voorkant van de boot wijzen.
  4. Plaats een van de tell tales op de gewenste hoogte en positie op het zeil. Het moet zo worden geplaatst dat het garen zich op dezelfde plaats bevindt als het zou zijn als het deel uitmaakte van een traditioneel verklikkerlicht.
  5. Zodra je een verklikker in de gewenste positie hebt. Plaats de andere verklikker aan de andere kant van het zeil, precies tegenover de eerste die je hebt geplaatst, zodat de magneten op één lijn liggen. Zodra de magneten een verbinding maken, moeten ze het frame stevig aan het zeil houden. Lijn de magneten van de elektronicabehuizingen uit, voor elk verklikkerlicht aan weerszijden van het zeil, zodat ze ook aansluiten.
  6. Als u merkt dat wanneer het touw recht naar achteren stroomt, het niet voor de bovenste poort kruist, draait u het verklikkerframe zodanig dat de achterste helft van het frame naar beneden wijst. Draai het frame totdat de draad door de bovenste foto-onderbreker gaat wanneer het garen recht terugvloeit.

Stap 10: Problemen oplossen

Alle stukjes code hebben debug-afdrukinstructies om aan te geven dat ze gegevens verzenden, ontvangen en verwerken. Door de COM-poort te openen met behulp van de Arduino IDE met een van de Arduino Nano-subsystemen aangesloten op een computer, kunt u deze statusberichten bekijken.

Als het systeem niet goed werkt, zet u de schakelaars op alle componenten om.

Stap 11: Mogelijke volgende stappen

  • Waterdichting
  • Communicatie op langere afstand. WiFi is een veelbelovende optie.
  • Onze huidige opstelling gebruikt momenteel 2 fotoonderbrekers per verklikkerlicht. Het kan interessant zijn om meer foto-onderbrekers aan het systeem toe te voegen.

Aanbevolen: