Мазмұны:

Желкенге арналған дыбыстық әңгімелер: 11 қадам
Желкенге арналған дыбыстық әңгімелер: 11 қадам

Бейне: Желкенге арналған дыбыстық әңгімелер: 11 қадам

Бейне: Желкенге арналған дыбыстық әңгімелер: 11 қадам
Бейне: 2-часовая прогулка на лодке по территории Всемирного природного наследия 2024, Шілде
Anonim
Image
Image
Telltale аппараттық құралы
Telltale аппараттық құралы

Теллеттер - бұл желкенде турбулентті немесе ламинарлы ағынның бар -жоғын көрсету үшін жүзу кезінде қолданылатын жіптер. Алайда, желкеннің әр жағына бекітілген әр түрлі түсті жіптер тек визуалды көрсеткіштер болып табылады. Бұл дыбыстық әңгімелер Паулин сияқты көру қабілеті нашар және нашар көретін теңізшілерге визуалды ақпаратты есту түрінде жеткізуге бағытталған көмекші құрал.

Құрылғы әңгіме қозғалысын оқитын кіріс жүйесінен және ауа ағыны туралы ақпаратты беретін дыбыстық сигнал шығаратын шығыс жүйесінен тұрады.

Бұл құрылғыны дайындау кезінде дәнекерлеу жабдығына және 3D принтеріне қол жеткізу қажет.

1 -қадам: материалдар туралы есеп

Банктің сілтемелері мен бағасы бар

Ескерту: сізге төмендегілердің 2 жиынтығы қажет.

Енгізу жүйесі

  • Ардуино Нано
  • Adafruit perma-proto жартылай өлшемді нан тақтасы
  • nRF24L01 сымсыз таратқыш модулі
  • Фото үзгіш
  • Sparkfun фотосурет үзіліс тақтасы
  • Arduino үйлесімді 9В батарея жиынтығы
  • 9В батарея
  • Бірнеше ұзындығы 22 калибрлі сым
  • Иірілген жіп
  • Неодим магниттері
  • Эпоксидті

Шығару жүйесі

  • Ардуино Нано
  • Adafruit perma-proto жартылай өлшемді нан тақтасы
  • nRF24L01 сымсыз трансивер модулі
  • Arduino үйлесімді 9В батарея жиынтығы
  • 1К Ом потенциометрі
  • 120 Ом резисторы
  • 2N3904 транзисторы
  • 0,1 УФ конденсатор
  • Arduino үйлесімді динамик

GitHub файлдары

  • Осы айтылымдарды жасауға қажет барлық код пен STL файлдарын осы GitHub репозиторийінен табуға болады.
  • Сізге корпустың екі жиынтығы мен динамик корпусының бірі қажет болады.

2 -қадам: Құралдар/Машиналар/Бағдарламалық қамтамасыз ету талаптары

Arduino бағдарламалау үшін сізге Arduino IDE жүктеу қажет. Жүктеу сілтемесін мына жерден табуға болады.

NRF24L01 модулін бағдарламалау үшін сізге оның кітапханасын Arduino IDE арқылы жүктеу қажет болады. Құралдар> Кітапханаларды басқару …> RF24 кітапханасын орнату

Электрондық компоненттерді жинау үшін негізгі дәнекерлеу құралдарына қол жеткізу қажет. Тазартатын сорғы пайдалы болуы мүмкін, бірақ қажет емес.

Айналмалы фрейм мен динамик корпусын құру үшін сізге 3D принтерге кіру қажет болады.

3 -қадам: Telltale Hardware

Telltale аппараттық құралы
Telltale аппараттық құралы
Telltale аппараттық құралы
Telltale аппараттық құралы

Жоғарыдағы схемаларға сәйкес тізбекті жинаңыз. Arduino Nano протокол тақтасының жоғарғы жағымен туралануы керек. Бұл барлық электроника қосылғаннан кейін де USB портына кіруге мүмкіндік береді.

Электрониканы қысқартпау үшін, жоғарыдағы суретте көрсетілгендей, nRF24 алатын жолдардағы протободы іздерін кесуді ұмытпаңыз.

Әйтпесе, сізге nRF24 протоколына қосылу үшін өтпелі кабельдер қажет болады.

Резистордың қосылуы, GND және 5В сымдары фото үзгішке суреттелмеген. Фотосуретті ажырату тақтасында көрсетілгендей етіп қосыңыз. Үзіліс тақтасының суреті енгізілген.

Оң және сол хабарлардың тізбектері бірдей.

4 -қадам: Telltale бағдарламалық қамтамасыз ету

Міне Оң жақ әңгіме үшін код. Right telltale наносын компьютерге қосыңыз, Arduino IDE ашыңыз, оған осы кодты көшіріп қойыңыз және оны тақтаға жүктеңіз.

/** Фотогейтаны ертегілерді тексеру үшін қолданатын бағдарлама

*/ #қосу #қосылу #қосу #қосу RF24 радиосы (9, 10); // CE, CSN const байт адресі [6] = «00010»; // --- бағдарлама 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; // жоғарыда келтірілген нұсқаны өзіңіздің эксперименттік сынақтарыңызға негізделген орнатыңыз const 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 // --- бағдарламаның нұсқалары --- int num_string_seen = 0; int num_loops = 0; void setup () {// while (! сериялық); // флора үшін // кешіктіру (500); num_string_seen = 0; num_loops = 0; pinMode (GATE_PIN, INPUT); pinMode (GATE_PIN_2, INPUT); Serial.begin (115200); // radio.begin () күйін келтіру үшін; radio.openWritingPipe (адрес); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// бірнеше рет іске қосу үшін негізгі кодты осында қойыңыз: if (num_loops % string_check_time == 0) {// жолдың күйін тексеріңіз check_string (); } if (num_loops == flow_check_time) {// ағынды тексеріңіз //Serial.println(num_string_seen); int flow_num = examine_flow (); // мәндерді жіберу send_out (flow_num); // параметрлерді қалпына келтіру num_string_seen = 0; num_loops = 0; кідіріс (flow_check_delay); } num_loops ++; кідіріс (base_delay); } / * *Жолдың қақпадан өтетінін тексеру әдісі * / void check_string () {int string_state = digitalRead (GATE_PIN); //Serial.println(string_state); if (string_state == 0) {num_string_seen ++; //Serial.println("Сару жолы! «); }

int bot_state = digitalRead (GATE_PIN_2);

егер (bot_state == 0) {num_string_seen--; //Serial.println(«төменгі жағында жол!»); } //Serial.print("Санау жолы өтеді: «); //Serial.println(num_string_seen); қайтару; }/ * * Уақыт жолының қай бөлігін қақпамен қамтығанын талдау әдісі */int examine_flow () {double foiz_seen = double (num_string_seen)/max_in_flow; Serial.print («Қамтылған пайыз:»); printDouble (қаралған пайыз, 100); // мәнді байланыс шкаласына масштабтау int scaled_flow = int (пайыздық_қаралған * msg_max_val); if (scaled_flow> msg_max_val) {scaled_flow = msg_max_val; } if (scaled_flow = 0) frac = (val - int (val)) * дәлдік; else frac = (int (val)- val) * дәлдік; Serial.println (frac, DEC); }

Міне сол жақ ертегінің коды. Сол жақ әңгіме үшін жоғарыдағы қадамдарды орындаңыз. Көріп отырғаныңыздай, жалғыз айырмашылық - хабарландыру өз нәтижелерін жіберетін мекен -жай.

/** Фотогейтаны ертегілерді тексеру үшін қолданатын бағдарлама

*/ #include #include #include #include RF24 радиосы (9, 10); // CE, CSN const байт адресі [6] = «00001»; // --- бағдарлама 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; // жоғарыда келтірілген нұсқаны өзіңіздің эксперименттік сынақтарыңызға негізделген орнатыңыз const 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 // --- бағдарламасы vars --- int num_string_seen = 0; int num_loops = 0; void setup () {// while (! сериялық); // флора үшін // кешіктіру (500); num_string_seen = 0; num_loops = 0;

pinMode (GATE_PIN, INPUT);

pinMode (GATE_PIN_2, INPUT); Serial.begin (115200); // radio.begin () күйін келтіру үшін; radio.openWritingPipe (адрес); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// бірнеше рет іске қосу үшін негізгі кодты осында қойыңыз: if (num_loops % string_check_time == 0) {// жолдың күйін тексеріңіз check_string (); } if (num_loops == flow_check_time) {// ағынды тексеріңіз //Serial.println(num_string_seen); int flow_num = examine_flow (); // мәндерді жіберу send_out (flow_num); // параметрлерді қалпына келтіру num_string_seen = 0; num_loops = 0; кідіріс (flow_check_delay); } num_loops ++; кідіріс (base_delay); } / * *Жолдың қақпадан өтетінін тексеру әдісі * / void check_string () {int string_state = digitalRead (GATE_PIN); //Serial.println(string_state); if (string_state == 0) {num_string_seen ++; //Serial.println( Сару жолы! «); }

int bot_state = digitalRead (GATE_PIN_2);

егер (bot_state == 0) {num_string_seen--; //Serial.println(«төменгі жағында жол!»); } //Serial.print("Санау жолы өтеді: «); //Serial.println(num_string_seen); қайтару; }/ * * Уақыт жолының қай бөлігін қақпамен қамтығанын талдау әдісі */int examine_flow () {double foiz_seen = double (num_string_seen)/max_in_flow; Serial.print («Қамтылған пайыз:»); printDouble (қаралған пайыз, 100); // мәнді байланыс шкаласына масштабтау int scaled_flow = int (пайыздық_қаралған * msg_max_val); if (scaled_flow> msg_max_val) {scaled_flow = msg_max_val; } if (scaled_flow = 0) frac = (val - int (val)) * дәлдік; else frac = (int (val)- val) * дәлдік; Serial.println (frac, DEC); }

5 -қадам: әңгіме жиналысы

Айту жиналысы
Айту жиналысы

Жеке бөліктер

  • Айтатын жақтау
  • Иірілген жіп
  • Құрылған әңгіме схемасы
  • Батарея пакеті
  • Электрлік таспа
  • Эпоксидті немесе желім

3D басып шығаруға арналған STL -лер компоненттерді айтады

  • Айқын кадрға арналған STL: солға, оңға
  • Электроника қорабына арналған STL: жоғары, төмен

Құрастыру нұсқаулары

  1. Штангалы магниттерді 3D басып шығарылған әңгіме жақтауының ұяларына салыңыз. Магниттердің оң жақ пен сол жақтаудың арасында дұрыс орналасуын тексеріңіз, содан кейін магниттерді жақтауға бекіту үшін эпоксидті (немесе желімді) қолданыңыз. Эпоксидті (немесе желімді) толық орнатуға рұқсат етіңіз.
  2. Фото үзгіштерді жақтаудың артқы жағындағы жоғарғы және төменгі ұяшықтарға орналастырыңыз. Фото үзгіш тақталарды жақтауға эпоксидті (немесе желімді) абайлап салыңыз. Эпоксидті (немесе желімді) толық орнатуға рұқсат етіңіз
  3. ~ 7 жіптен тоқыңыз. Жіптің бір ұшын бірінші тік жолақтың ойығына байлаңыз. Электр таспасының кішкене бөлігін кесіңіз және электр таспасын фото үзгіштер аймағында болатын жіптің бөлігіне ораңыз. Фото үзгіш қақпасының саңылауынан өтетін етіп жіпті рамадан өткізіңіз.
  4. Магниттерді 3D басып шығарылған электроника қорабының астыңғы ұясына салыңыз. Магниттердің оң жақ қорап пен сол жақ қораптың арасына дұрыс сәйкес келетініне көз жеткізіңіз, содан кейін магниттерді жақтауға бекіту үшін эпоксидті (немесе желімді) қолданыңыз. Эпоксидті (немесе желімді) толығымен қоюға рұқсат етіңіз.
  5. Әр түрлі компоненттерді ұяларына сәйкестендіре отырып, салынған электронды қорапқа салыңыз. 3D басып шығарылған электрониканың жоғарғы жағындағы қорапты жабыңыз. Эпоксидті (немесе желімді) аккумуляторды қораптың жоғарғы жағына ауыстырғыш ашық болатындай етіп салыңыз.

6 -қадам: Динамиктің аппараттық құралы

Динамиктің аппараттық құралы
Динамиктің аппараттық құралы
Динамиктің аппараттық құралы
Динамиктің аппараттық құралы
Динамиктің аппараттық құралы
Динамиктің аппараттық құралы

Шығару жүйесі сымсыз байланыспен және дыбыс деңгейін реттеу тұтқасымен жабдықталған әр айтуға арналған екі динамиктік схемадан тұрады. Алдымен, nRF24L01 модульдерінде қолдануға болатындай, протоколдарды тақта орнатылатын түйреуіштердің екі жолын бөлетін сымдарды кесу арқылы дайындаңыз.

Содан кейін, аяқталған тізбектердің фотосуреттеріне сілтеме жасай отырып, схеманы жоғарыдағы диаграммада көрсетілгендей жинаңыз.

Басқарманы жинау жөніндегі нұсқаулық

Тақталарды динамик корпусына жинау үшін негізгі компоненттерді тақтаның белгілі бір жерлеріне орналастыру қажет. Келесі нұсқаулықтарда мен Adafruit протоборындағы жолдар мен бағандарды белгілеу үшін қолданылатын координаттар жүйесіне сілтеме жасаймын:

  1. Arduino Nano тақтаның жоғарғы шетіне қарама -қарсы орналасуы керек, осылайша Vin штыры G16 -де орналасады. Бұл тізбек құрастырылғаннан кейін Arduino Nano бағдарламасын оңай қайта бағдарламалауға мүмкіндік береді.
  2. NRF24L01 тақтасы C1 -ден D5 -ке дейінгі сегіз позицияны қамтитын тақтаның төменгі оң жақ бұрышына орналастырылуы керек. Бұл nRF24L01 протокол тақтасында ілінбей қалады, сымсыз байланыс жақсы болады.
  3. Динамикалық жүйеге арналған батареялар жинағы екі протободы да қуаттандырады, сондықтан екі Arduino Nano GND рельстерін/түйреуіштерін және Вин түйреуіштерін қуат көзіне жалғауды ұмытпаңыз.
  4. «Төменгі» схема үшін потенциометрді тақтаның жоғарғы жағына сыртқа қаратып орналастыру керек, осылайша оның түйреуіштері J2, J4 және J6 позицияларында орналасады.

    1. J2 ↔ Arduino Nano цифрлық пин 3 (D3) шығысы
    2. 2N3904 транзисторының J4 pin негізгі түйреуі
    3. J6 - байланыссыз
  5. «Жоғарғы» схема үшін потенциометрді тақтаның төменгі жағына сыртқа қаратып орналастыру керек, осылайша оның түйреуіштері J9, J11 және J13 позицияларында орналасады.

    1. J13 digital Arduino Nano цифрлық пин 3 (D3) шығысы
    2. J11 2 2N3904 транзисторының негізгі штыры
    3. J9 - байланыссыз

7 -қадам: Динамикалық бағдарламалық қамтамасыз ету

Міне сол жақ әңгімемен сөйлесушіге арналған код. Төменгі динамик тақтасындағы Arduino Nano -ны компьютерге қосыңыз, Arduino IDE -ді ашып, осы кодты көшіріп, қойыңыз және оны тақтаға жүктеңіз.

#қосу

#қосу #қосу RF24 радиосы (7, 8); // CE, CSN // сол жақ әңгіме, жоғарғы динамик тақтасының const байт адресі [6] = «00001»; const int pitch = 2000; const int pitch_duration = 200; const int динамигі = 3; const int delay_gain = 100; int күйі = 0; int cur_delay = 0; char оқу [2]; void setup () {pinMode (динамик, OUTPUT); Serial.begin (115200); Serial.println («Сымсыз байланыс қосылуда …»); radio.begin (); radio.openReadingPipe (0, мекенжай); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& read, sizeof (read)); күй = (int) ([0]-'0' оқыңыз); Serial.print («Алынған:»); Serial.println (күй); cur_delay = delay_gain*күйі; } if (cur_delay) {тон (динамик, пит, пит_ұзақтығы); кідіріс (cur_delay + pitch_duration); Serial.println («Бип!»); }}

Міне, дұрыс әңгімемен сөйлесетін спикерге арналған код. Жоғарғы динамик тақтасындағы Arduino Nano -ны компьютерге қосыңыз, Arduino IDE -ді ашып, осы кодты көшіріп, қойыңыз және оны тақтаға жүктеңіз.

#қосу

#қосу #қосу RF24 радиосы (7, 8); // CE, CSN // оң жақ әңгіме, төменгі динамик тақтасының const байт адресі [6] = «00010»; const int pitch = 1500; const int pitch_duration = 200; const int динамигі = 3; const int delay_gain = 100; int күйі = 0; int cur_delay = 0; char оқу [2]; void setup () {pinMode (динамик, OUTPUT); Serial.begin (115200); Serial.println («Сымсыз байланыс қосылуда …»); radio.begin (); radio.openReadingPipe (0, мекенжай); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& read, sizeof (read)); күй = (int) ([0]-'0' оқыңыз); Serial.print («Алынған:»); Serial.println (күй); cur_delay = delay_gain*күйі; } if (cur_delay) {тон (динамик, позиция, қадам_ұзақтығы); кідіріс (cur_delay+pitch_duration); Serial.println («Бип!»); }}

8 -қадам: Динамиктер жиналысы

Жеке бөліктер

  • 2 құрастырылған динамиктер тізбегі
  • 2 динамик
  • 1 батарея жиынтығы

3D басып шығаруға арналған STL

  • Жоғарғы қорап
  • Қораптың төменгі жағы

Физикалық құрастыру бойынша нұсқаулық

  1. Динамик тізбектерін қораптың түбіне абайлап салыңыз, бір тақтаны бірінің үстіне бірін қойыңыз, сонда дыбыс деңгейі тұтқалары бір -бірінің қасында болады және тесіктерге сырғып кетеді. Байланыс чиптері қораптың артқы жағында болуы керек.
  2. Динамиктерді тақтаның сол және оң жағына қойыңыз, динамиктердің айтылатын жақтарға сәйкес келетініне көз жеткізіңіз. Динамиктерді қораптың екі жағындағы ойықтарға туралаңыз.
  3. Батарея сымдарын қораптың артындағы кішкене тесік арқылы өткізіңіз. Эпоксидті (немесе желімді) аккумуляторды қораптың артқы жағына қосқыш ашық қалатындай етіп салыңыз.
  4. Барлығын қамту үшін 3D басып шығарылған қорапты қораптың астына қойыңыз.

9 -қадам: орнату/орнату

Орнату/орнату
Орнату/орнату
  1. Батарея пакеттерінің қосқыштарын «ON» күйіне аудару арқылы хабарландыруларды қосыңыз. Шығару жүйесін қосу үшін динамик жинағына дәл осылай жасаңыз.
  2. Дыбыстық хабарларды монтаждау екі адаммен оңай орындалады, бірақ оны бір адаммен жасауға болады. Айнымалы жебеге бекіту үшін теллетті желкенді көтермес бұрын киюге болады.
  3. Ертегінің дұрыс бағытталғанына көз жеткізу үшін тік жолақтардың біріндегі ойыққа қараңыз. Жақтауды тік ұстаған кезде, ойық жоғары қарай болуы керек. Сол жақтағы жақтаудың жағы қайықтың алдыңғы жағына қарауы керек.
  4. Ертегілердің бірін қалаған биіктікке және желкенге қойыңыз. Егер ол дәстүрлі ертегінің бір бөлігі болса, жіп дәл сол жерде болатындай етіп орналастырылуы керек.
  5. Қажетті позицияда бір ертегі болған соң. Басқа ертегіні желкеннің екінші жағына, сіз орналастырған біріншісіне қарама -қарсы қойыңыз, магниттер қатарға тұрады. Магниттер байланыс орнатқаннан кейін, олар жақтауды желкенге мықтап ұстауы керек. Электроника корпусының магниттерін желкеннің екі жағындағы ертегілердің әрқайсысына бір -бірімен байланыстыратындай етіп тізіңіз.
  6. Егер сіз жіп тікелей артқа қарай ағып кетсе, ол жоғарғы қақпаның алдынан өтпейтінін байқасаңыз, жақтаудың артқы жартысы төмен қарай бағытталатын етіп айтыңыз. Жіп тікелей артқа қарай ағып жатқанда, жіп жоғарғы фото үзгіштен өткенше жақтауды айналдырыңыз.

10 -қадам: ақауларды жою

Кодтың барлық бөліктерінде деректерді жіберу, алу және өңдеуді көрсететін отладтау бойынша баспа мәлімдемелері бар. Компьютерге қосылған Arduino Nano ішкі жүйелерінің бірімен Arduino IDE көмегімен COM портын ашу сізге бұл күй хабарларын көруге мүмкіндік береді.

Егер жүйе дұрыс жұмыс істемесе, барлық компоненттердің қосқыштарын ауыстырыңыз.

11 -қадам: Мүмкін болатын келесі қадамдар

  • Гидроизоляция
  • Байланыс ұзағырақ. Wi -Fi перспективалы нұсқа болады.
  • Біздің қазіргі қондырғымызда әр әңгімеге 2 фото үзгіш қолданылады. Жүйеге көбірек фото үзгіштерді қосу қызықты болуы мүмкін.

Ұсынылған: