Mundarija:

Yelkanlar uchun ovozli xabarlar: 11 qadam
Yelkanlar uchun ovozli xabarlar: 11 qadam

Video: Yelkanlar uchun ovozli xabarlar: 11 qadam

Video: Yelkanlar uchun ovozli xabarlar: 11 qadam
Video: XIAOMI LIFEHACK // REDMI SIRLARI // REDMI FISHKALARI 2024, Iyul
Anonim
Image
Image
Telltale uskunalari
Telltale uskunalari

Telltallar - yelkan bo'ylab turbulent yoki laminar oqim borligini ko'rsatish uchun suzib yurishda ishlatiladigan iplar. Biroq, yelkanning har ikki tomoniga bog'langan turli xil rangdagi iplar faqat vizual ko'rsatkichlardir. Bu ovozli talantlar-bu yordamchi qurilma bo'lib, u vizual ma'lumotni Paulin kabi ko'r va ko'rish qobiliyati zaif dengizchilar uchun eshitish shaklida uzatishga qaratilgan.

Qurilma aytib berish harakatini o'qiy oladigan kirish tizimi va havo oqimi haqidagi ma'lumotlarni uzatuvchi signal signallarini chiqaradi.

Ushbu qurilmani ishlab chiqarishda lehim uskunalari va 3D printerga kirish talab qilinadi.

1 -qadam: materiallar ro'yxati

BOM havolalar va narxlar bilan

Eslatma: sizga quyidagilarning 2 to'plami kerak bo'ladi.

Kirish tizimi

  • Arduino Nano
  • Adafruit perma-proto yarim o'lchamli non paneli
  • nRF24L01 simsiz uzatuvchi moduli
  • Suratni uzuvchi
  • Sparkfun foto uzilishlar taxtasi
  • Arduino bilan mos keladigan 9V batareya to'plami
  • 9V batareya
  • 22 uzunlikdagi bir nechta uzunlikdagi simlar
  • Ip
  • Neodim magnitlari
  • Epoksi

Chiqish tizimi

  • Arduino Nano
  • Adafruit perma-proto yarim o'lchamli non paneli
  • nRF24L01 simsiz uzatuvchi moduli
  • Arduino bilan mos keladigan 9V batareya to'plami
  • 1K Ohm potentsiometr
  • 120 Ohm qarshilik
  • 2N3904 tranzistorli
  • 0,1 uF kondansatör
  • Arduino bilan mos keladigan dinamik

GitHub fayllari

  • Ushbu hikoyalarni tuzish uchun zarur bo'lgan barcha kodlar va STL fayllarini ushbu GitHub repo -da topish mumkin.
  • Sizga ikkita korpus to'plami va karnay korpusi kerak bo'ladi.

2 -qadam: Asboblar/Mashinalar/Dastur talablari

Arduino -ni dasturlash uchun siz Arduino IDE -ni yuklab olishingiz kerak bo'ladi. Yuklab olish havolasini bu erda topishingiz mumkin.

NRF24L01 modulini dasturlash uchun siz uning kutubxonasini Arduino IDE orqali yuklab olishingiz kerak bo'ladi. Asboblar> Kutubxonalarni boshqarish …> RF24 kutubxonasini o'rnatish

Elektron komponentlarni yig'ish uchun asosiy lehim asboblariga kirish talab qilinadi. Chiqaruvchi nasos ham foydali bo'lishi mumkin, lekin kerak emas.

Garnitura va karnay korpusini yaratish uchun sizga 3D printerdan foydalanish kerak bo'ladi.

3 -qadam: Telltale apparat

Telltale uskunalari
Telltale uskunalari
Telltale uskunalari
Telltale uskunalari

Yuqoridagi sxemalarga muvofiq sxemani yig'ing. Arduino Nano protoboardning yuqori qismiga to'g'ri kelishi kerak. Bu sizga barcha elektron qurilmalar ulanganidan keyin ham USB portiga kirishga imkon beradi.

Elektronni qisqartirmaslik uchun, yuqoridagi rasmda ko'rsatilgandek, nRF24 egallaydigan qatorlarda protoboard izlarini kesib qo'yganingizga ishonch hosil qiling.

Aks holda, nRF24 -ni protobardga ulash uchun sizga o'tish kabellari kerak bo'ladi.

Rezistor ulanishi, GND va 5V simlar foto uzgichga tasvirlanmagan. Fotosurat to'xtatuvchisini uning yorliq taxtasida ko'rsatilgandek ulang. Ajratuvchi taxtaning tasviri kiritilgan.

O'ng va chap signallar sxemasi aynan bir xil.

4 -qadam: Telltale dasturi

Mana, o'ng hikoyaning kodi. Right telltale nano -ni kompyuteringizga ulang, Arduino IDE -ni oching, unga kodni nusxa ko'chiring va taxtaga yuklang.

/** Ertaklarni tekshirish uchun fotogateldan foydalanadigan dastur

*/ #include #include #include #include RF24 radiosi (9, 10); // CE, CSN const bayt manzili [6] = "00010"; // --- dastur consts --- // vaqt 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; // o'z tajriba sinovlari asosida yuqoridagi varni belgilang 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 // --- dastur dasturlari --- int num_string_seen = 0; int num_loops = 0; void setup () {// while (! Serial); // flora uchun // kechiktirish (500); num_string_seen = 0; raqamlar_0 = 0; pinMod (GATE_PIN, Kirish); pinMod (GATE_PIN_2, Kirish); Serial.begin (115200); // radio.begin () disk raskadrovka uchun. radio.openWritingPipe (manzil); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// qayta ishga tushirish uchun asosiy kodingizni bu erga qo'ying: if (num_loops % string_check_time == 0) {// string status check_string (); } if (num_loops == flow_check_time) {// oqimni tekshiring //Serial.println(num_string_seen); int flow_num = examine_flow (); // qiymatlarni yuborish send_out (oqim_num); // asl holatini tiklash num_string_seen = 0; raqamlar_0 = 0; kechikish (flow_check_delay); } num_loops ++; kechikish (base_delay); } / * *String darvozani kesib o'tishini tekshirish usuli * / void check_string () {int string_state = digitalRead (GATE_PIN); //Serial.println(string_state); agar (string_state == 0) {num_string_seen ++; //Serial.println("Saw string! "); }

int bot_state = digitalRead (GATE_PIN_2);

agar (bot_state == 0) {num_string_seen--; //Serial.println("topdagi satr! "); } //Serial.print("Sanat qatori o'tadi: "); //Serial.println(num_string_seen); qaytish; }/ * * Vaqtning qaysi qismi darvozani qamrab olganini tahlil qilish usuli */int examine_flow () {double foiz_seen = double (num_string_seen)/max_in_flow; Serial.print ("Qoplangan foiz:"); printDouble (ko'rilgan foiz, 100); // qiymatni aloqa shkalasiga o'lchash int scaled_flow = int (foiz_ko'rilgan * msg_max_val); if (scaled_flow> msg_max_val) {scaled_flow = msg_max_val; } if (scaled_flow = 0) frac = (val - int (val)) * aniqlik; else frac = (int (val)- val) * aniqlik; Serial.println (frac, DEC); }

Mana, chapdagi ertakning kodi. Chap xabar uchun yuqoridagi amallarni bajaring. Ko'rib turganingizdek, farq faqat xabar o'z natijalarini yuboradigan manzil.

/** Ertaklarni tekshirish uchun fotogateldan foydalanadigan dastur

*/ #include #include #include #include RF24 radiosi (9, 10); // CE, CSN const bayt manzili [6] = "00001"; // --- dastur consts --- // vaqt 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; // o'z tajriba sinovlari asosida yuqoridagi varni belgilang 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 // --- dastur dasturlari --- int num_string_seen = 0; int num_loops = 0; void setup () {// while (! Serial); // flora uchun // kechiktirish (500); num_string_seen = 0; raqamlar_0 = 0;

pinMod (GATE_PIN, Kirish);

pinMod (GATE_PIN_2, Kirish); Serial.begin (115200); // radio.begin () disk raskadrovka uchun. radio.openWritingPipe (manzil); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// qayta ishga tushirish uchun asosiy kodingizni bu erga qo'ying: if (num_loops % string_check_time == 0) {// string status check_string (); } if (num_loops == flow_check_time) {// oqimni tekshiring //Serial.println(num_string_seen); int flow_num = examine_flow (); // qiymatlarni yuborish send_out (oqim_num); // asl holatini tiklash num_string_seen = 0; raqamlar_0 = 0; kechikish (flow_check_delay); } num_loops ++; kechikish (base_delay); } / * *String darvozani kesib o'tishini tekshirish usuli * / void check_string () {int string_state = digitalRead (GATE_PIN); //Serial.println(string_state); agar (string_state == 0) {num_string_seen ++; //Serial.println("Saw string! "); }

int bot_state = digitalRead (GATE_PIN_2);

agar (bot_state == 0) {num_string_seen--; //Serial.println("pastda satr!"); } //Serial.print("Sanat qatori o'tadi: "); //Serial.println(num_string_seen); qaytish; }/ * * Vaqtning qaysi qismi darvozani qamrab olganini tahlil qilish usuli */int examine_flow () {double foiz_seen = double (num_string_seen)/max_in_flow; Serial.print ("Qoplangan foiz:"); printDouble (ko'rilgan foiz, 100); // qiymatni aloqa shkalasiga o'lchash int scaled_flow = int (foiz_ko'rilgan * msg_max_val); if (scaled_flow> msg_max_val) {scaled_flow = msg_max_val; } if (scaled_flow = 0) frac = (val - int (val)) * aniqlik; else frac = (int (val)- val) * aniqlik; Serial.println (frac, DEC); }

5 -qadam: Xabar yig'ilishi

Hikoya yig'ilishi
Hikoya yig'ilishi

Shaxsiy qismlar

  • Hikoya ramkasi
  • Ip
  • Tuzilgan hikoya sxemasi
  • Batareya to'plami
  • Elektr tasmasi
  • Epoksi yoki elim

3D bosib chiqarish uchun STLlar komponentlarini aytib beradi

  • Guvohlik ramkasi uchun STL: chap, o'ng
  • Elektron quti uchun STLlar: yuqoridan, pastdan

O'rnatish bo'yicha ko'rsatmalar

  1. Bar magnitlarini 3D bosma ramkaning uyalariga joylashtiring. Magnitlarning o'ng va chap ramka o'rtasida to'g'ri joylashishiga ishonch hosil qiling, so'ngra magnitlarni ramkaga mahkamlash uchun epoksi (yoki elim) dan foydalaning. Epoksi (yoki elim) to'liq o'rnatilishiga ruxsat bering.
  2. Surat to'xtatuvchilarni ramkaning orqa qismidagi yuqori va pastki uyalarga joylashtiring. Ehtiyotkorlik bilan epoksi (yoki yopishtiruvchi) yordamida suratga olish panelini ramkaga joylashtiring. Epoksi (yoki elim) to'liq o'rnatilishiga ruxsat bering
  3. ~ 7 ipni kesib oling. Ipning bir uchini birinchi vertikal chiziqning chetiga bog'lab qo'ying. Kichik bir elektr tasmasini kesib oling va elektr tasmasini fotosurat uzgichlari hududida bo'ladigan ipning ustiga o'rang. Ipni ramkadan o'tkazing, shunda u fotosuratni uzuvchi eshik eshigidan o'tadi.
  4. 3D magnitlangan elektron qutining pastki qismidagi uyali magnitlarni joylashtiring. Magnitlar o'ng quti va chap quti o'rtasida to'g'ri joylashtirilganligiga ishonch hosil qiling, so'ngra magnitlarni ramkaga mahkamlash uchun epoksi (yoki elim) dan foydalaning. Epoksi (yoki elim) to'liq o'rnatilishiga ruxsat bering.
  5. Elektron qutiga turli xil komponentlarni o'z uyalariga moslab joylashtiring. 3D bosilgan elektron qutining yuqori qismidagi qutini yoping. Batareyani epoksi (yoki elim) bilan qutining yuqori qismiga qo'ying, shunda kalit ochiq bo'ladi.

6 -qadam: Karnay uskunalari

Karnay uskunalari
Karnay uskunalari
Karnay uskunalari
Karnay uskunalari
Karnay uskunalari
Karnay uskunalari

Chiqish tizimi simsiz aloqa va ovoz balandligini sozlash tugmasi bilan jihozlangan ikkita dinamik sxemasidan iborat. Birinchidan, nRF24L01 modullari bilan ishlash uchun protobardlarni tayyorlang, xuddi biz taxtalar joylashtiriladigan ikki qatorli pimlarni ajratuvchi simlarni kesib.

Keyin tugallangan sxemalarning fotosuratlariga ishora qilib, sxemani yuqoridagi diagrammada ko'rsatilgandek yig'ing.

Kengashni yig'ish bo'yicha ko'rsatmalar

Kengashlarni karnay korpusiga yopishtirish uchun asosiy qismlarni taxtaning ma'lum joylariga joylashtirish kerak. Quyidagi yo'riqnomada men Adafruit protoboardidagi satr va ustunlarni belgilash uchun ishlatiladigan koordinata tizimiga ishora qilaman:

  1. Arduino Nano -ni taxtaning yuqori chetiga o'rtada joylashtirish kerak, shunda Vin pimi G16 -da joylashadi. Bu elektron yig'ilgandan so'ng Arduino Nano -ni oson qayta dasturlash imkonini beradi.
  2. NRF24L01 taxtasi C1 dan D5 gacha bo'lgan sakkiz pozitsiyani o'z ichiga olgan taxtaning o'ng pastki burchagiga joylashtirilishi kerak. Bu simsiz aloqani yaxshilash uchun nRF24L01 protobardiga osib qo'yiladi.
  3. Karnay tizimi uchun batareya to'plami ikkala protoboardni ham quvvatlantiradi, shuning uchun Arduino Nanoning ikkita GND raylari/pinlari va Vin pinlarini quvvat manbaiga ulang.
  4. "Pastki" sxemasi uchun potentsiometrni taxtaning yuqori tomoniga qaragan holda joylashtirish kerak, shunda uning pinlari J2, J4 va J6 pozitsiyalariga joylashtiriladi.

    1. J2, raqamli pin 3 (D3) dan Arduino Nano chiqishi
    2. J4, 2N3904 tranzistorli asosiy pin
    3. J6, ulanmagan
  5. "Yuqori" sxemasi uchun potentsiometrni taxtaning pastki qismiga tashqariga qaragan holda joylashtirish kerak, shunda uning pinlari J9, J11 va J13 pozitsiyalariga joylashtiriladi.

    1. J13, raqamli pin 3 (D3) dan Arduino Nano chiqishi
    2. J11, 2N3904 tranzistorli asosiy pin
    3. J9, ulanmagan

7 -qadam: Karnay dasturi

Mana, chap hikoya bilan muloqot qiladigan spikerning kodi. Pastki karnay panelidagi Arduino Nano -ni kompyuteringizga ulang, Arduino IDE -ni oching, ushbu kodni nusxa ko'chiring va joylashtiring va taxtaga yuklang.

#qo'shing

#include #include RF24 radiosi (7, 8); // Idoralar, CSN // chapdan aytilgan so'zlar, yuqori ma'ruzachilar paneli const bayt manzili [6] = "00001"; const int pitch = 2000; const int pitch_duration = 200; const int dinamik = 3; const int delay_gain = 100; int holati = 0; int cur_delay = 0; char o'qish [2]; void setup () {pinMode (dinamik, OUTPUT); Serial.begin (115200); Serial.println ("Simsiz aloqa ishga tushirilmoqda …"); radio.begin (); radio.openReadingPipe (0, manzil); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& o'qish, sizeof (o'qish)); status = (int) ([0]-'0' ni o'qing); Serial.print ("Qabul qilindi:"); Serial.println (holati); cur_delay = delay_gain*holati; } if (cur_delay) {ohang (karnay, balandlik, balandlik_ davomiyligi); kechikish (cur_delay + pitch_duration); Serial.println ("Bip!"); }}

Bu erda ma'ruzachi to'g'ri talaffuz bilan aloqa qiladigan kod. Yuqori dinamiklar panelidagi Arduino Nano -ni kompyuteringizga ulang, Arduino IDE -ni oching, ushbu kodni nusxa ko'chiring va joylashtiring va taxtaga yuklang.

#qo'shing

#include #include RF24 radiosi (7, 8); // Idoralar, CSN // o'ng xabar, pastki karnay taxtasi const bayt manzili [6] = "00010"; const int pitch = 1500; const int pitch_duration = 200; const int dinamik = 3; const int delay_gain = 100; int holati = 0; int cur_delay = 0; char o'qish [2]; void setup () {pinMode (dinamik, OUTPUT); Serial.begin (115200); Serial.println ("Simsiz aloqa ishga tushirilmoqda …"); radio.begin (); radio.openReadingPipe (0, manzil); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& o'qish, sizeof (o'qish)); status = (int) ([0]-'0' ni o'qing); Serial.print ("Qabul qilindi:"); Serial.println (holati); cur_delay = delay_gain*holati; } if (cur_delay) {ohang (karnay, balandlik, balandlik_ davomiyligi); kechikish (cur_delay+pitch_duration); Serial.println ("Bip!"); }}

8 -qadam: Spiker yig'ilishi

Shaxsiy qismlar

  • 2 ta dinamik dinamiklar sxemasi
  • 2 ta dinamik
  • 1 ta batareya to'plami

3D bosib chiqarish uchun STL

  • Qutining tepasi
  • Pastki quti

Jismoniy yig'ish bo'yicha ko'rsatmalar

  1. Ovoz balandligi tugmalari bir -birining yonida bo'lishi va teshiklarga sirg'alib ketishi uchun karnay zanjirlarini ehtiyotkorlik bilan qutining pastki qismiga joylashtiring. Aloqa chiplari qutining orqa tomonida bo'lishi kerak.
  2. Karnayni elektron plataning chap va o'ng tomoniga joylashtiring, shunda dinamiklar to'g'ri aytilgan tomonlarga mos kelishiga ishonch hosil qiling. Dinamiklarni qutining yon tomonidagi uyalarga tekislang.
  3. Batareya paketining simlarini qutining orqa qismidagi kichik teshikdan o'tkazing. Batareya qutisini epoksi (yoki elim) bilan qutining orqa tomoniga qo'ying, shunda kalit ochiq bo'ladi.
  4. Har bir narsani o'z ichiga oladigan 3D bosilgan qutini qutining pastki qismiga qo'ying.

9 -qadam: O'rnatish/o'rnatish

O'rnatish/o'rnatish
O'rnatish/o'rnatish
  1. Batareya paketlaridagi kalitlarni "ON" holatiga o'tkazib, talantlarni yoqing. Chiqish tizimini yoqish uchun karnay yig'ilishi uchun ham xuddi shunday qiling.
  2. Ovozli eshittirishlarni o'rnatish osonlikcha ikki kishi bilan amalga oshiriladi, lekin bir kishi bilan amalga oshirilishi mumkin. Yelkani ko'tarishdan oldin, burilish moslamasini o'rnatish uchun teletkalarni qo'yish osonroq edi.
  3. Hikoya ramkasining to'g'ri yo'naltirilganligiga ishonch hosil qilish uchun vertikal chiziqlardan birining kesilgan joyiga qarang. Ramkani tik ushlab turganda, tepa tepaga qarab turishi kerak. Bu chiziqli ramkaning yon tomoni ham qayiqning old tomoniga qaragan bo'lishi kerak.
  4. Ertaklardan birini kerakli balandlikda va yelkanga qo'ying. U shunday joylashtirilishi kerakki, agar ip an'anaviy hikoyaning bir qismi bo'lsa, xuddi shu joyda bo'ladi.
  5. Bir marta ertakni kerakli holatda ayting. Boshqa ertakni yelkanning narigi tomoniga joylashtiring, siz joylashtirganingizdagiga qarama -qarshi qilib, magnitlar bir -biriga to'g'ri keladi. Elektron korpusining magnitlarini yelkanning har ikki tomonida bir -biriga bog'laydigan qilib joylashtiring.
  6. Agar siz paychalarining orqaga oqayotganida, u yuqori darvoza oldidan o'tmasligini payqasangiz, ramkaning orqa yarmi pastga qarab boshini aylantiring. Ip to'g'ridan -to'g'ri orqaga oqganda, ip yuqori foto kesgichdan o'tguncha ramkani aylantiring.

10 -qadam: Muammolarni bartaraf etish

Kodning barcha bo'laklarida ma'lumotlarni yuborish, qabul qilish va qayta ishlashni ko'rsatuvchi disk raskadrovka bayonoti mavjud. COM portini Arduino IDE yordamida kompyuterga ulangan Arduino Nano quyi tizimlaridan biri yordamida ochish sizga ushbu holat xabarlarini ko'rish imkonini beradi.

Agar tizim to'g'ri ishlamasa, barcha komponentlarni yoqing.

11 -qadam: Mumkin bo'lgan keyingi qadamlar

  • Gidroizolyatsiya
  • Uzoq masofali aloqa. Wi -Fi - istiqbolli variant.
  • Hozirgi sozlamamizda har bir ertak uchun 2 ta rasm uzuvchi ishlatiladi. Tizimga ko'proq fotosurat to'xtatuvchilarni qo'shish qiziqarli bo'lishi mumkin.

Tavsiya: