Turinys:

Garsiniai signaliniai buriavimo signalai: 11 žingsnių
Garsiniai signaliniai buriavimo signalai: 11 žingsnių

Video: Garsiniai signaliniai buriavimo signalai: 11 žingsnių

Video: Garsiniai signaliniai buriavimo signalai: 11 žingsnių
Video: Prevencinė priemonė „Šviesos ir garso signalai" Tauragėje 2024, Liepa
Anonim
Image
Image
Įspėjamoji aparatinė įranga
Įspėjamoji aparatinė įranga

Signalinės lemputės yra stygos gabalai, naudojami buruojant, siekiant parodyti, ar per burę yra neramus ar laminarinis srautas. Tačiau skirtingų spalvų siūlų gabalai, pritvirtinti prie kiekvienos burės pusės, yra tik vizualūs rodikliai. Šios garsinės signalinės lemputės yra pagalbinis įtaisas, kurio tikslas-perduoti regimąją informaciją girdima forma tiek regintiems, tiek silpnaregiams buriuotojams, tokiems kaip Pauline.

Prietaisą sudaro įvesties sistema, kuri nuskaito indikatoriaus judesį, ir išvesties sistema, skleidžianti keletą pyptelėjimų, perduodančių informaciją apie oro srautą.

Gaminant šį prietaisą būtina prieiga prie litavimo įrangos ir 3D spausdintuvo.

1 žingsnis: medžiagų sąrašas

BOM su nuorodomis ir kainomis

Pastaba: jums reikės 2 visų šių rinkinių.

Įvesties sistema

  • Arduino Nano
  • Adafruit perma-proto pusės dydžio duonos plokštės PCB
  • „nRF24L01“belaidžio siųstuvo -imtuvo modulis
  • Nuotraukų pertraukiklis
  • „Sparkfun“nuotraukų pertraukiklio pertraukimo lenta
  • „Arduino“suderinama 9 V baterija
  • 9V baterija
  • Kelių ilgių 22 gabaritų viela
  • Verpalai
  • Neodimio magnetai
  • Epoksidinė

Išvesties sistema

  • Arduino Nano
  • Adafruit perma-proto pusės dydžio duonos plokštės PCB
  • „nRF24L01“belaidžio siųstuvo -imtuvo modulis
  • „Arduino“suderinama 9 V baterija
  • 1K omo potenciometras
  • 120 omų rezistorius
  • 2N3904 tranzistorius
  • 0,1 uF kondensatorius
  • „Arduino“suderinamas garsiakalbis

„GitHub“failai

  • Visą kodą ir STL failus, reikalingus šiems įspėjamiesiems signalams sukurti, galite rasti šioje „GitHub“repo.
  • Jums reikės dviejų korpuso komplektų ir vieno garsiakalbio korpuso.

2 veiksmas: įrankiai/mašinos/programinės įrangos reikalavimai

Norėdami užprogramuoti „Arduino“, turėsite atsisiųsti „Arduino IDE“. Atsisiuntimo nuorodą rasite čia.

Norėdami užprogramuoti modulį nRF24L01, turėsite atsisiųsti jo biblioteką per „Arduino IDE“. Įrankiai> Tvarkyti bibliotekas …> įdiegti biblioteką RF24

Norint surinkti elektroninius komponentus, reikalinga prieiga prie pagrindinių litavimo įrankių. Lydymosi siurblys taip pat gali būti naudingas, bet nebūtinas.

Norėdami sukurti signalinį rėmelį ir garsiakalbio korpusą, jums reikės prieigos prie 3D spausdintuvo.

3 žingsnis: signalinė aparatinė įranga

Įspėjamoji aparatinė įranga
Įspėjamoji aparatinė įranga
Įspėjamoji aparatinė įranga
Įspėjamoji aparatinė įranga

Surinkite grandinę pagal aukščiau pateiktas schemas. „Arduino Nano“turėtų būti suderintas su protoboad viršumi. Tai leidžia pasiekti USB prievadą net ir tada, kai prijungta visa elektronika.

Kad išvengtumėte elektronikos trumpėjimo, būtinai nupjaukite protobooto pėdsakus eilėse, kurias nRF24 užims, kaip parodyta aukščiau esančiame paveikslėlyje.

Priešingu atveju, norint prijungti „nRF24“prie „protoboard“, jums reikės trumpųjų kabelių.

Rezistoriaus jungtis, GND ir 5V laidai prie nuotraukų pertraukiklio nėra pavaizduoti. Prijunkite nuotraukų pertraukiklį, kaip nurodyta jo pertraukimo lentoje. Pridedamas pertraukimo lentos vaizdas.

Dešinės ir kairės signalinių signalų grandinės yra visiškai vienodos.

4 žingsnis: signalinė programinė įranga

Čia yra tinkamo signalinio signalo kodas. Prijunkite dešiniojo signalo lemputę prie kompiuterio, atidarykite „Arduino IDE“, nukopijuokite ir įklijuokite šį kodą į jį ir įkelkite į lentą.

/** Programa, kuri naudoja foto vartus, kad patikrintų signalines lemputes

*/ #include #include #include #include RF24 radijas (9, 10); // CE, CSN konstituotas baitų adresas [6] = "00010"; // --- programos privalumai --- // laiko konst int 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 = srauto tikrinimo laikas * 0,6; // nustatykite kintamąjį aukščiau, remdamiesi savo eksperimentiniais bandymais 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 // --- programa vars --- int num_string_seen = 0; int num_loops = 0; void setup () {// while (! Serial); // florai // uždelsimas (500); num_string_seen = 0; num_loops = 0; pinMode (GATE_PIN, INPUT); pinMode (GATE_PIN_2, INPUT); Serial.begin (115200); // radijo derinimui.begin (); radio.openWritingPipe (adresas); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// čia įdėkite pagrindinį kodą, kad jis būtų paleistas pakartotinai: if (num_loops % string_check_time == 0) {// patikrinkite eilutės būseną check_string (); } if (num_loops == flow_check_time) {// nagrinėti srautą //Serial.println(num_string_seen); int srauto_num = nagrinėti_trauką (); // siųsti reikšmes send_out (flow_num); // atstatyti vars num_string_seen = 0; num_loops = 0; uždelsimas (srauto patikrinimo atidėjimas); } num_loops ++; uždelsimas (base_delay); } / * *Metodas patikrinti, ar eilutė kerta vartus * / 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 (" eilutė apačioje! "); } //Serijinis.printas ("Skaičiuoti eilutes: "); //Serial.println(num_string_seen); grįžti; }/ * * Metodas analizuoti, kokia laiko eilutės dalis uždengė vartus */int exam_flow () {double percent_seen = double (num_string_seen)/max_in_flow; Serial.print („Apimtas procentas:“); printDouble (procentas_matytas, 100); // mastelio keitimas į komunikacijos skalę int scaled_flow = int (procentai_matyti * msg_max_val); if (scaled_flow> msg_max_val) {scaled_flow = msg_max_val; } if (mastelio_srautas = 0) frac = (val - int (val)) * tikslumas; else frac = (int (val)- val) * tikslumas; Serial.println (frac, DEC); }

Čia yra kairiojo signalo kodas. Atlikite tuos pačius veiksmus, kaip aprašyta kairiojo signalo signalui. Kaip matote, vienintelis skirtumas yra adresas, kuriuo indikatorius siunčia savo rezultatus.

/** Programa, kuri naudoja foto vartus, kad patikrintų signalines lemputes

*/ #include #include #include #include RF24 radijas (9, 10); // CE, CSN konstituotas baitų adresas [6] = "00001"; // --- programos sutikimai --- // laiko konst int 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 = srauto tikrinimo laikas * 0,6; // nustatykite kintamąjį aukščiau, remdamiesi savo eksperimentiniais bandymais 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 // --- programa vars --- int num_string_seen = 0; int num_loops = 0; void setup () {// while (! Serial); // florai // uždelsimas (500); num_string_seen = 0; num_loops = 0;

pinMode (GATE_PIN, INPUT);

pinMode (GATE_PIN_2, INPUT); Serial.begin (115200); // radijo derinimui.begin (); radio.openWritingPipe (adresas); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// čia įdėkite pagrindinį kodą, kad jis būtų paleistas pakartotinai: if (num_loops % string_check_time == 0) {// patikrinkite eilutės būseną check_string (); } if (num_loops == flow_check_time) {// nagrinėti srautą //Serial.println(num_string_seen); int srauto_num = nagrinėti_trauką (); // siųsti reikšmes send_out (flow_num); // atstatyti vars num_string_seen = 0; num_loops = 0; uždelsimas (srauto patikrinimo atidėjimas); } num_loops ++; uždelsimas (base_delay); } / * *Metodas patikrinti, ar eilutė kerta vartus * / 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 (" eilutė apačioje! "); } //Serijinis.printas ("Skaičiuoti eilutes: "); //Serial.println(num_string_seen); grįžti; }/ * * Metodas analizuoti, kokia laiko eilutės dalis uždengė vartus */int exam_flow () {double percent_seen = double (num_string_seen)/max_in_flow; Serial.print („Apimtas procentas:“); printDouble (procentas_matytas, 100); // mastelio keitimas į komunikacijos skalę int scaled_flow = int (procentai_matyti * msg_max_val); if (scaled_flow> msg_max_val) {scaled_flow = msg_max_val; } if (mastelio_srautas = 0) frac = (val - int (val)) * tikslumas; else frac = (int (val)- val) * tikslumas; Serial.println (frac, DEC); }

5 žingsnis: signalinė lemputė

Signalinis surinkimas
Signalinis surinkimas

Atskiros dalys

  • Signalinis rėmas
  • Verpalai
  • Sukurta signalinė grandinė
  • Akumuliatorius
  • Izoliacinė juosta
  • Epoksidas arba klijai

3D spausdinimo signalinių signalų komponentų STL

  • Signalinio rėmo STL: kairė, dešinė
  • Elektronikos dėžės STL: viršuje, apačioje

Surinkimo instrukcijos

  1. Įdėkite juostinius magnetus į 3D spausdinto indikatoriaus rėmo angas. Įsitikinkite, kad magnetai tinkamai sutampa tarp dešiniojo ir kairiojo rėmo, tada naudokite epoksidą (arba klijus), kad pritvirtintumėte magnetus prie rėmo. Leiskite epoksidui (arba klijams) visiškai sukietėti.
  2. Įdėkite nuotraukų pertraukiklius į viršutinę ir apatinę angas rėmo gale. Atsargiai epoksidiniu būdu (arba klijuokite) nuotraukų pertraukiklio plokštes prie rėmo. Leiskite epoksidui (arba klijams) visiškai sukietėti
  3. Iškirpkite ~ 7 verpalų gabalėlį. Pririškite vieną siūlų galą prie pirmosios vertikalios juostos įpjovos. Iškirpkite nedidelę elektros juostos dalį ir apvyniokite elektros juostą ant siūlų dalies, kuri bus nuotraukų pertraukiklių srityje. Verpalus perverkite per rėmą taip, kad jie praeitų pro nuotraukų pertraukiklio vartų tarpą.
  4. Įdėkite juostinius magnetus į 3D spausdintos elektronikos dėžutės apačios angas. Įsitikinkite, kad magnetai tinkamai sutampa tarp dešinės ir kairės dėžutės, tada naudokite epoksidą (arba klijus), kad pritvirtintumėte magnetus prie rėmo. Leiskite epoksidui (arba klijams) visiškai sukietėti.
  5. Įdėkite sukonstruotą indikatoriaus grandinę į elektronikos dėžutę, suderindami skirtingus komponentus su lizdais. Uždarykite dėžutę 3D spausdintos elektronikos dėžutės viršuje. Epoksidiniu (arba klijuokite) akumuliatorių prie dėžutės viršaus, kad jungiklis būtų atviras.

6 žingsnis: garsiakalbių aparatūra

Garsiakalbių aparatūra
Garsiakalbių aparatūra
Garsiakalbių aparatūra
Garsiakalbių aparatūra
Garsiakalbių aparatūra
Garsiakalbių aparatūra

Išvesties sistemą sudaro dvi garsiakalbių grandinės, po vieną kiekvienai signalinei lemputei, su belaidžiu ryšiu ir garsumo reguliavimo rankenėle. Pirmiausia paruoškite protobondus, skirtus naudoti su nRF24L01 moduliais, kaip ir signalinių grandinių atveju, nukirpdami laidus, atskiriančius dvi kaiščių eilutes, kuriose bus dedama plokštė.

Tada surinkite grandinę, kaip parodyta aukščiau esančioje schemoje, kartu su užbaigtų grandinių nuotraukomis.

Valdybos surinkimo instrukcijos

Norint sukrauti plokštes į garsiakalbių korpusą, pagrindiniai komponentai turi būti dedami tam tikrose plokštės vietose. Šiose instrukcijose kalbėsiu apie koordinačių sistemą, naudojamą eilutėms ir stulpeliams žymėti „Adafruit“protoboate:

  1. „Arduino Nano“turi būti dedamas prie viršutinio plokštės krašto centre, kad „Vin“kaištis būtų G16. Tai leis lengvai perprogramuoti „Arduino Nano“surinkus grandinę.
  2. „NRF24L01“plokštė turi būti dedama apatiniame dešiniajame plokštės kampe, apimančiame aštuonias pozicijas nuo C1 iki D5. Dėl to „nRF24L01“pakabins prototipą, kad būtų užtikrintas geresnis belaidis ryšys.
  3. Garsiakalbių sistemos akumuliatorius maitina abi protoboates, todėl būtinai prijunkite du „Arduino Nano“GND bėgelius/kaiščius ir „Vin“kaiščius prie maitinimo šaltinio.
  4. Apatinėje grandinėje potenciometras turėtų būti dedamas ant plokštės viršaus, nukreiptos į išorę, kad jo kaiščiai būtų J2, J4 ir J6 padėtyse

    1. J2: „Arduino Nano“išvestis iš 3 skaitmeninio kaiščio (D3)
    2. J4 ↔ 2N3904 tranzistoriaus bazinis kaištis
    3. J6 ↔ neprijungtas
  5. Viršutinei grandinei potenciometras turėtų būti dedamas ant lentos apačios, nukreiptos į išorę, kad jo kaiščiai būtų J9, J11 ir J13 padėtyse

    1. J13: „Arduino Nano“išvestis iš 3 skaitmeninio kaiščio (D3)
    2. J11 ↔ 2N3904 tranzistoriaus bazinis kaištis
    3. J9 ↔ neprijungtas

7 žingsnis: garsiakalbių programinė įranga

Čia yra garsiakalbio, bendraujančio su kairiuoju signalu, kodas. Prijunkite „Arduino Nano“apatinėje garsiakalbių plokštėje prie kompiuterio, atidarykite „Arduino IDE“, nukopijuokite ir įklijuokite šį kodą į jį ir įkelkite į lentą.

#įtraukti

#įtraukti #įtraukti RF24 radiją (7, 8); // CE, CSN // kairysis indikatorius, viršutinio garsiakalbio plokštės konstituotas baitų adresas [6] = "00001"; const int žingsnis = 2000; const int pitch_duration = 200; const int garsiakalbis = 3; const int delay_gain = 100; int būsena = 0; int cur_delay = 0; char skaityti [2]; void setup () {pinMode (garsiakalbis, OUTPUT); Serial.begin (115200); Serial.println ("Belaidžio ryšio pradžia …"); radio.begin (); radio.openReadingPipe (0, adresas); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& read, sizeof (read)); status = (int) (skaityti [0]-'0'); Serial.print ("Gauta:"); Serial.println (būsena); cur_delay = delay_gain*statusas; } if (cur_delay) {tonas (garsiakalbis, garsas, pitch_duration); uždelsimas (cur_delay + pitch_duration); Serial.println („Pyptelėk!“); }}

Čia yra garsiakalbio, bendraujančio su tinkamu signaliniu signalu, kodas. Prijunkite „Arduino Nano“viršutinėje garsiakalbių plokštėje prie kompiuterio, atidarykite „Arduino IDE“, nukopijuokite ir įklijuokite šį kodą į jį ir įkelkite į lentą.

#įtraukti

#įtraukti #įtraukti RF24 radiją (7, 8); // CE, CSN // dešinysis indikatorius, apatinio garsiakalbio plokštės konstituotas baitų adresas [6] = "00010"; const int žingsnis = 1500; const int pitch_duration = 200; const int garsiakalbis = 3; const int delay_gain = 100; int būsena = 0; int cur_delay = 0; char skaityti [2]; void setup () {pinMode (garsiakalbis, OUTPUT); Serial.begin (115200); Serial.println ("Belaidžio ryšio pradžia …"); radio.begin (); radio.openReadingPipe (0, adresas); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& read, sizeof (read)); status = (int) (skaityti [0]-'0'); Serial.print ("Gauta:"); Serial.println (būsena); cur_delay = delay_gain*statusas; } if (cur_delay) {tonas (garsiakalbis, garsas, pitch_duration); uždelsimas (cur_delay+pitch_duration); Serial.println („Pyptelėk!“); }}

8 žingsnis: garsiakalbių surinkimas

Atskiros dalys

  • 2 sukonstruotos garsiakalbių grandinės
  • 2 garsiakalbiai
  • 1 baterija

3D spausdinimo STL

  • Dėžutės viršuje
  • Dėžutės apačia

Fizinio surinkimo instrukcijos

  1. Atsargiai įdėkite garsiakalbių grandines į dėžutės apačią, vieną plokštę ant kitos taip, kad garsumo rankenėlės būtų viena šalia kitos ir įslystų į skyles. Ryšio lustai turi būti atidengti dėžutės gale.
  2. Garsiakalbius pastatykite kairėje ir dešinėje plokštės pusėje, įsitikindami, kad garsiakalbiai atitinka teisingas indikatoriaus puses. Sureguliuokite garsiakalbius prie lizdų dėžutės šonuose.
  3. Akumuliatoriaus laidus perveskite per mažą skylę, esančią dėžutės gale. Epoksidiniu būdu (arba klijuokite) akumuliatorių prie dėžutės galo, kad jungiklis būtų atviras.
  4. Padėkite 3D spausdintą dėžutę virš dėžutės apačios, kad būtų viskas.

9 žingsnis: sąranka/montavimas

Sąranka/montavimas
Sąranka/montavimas
  1. Įjunkite signalines lemputes, pasukdami akumuliatorių jungiklius į padėtį „ĮJUNGTA“. Tą patį padarykite su garsiakalbių komplektu, kad įjungtumėte išvesties sistemą.
  2. Garsinius signalinius signalus montuoti lengviausia su dviem žmonėmis, bet galima su vienu. Montuojant ant nesvylančio strėlės, signalines lemputes būtų lengviau uždėti prieš pakeliant burę.
  3. Norėdami įsitikinti, kad indikatoriaus rėmas yra tinkamai nukreiptas, pažvelkite į vienos iš vertikalių juostų įpjovą. Laikydami rėmą vertikaliai, išpjova turi būti nukreipta į viršų. Rėmo pusė su ta juosta taip pat turėtų būti nukreipta į valties priekį.
  4. Padėkite vieną iš signalinių signalų norimame aukštyje ir padėkite ant burės. Verpalai turėtų būti išdėstyti taip, kad verpalai būtų toje pačioje vietoje, kur jie būtų, jei jie būtų tradicinio pasakojimo dalis.
  5. Kai turėsite vieną pasakojimą norimoje padėtyje. Įdėkite kitą signalinę lemputę kitoje burės pusėje, tiksliai priešais pirmąją, kurią įdėjote, taip, kad magnetai išsirikiuotų. Kai magnetai sujungia, jie turi tvirtai laikyti rėmą prie burės. Sureguliuokite elektronikos gaubtų magnetus, kiekvienam signalui abiejose burės pusėse taip, kad jie taip pat jungtųsi.
  6. Jei pastebite, kad kai styga teka tiesiai atgal, ji nesikerta prieš viršutinius vartus, pasukite signalinės lempos rėmą taip, kad galinė rėmo pusė būtų žemyn. Sukite rėmelį, kol eilutė praeis per viršutinį nuotraukų pertraukiklį, kai siūlai tekės tiesiai atgal.

10 veiksmas: trikčių šalinimas

Visi kodo fragmentai turi derinimo spausdinimo pareiškimus, nurodančius, kad jie siunčia, gauna ir apdoroja duomenis. Atidarę COM prievadą naudodami „Arduino IDE“ir vieną iš „Arduino Nano“posistemių prijungę prie kompiuterio, galėsite peržiūrėti šiuos būsenos pranešimus.

Jei sistema neveikia tinkamai, perjunkite visų komponentų jungiklius.

11 veiksmas: galimi tolesni veiksmai

  • Hidroizoliacija
  • Bendravimas ilgesniame diapazone. „WiFi“yra perspektyvus pasirinkimas.
  • Dabartinėje mūsų sąrankoje šiuo metu naudojamas 2 nuotraukų pertraukikliai. Į sistemą būtų įdomu įtraukti daugiau nuotraukų pertraukiklių.

Rekomenduojamas: