Cuprins:

Povesti sonore pentru navigație: 11 pași
Povesti sonore pentru navigație: 11 pași

Video: Povesti sonore pentru navigație: 11 pași

Video: Povesti sonore pentru navigație: 11 pași
Video: Navigatia android se aude incet, Sunet navigatie slab. Sound of android head unit navigation low. 2024, Noiembrie
Anonim
Image
Image
Hardware Telltale
Hardware Telltale

Povestile sunt bucăți de sfoară folosite în navigație pentru a indica dacă există curgere turbulentă sau laminară pe vela. Cu toate acestea, diferitele bucăți de fire atașate de fiecare parte a pânzei sunt indicatori pur vizuali. Aceste povesti sonore sunt un dispozitiv de asistență care are ca scop comunicarea informațiilor vizuale într-o formă auditivă atât pentru marinarii cu vedere cât și pentru cei cu deficiențe de vedere, cum ar fi Pauline.

Dispozitivul constă dintr-un sistem de intrare, care citește mișcarea indicatorului, și un sistem de ieșire, care emite o serie de bipuri care transmit informații despre fluxul de aer.

Accesul la echipamentele de lipit și la o imprimantă 3D este necesar în fabricarea acestui dispozitiv.

Pasul 1: Lista materialelor

BOM cu linkuri și prețuri

Notă: veți avea nevoie de 2 seturi din toate următoarele.

Sistem de intrare

  • Arduino Nano
  • Adafruit perma-proto PCB de jumătate de dimensiune
  • nRF24L01 Modul de emisie-recepție fără fir
  • Întrerupător foto
  • Sparkfun Photo Interrupter Breakout Board
  • Acumulator compatibil Arduino de 9V
  • Baterie de 9V
  • Câteva lungimi de sârmă 22 Gauge
  • Fire
  • Magneți de neodim
  • Epoxidic

Sistem de ieșire

  • Arduino Nano
  • Adafruit perma-proto PCB de jumătate de panou
  • nRF24L01 Modul de emisie-recepție fără fir
  • Acumulator compatibil Arduino de 9V
  • Potențiometru 1K Ohm
  • Rezistor de 120 Ohm
  • 2N3904 tranzistor
  • 0,1 uF condensator
  • Difuzor compatibil Arduino

Fișiere GitHub

  • Toate fișierele de cod și STL necesare pentru a construi aceste povești pot fi găsite în această repo GitHub.
  • Veți avea nevoie de două seturi de carcase și unul din carcasa difuzoarelor.

Pasul 2: Instrumente / Mașini / Cerințe software

Pentru a programa Arduino va trebui să descărcați ID-ul Arduino. Link-ul de descărcare poate fi găsit aici.

Pentru a programa modulul nRF24L01, va trebui să descărcați biblioteca acestuia prin ID-ul Arduino. Instrumente> Gestionați bibliotecile …> instalați biblioteca RF24

Pentru asamblarea componentelor electronice este necesar accesul la instrumentele de lipit de bază. O pompă de desudare poate fi, de asemenea, utilă, dar nu este necesară.

Pentru a construi cadrul de povestire și carcasa difuzorului, veți avea nevoie de acces la o imprimantă 3D.

Pasul 3: Hardware Telltale

Hardware Telltale
Hardware Telltale
Hardware Telltale
Hardware Telltale

Asamblați circuitul conform diagramelor de mai sus. Arduino Nano ar trebui aliniat cu partea superioară a protoboardului. Acest lucru vă permite să aveți acces la portul USB chiar și după ce toate componentele electronice sunt atașate.

Pentru a evita scurtcircuitarea componentelor electronice, asigurați-vă că tăiați urmele protoboardului pe rândurile pe care nRF24 le va ocupa așa cum se arată în imaginea de mai sus.

În caz contrar, veți avea nevoie de cabluri jumper pentru a conecta nRF24 la protoboard.

Conexiunea rezistorului, firele GND și 5V la întrerupătorul foto nu sunt prezentate. Conectați întrerupătorul foto așa cum este indicat pe panoul său. Este inclusă o imagine a panoului de repartizare.

Circuitele pentru indicatoarele din dreapta și din stânga sunt exact aceleași.

Pasul 4: Software Telltale

Iată codul pentru povestea corectă. Conectați nano-ul indicatorului corect la computer, deschideți IDE-ul Arduino, copiați și lipiți acest cod în el și încărcați-l pe tablă.

/ ** Program care folosește photogate pentru a examina povestea

* / #include #include #include #include radio RF24 (9, 10); // CE, adresa CS byte const [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; // setați varul de mai sus pe baza propriilor încercări experimentale 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 num_loops = 0; void setup () {// while (! Serial); // pentru flora // delay (500); num_string_seen = 0; num_loops = 0; pinMode (GATE_PIN, INPUT); pinMode (GATE_PIN_2, INPUT); Serial.begin (115200); // pentru depanare radio.begin (); radio.openWritingPipe (adresa); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// puneți codul principal aici, pentru a rula în mod repetat: if (num_loops% string_check_time == 0) {// verificați starea șirului check_string (); } if (num_loops == flow_check_time) {// examine flow //Serial.println(num_string_seen); int flow_num = examine_flow (); // trimite valori send_out (flow_num); // reset vars num_string_seen = 0; num_loops = 0; întârziere (flow_check_delay); } num_loops ++; întârziere (întârziere_bază); } / * * Metodă pentru a verifica dacă șirul traversează poarta * / void check_string () {int string_state = digitalRead (GATE_PIN); //Serial.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("string on bottom! "); } //Serial.print("Counting string passes: "); //Serial.println(num_string_seen); întoarcere; } / * * Metodă pentru a analiza ce fracțiune din șirul de timp a acoperit poarta * / int examine_flow () {double percent_seen = double (num_string_seen) / max_in_flow; Serial.print („Procent acoperit:”); printDouble (percent_seen, 100); // scalați valoarea la scara de comunicare 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)) * precizie; else frac = (int (val) - val) * precizie; Serial.println (frac, DEC); }

Iată codul pentru povestea din stânga. Urmați aceiași pași ca mai sus pentru povestea din stânga. După cum puteți vedea, singura diferență este adresa la care indicatorul își trimite rezultatele.

/ ** Program care folosește photogate pentru a examina povestea

* / #include #include #include #include radio RF24 (9, 10); // CE, CSN adresa de octet const [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; // setați varul de mai sus pe baza propriilor teste experimentale 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 num_loops = 0; void setup () {// while (! Serial); // pentru flora // delay (500); num_string_seen = 0; num_loops = 0;

pinMode (GATE_PIN, INPUT);

pinMode (GATE_PIN_2, INPUT); Serial.begin (115200); // pentru depanare radio.begin (); radio.openWritingPipe (adresa); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// puneți codul principal aici, pentru a rula în mod repetat: if (num_loops% string_check_time == 0) {// verificați starea șirului check_string (); } if (num_loops == flow_check_time) {// examine flow //Serial.println(num_string_seen); int flow_num = examine_flow (); // trimite valori send_out (flux_num); // reset vars num_string_seen = 0; num_loops = 0; întârziere (flow_check_delay); } num_loops ++; întârziere (întârziere_bază); } / * * Metodă pentru a verifica dacă șirul traversează poarta * / void check_string () {int string_state = digitalRead (GATE_PIN); //Serial.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("string on bottom! "); } //Serial.print("Counting string passes: "); //Serial.println(num_string_seen); întoarcere; } / * * Metodă pentru a analiza ce fracțiune din șirul de timp a acoperit poarta * / int examine_flow () {double percent_seen = double (num_string_seen) / max_in_flow; Serial.print („Procent acoperit:”); printDouble (percent_seen, 100); // scalați valoarea la scara de comunicare 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)) * precizie; else frac = (int (val) - val) * precizie; Serial.println (frac, DEC); }

Pasul 5: Adunarea Telltale

Adunarea povestitoare
Adunarea povestitoare

Piese individuale

  • Cadru de poveste
  • Fire
  • Circuit de poveste construit
  • Acumulator
  • Bandă electrică
  • Epoxidic sau lipici

STL-uri pentru componente de poveste de imprimare 3D

  • STL pentru cadru indicativ: stânga, dreapta
  • STL-uri pentru cutie electronică: sus, jos

Instrucțiuni de asamblare

  1. Așezați magneți de bare în sloturile cadrului indicativ imprimat 3D. Asigurați-vă că magneții se aliniază corect între cadrul drept și cadrul stâng, apoi folosiți epoxidic (sau lipici) pentru a fixa magneții pe cadru. Permiteți epoxidului (sau lipiciului) să se fixeze complet.
  2. Așezați întrerupătoarele foto în sloturile superioare și inferioare din spatele cadrului. Îndepărtați cu grijă (sau lipiți) plăcile de întrerupere foto pe cadru. Permiteți epoxidului (sau lipiciului) să se fixeze complet
  3. Tăiați o bucată de fire de aproximativ 7. Legați un capăt al firului la crestătura primei bare verticale. Tăiați o bucată mică de bandă electrică și înfășurați banda electrică peste secțiunea firului care va fi în regiunea întrerupătoarelor foto. Infilați firul prin cadru, astfel încât acesta să treacă prin golul porții de întrerupere foto.
  4. Așezați magneții de bare în sloturile din partea inferioară a cutiei electronice imprimate 3D. Asigurați-vă că magneții se aliniază corect între cutia din dreapta și cea din stânga, apoi folosiți epoxidic (sau lipici) pentru a fixa magneții pe cadru. Permiteți epoxidului (sau lipiciului) să se fixeze complet.
  5. Așezați circuitul indicativ construit în cutia electronică, alinierea diferitelor componente la sloturile lor. Închideți cutia cu partea superioară a cutiei electronice imprimate 3D. Epoxidic (sau lipici) acumulatorul la partea superioară a cutiei, astfel încât întrerupătorul să fie expus.

Pasul 6: Hardware difuzoare

Hardware pentru difuzoare
Hardware pentru difuzoare
Hardware pentru difuzoare
Hardware pentru difuzoare
Hardware pentru difuzoare
Hardware pentru difuzoare

Sistemul de ieșire este format din două circuite de difuzoare, unul pentru fiecare poveste, echipat cu comunicație fără fir și un buton de reglare a volumului. Mai întâi, pregătiți plăcile de protecție pentru utilizare cu modulele nRF24L01, așa cum am făcut pentru circuitele indicatoare, tăind cablurile separând cele două rânduri de pini în care va fi plasată placa.

Apoi, asamblați circuitul așa cum se arată în diagrama de mai sus, în timp ce faceți referire la fotografiile circuitelor finalizate.

Instrucțiuni de asamblare a consiliului

Pentru a stiva plăcile în carcasa difuzoarelor, componentele principale trebuie amplasate în anumite zone ale plăcii. În instrucțiunile următoare, mă voi referi la sistemul de coordonate utilizat pentru a indica rândurile și coloanele de pe protoboardul Adafruit:

  1. Arduino Nano trebuie așezat de marginea superioară a plăcii în centru, astfel încât pinul Vin să fie poziționat la G16. Acest lucru va permite reprogramarea ușoară a Arduino Nano după asamblarea circuitului.
  2. Placa nRF24L01 trebuie amplasată în colțul din dreapta jos al plăcii care acoperă cele opt poziții de la C1 la D5. Acest lucru va lăsa nRF24L01 atârnat de protoboard pentru a permite o mai bună comunicare wireless.
  3. Pachetul de baterii pentru sistemul de difuzoare alimentează ambele protoboarde, deci asigurați-vă că conectați cele două șine / pini GND Arduino Nano și pini Vin la sursa de alimentare.
  4. Pentru circuitul „de jos”, potențiometrul trebuie așezat pe partea superioară a plăcii orientate spre exterior, astfel încât pinii să fie așezați în pozițiile J2, J4 și J6

    1. J2 ↔ Arduino Nano ieșire de la pinul digital 3 (D3)
    2. J4 ↔ pinul de bază al tranzistorului 2N3904
    3. J6 ↔ neconectat
  5. Pentru circuitul „de sus”, potențiometrul trebuie așezat pe partea inferioară a plăcii orientate spre exterior, astfel încât pinii să fie așezați în pozițiile J9, J11 și J13

    1. J13 ↔ Arduino Nano ieșire de la pinul digital 3 (D3)
    2. J11 ↔ pinul de bază al tranzistorului 2N3904
    3. J9 ↔ neconectat

Pasul 7: Software pentru difuzoare

Iată codul pentru difuzorul care comunică cu povestea din stânga. Conectați Arduino Nano de pe placa de difuzoare de jos la computer, deschideți Arduino IDE, copiați și lipiți acest cod în el și încărcați-l pe placa.

#include

#include #include radio RF24 (7, 8); // CE, CSN // stânga poveste, placa de difuzor de sus adresa de octet const [6] = "00001"; const int pitch = 2000; const int pitch_duration = 200; difuzor int int = 3; const int delay_gain = 100; int status = 0; int cur_delay = 0; caractere citite [2]; void setup () {pinMode (difuzor, OUTPUT); Serial.begin (115200); Serial.println („Pornirea comunicației fără fir …”); radio.begin (); radio.openReadingPipe (0, adresa); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& read, sizeof (read)); status = (int) (citiți [0] - '0'); Serial.print ("Primit:"); Serial.println (status); cur_delay = delay_gain * status; } if (cur_delay) {ton (difuzor, pitch, pitch_duration); întârziere (cur_delay + pitch_duration); Serial.println ("Beep!"); }}

Iată codul pentru difuzorul care comunică cu povestea potrivită. Conectați Arduino Nano de pe placa de difuzor de sus la computer, deschideți ID-ul Arduino, copiați și lipiți acest cod în el și încărcați-l pe placa.

#include

#include #include radio RF24 (7, 8); // CE, CSN // poveste dreaptă, placa difuzoare inferioară const byte address [6] = "00010"; const int pitch = 1500; const int pitch_duration = 200; difuzor int int = 3; const int delay_gain = 100; int status = 0; int cur_delay = 0; caractere citite [2]; void setup () {pinMode (difuzor, OUTPUT); Serial.begin (115200); Serial.println („Pornirea comunicației fără fir …”); radio.begin (); radio.openReadingPipe (0, adresa); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& read, sizeof (read)); status = (int) (citiți [0] - '0'); Serial.print ("Primit:"); Serial.println (status); cur_delay = delay_gain * status; } if (cur_delay) {ton (difuzor, pitch, pitch_duration); întârziere (cur_delay + pitch_duration); Serial.println ("Beep!"); }}

Pasul 8: Adunarea vorbitorului

Piese individuale

  • 2 circuite de difuzoare construite
  • 2 difuzoare
  • 1 acumulator

STL-uri pentru imprimare 3D

  • Topul cutiei
  • Caseta de jos

Instrucțiuni de asamblare fizică

  1. Așezați cu grijă circuitele difuzoarelor în partea de jos a cutiei, o placă deasupra celeilalte, astfel încât butoanele de volum să fie una lângă alta și să alunece în găuri. Cipurile de comunicare ar trebui să fie expuse în partea din spate a cutiei.
  2. Așezați difuzoarele în stânga și în dreapta plăcii de circuit, asigurându-vă că difuzoarele corespund părților indicatoare corecte. Aliniați difuzoarele la sloturile de pe părțile laterale ale cutiei.
  3. Introduceți firele acumulatorului prin orificiul mic din partea din spate a cutiei. Epoxidic (sau lipici) acumulatorul din spatele cutiei astfel încât comutatorul să fie expus.
  4. Așezați caseta tipărită 3D deasupra casetei pentru a conține totul.

Pasul 9: Configurare / Montare

Configurare / montare
Configurare / montare
  1. Porniți indicatoarele răsucind întrerupătoarele de pe acumulatori în poziția „PORNIT”. Faceți același lucru pentru ansamblul difuzorului pentru a porni sistemul de ieșire.
  2. Montarea de povești sonore se face cel mai ușor cu două persoane, dar se poate face cu una. Pentru montarea pe un braț care nu se învârte, poveștile ar fi cel mai ușor de pus înainte de a ridica pânza.
  3. Pentru a vă asigura că cadrul de poveste este orientat corect, uitați-vă la crestătura de pe una dintre barele verticale. Când țineți cadrul în poziție verticală, crestătura trebuie să fie în partea de sus. Partea cadrului cu bara respectivă ar trebui să fie orientată și spre partea din față a bărcii.
  4. Așezați una dintre povești la înălțimea și poziția dorite pe pânză. Ar trebui să fie așezat astfel încât firele să fie în același loc în care ar fi dacă ar face parte dintr-o poveste tradițională.
  5. Odată ce ai o poveste în poziția dorită. Așezați cealaltă poveste pe cealaltă parte a pânzei, exact opusă celei pe care ați plasat-o, astfel încât magneții să se alinieze. Odată ce magneții fac o conexiune, ar trebui să țină rama în siguranță la pânză. Aliniați magneții carcaselor electronice, pentru fiecare poveste de ambele părți ale pânzei, astfel încât să se conecteze și ele.
  6. Dacă observați că atunci când șirul curge drept în spate nu traversează în fața porții superioare, rotiți cadrul de poveste astfel încât jumătatea din spate a cadrului să se îndrepte în jos. Rotiți cadrul până când șirul trece prin întrerupătorul foto superior când firul curge drept înapoi.

Pasul 10: Depanare

Toate bucățile de cod au instrucțiuni de imprimare de depanare pentru a indica faptul că trimit, primesc și procesează date. Deschiderea portului COM utilizând Arduino IDE cu unul dintre subsistemele Arduino Nano conectate la un computer vă va permite să vizualizați aceste mesaje de stare.

Dacă sistemul nu funcționează corect, comutați comutatoarele pe toate componentele.

Pasul 11: Pașii următori posibili

  • Impermeabilizare
  • Comunicare pe distanțe mai mari. WiFi este o opțiune promițătoare.
  • Configurarea noastră actuală folosește în prezent 2 întrerupătoare foto pe poveste. Adăugarea mai multor întrerupătoare foto la sistem ar putea fi interesantă de încercat.

Recomandat: