Mündəricat:
- Addım 1: Materiallar Bill
- Addım 2: Alətlər/Maşınlar/Proqram Tələbləri
- Addım 3: Telltale Hardware
- Addım 4: Telltale Proqramı
- Addım 5: Telltale Assambleyası
- Addım 6: Dinamik Donanımı
- Addım 7: Dinamik Proqramı
- Addım 8: Dinamiklər Məclisi
- Addım 9: Quraşdırma/Montaj
- Addım 10: Problemlərin aradan qaldırılması
- Addım 11: Mümkün Növbəti Adımlar
Video: Yelkənli Səsli Xəbərlər: 11 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Telltales, yelkən boyunca turbulent və ya laminar axının olub olmadığını göstərmək üçün üzgüçülükdə istifadə olunan ip parçalarıdır. Ancaq yelkənin hər tərəfinə yapışdırılmış müxtəlif rəngli iplik parçaları sırf vizual göstəricilərdir. Bu səsli teletlər, Pauline kimi həm görmə qabiliyyətli, həm də görmə qüsurlu dənizçilər üçün vizual məlumatları eşitmə formasında çatdırmağı hədəfləyən köməkçi bir cihazdır.
Cihaz, xəbərin hərəkətini oxuyan bir giriş sistemindən və hava axını məlumatlarını ötürən bir sıra səs siqnalı verən bir çıxış sistemindən ibarətdir.
Bu cihazın istehsalında lehimləmə avadanlıqlarına və 3D printerə giriş tələb olunur.
Addım 1: Materiallar Bill
Əlaqələri və qiymətləri olan BOM
Qeyd: Aşağıdakıların hamısından 2 dəstə ehtiyacınız olacaq.
Giriş Sistemi
- Arduino Nano
- Adafruit perma-proto yarım ölçülü çörək taxtası PCB
- nRF24L01 Simsiz Telsiz Modulu
- Foto kəsici
- Sparkfun Şəkil kəsən kəsmə lövhəsi
- Arduino Uyğun 9V batareya paketi
- 9V batareya
- 22 ölçü telinin bir neçə uzunluğu
- İplik
- Neodim maqnitləri
- Epoksi
Çıxış Sistemi
- Arduino Nano
- Adafruit perma-proto yarı ölçülü çörək taxtası PCB
- nRF24L01 Simsiz Telsiz Modulu
- Arduino Uyğun 9V batareya paketi
- 1K Ohm potensiometr
- 120 Ohm müqavimət
- 2N3904 tranzistor
- 0.1 uF kondansatör
- Arduino ilə uyğun dinamik
GitHub Faylları
- Bu nağılları qurmaq üçün lazım olan bütün kod və STL sənədlərini bu GitHub repo -da tapa bilərsiniz.
- İki dəst korpusa və dinamik yuvasına ehtiyacınız olacaq.
Addım 2: Alətlər/Maşınlar/Proqram Tələbləri
Arduino proqramlaşdırmaq üçün Arduino IDE -ni yükləməlisiniz. Yükləmə linki burada tapa bilərsiniz.
NRF24L01 modulunu proqramlaşdırmaq üçün kitabxanasını Arduino IDE vasitəsilə yükləməlisiniz. Alətlər> Kitabxanaları İdarə et …> RF24 kitabxanasını quraşdırın
Elektron komponentləri yığmaq üçün əsas lehimləmə vasitələrinə giriş tələb olunur. Sökmə nasosu da faydalı ola bilər, lakin lazım deyil.
Nağıl çərçivəsi və dinamik qutusu qurmaq üçün 3D printerə girişiniz lazımdır.
Addım 3: Telltale Hardware
Dövrəni yuxarıdakı diaqramlara uyğun olaraq yığın. Arduino Nano protoboardın üst tərəfinə uyğunlaşdırılmalıdır. Bu, bütün elektronikalar bağlandıqdan sonra da USB portuna daxil olmağa imkan verir.
Elektronikanı qısaltmamaq üçün, yuxarıdakı şəkildə göstərildiyi kimi nRF24 -ün tutacağı sətirlərdə protoboardın izlərini kəsdiyinizə əmin olun.
Əks təqdirdə, nRF24 -ü protoboya bağlamaq üçün keçid kabellərinə ehtiyacınız olacaq.
Rezistor bağlantısı, GND və 5V telləri fotoşəkil kəsiciyə təsvir edilmir. Fotoşəkil kəsicisini qırılma lövhəsində göstərildiyi kimi bağlayın. Qırılma lövhəsinin bir görüntüsü daxil edilmişdir.
Sağ və Sol danışma sxemləri tam eynidır.
Addım 4: Telltale Proqramı
Budur sağ nağılın kodu. Right telltale -in nanosunu kompüterinizə qoşun, Arduino IDE -ni açın, bu kodu kopyalayıb yapışdırın və lövhəyə yükləyin.
/** Nağılları araşdırmaq üçün fotogat istifadə edən proqram
*/ #include #include #include #include RF24 radiosu (9, 10); // CE, CSN const bayt ünvanı [6] = "00010"; // --- proqram 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; // yuxarıdakı var -ı öz eksperimental sınaqlarına əsaslanaraq 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); // flora üçün // gecikmə (500); num_string_seen = 0; num_loops = 0; pinMode (GATE_PIN, GİRİŞ); pinMode (GATE_PIN_2, GİRİŞ); Serial.begin (115200); // radio.begin () ayıklama üçün; radio.openWritingPipe (ünvan); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// əsas kodunuzu bura qoyun, təkrar işləsin: if (num_loops % string_check_time == 0) {// string status check_string (); } if (num_loops == flow_check_time) {// axını yoxlayın //Serial.println(num_string_seen); int flow_num = examine_flow (); // göndərmə dəyərləri send_out (flow_num); // sıfırla vars_sayt_seen = 0; num_loops = 0; gecikmə (flow_check_delay); } num_loops ++; gecikmə (baza gecikməsi); } / * *Stringin qapıdan keçib keçmədiyini yoxlamaq üsulu * / void check_string () {int string_state = digitalRead (GATE_PIN); //Serial.println(string_state); əgər (string_state == 0) {num_string_seen ++; //Serial.println("Saw string! "); }
int bot_state = digitalRead (GATE_PIN_2);
əgər (bot_state == 0) {num_string_seen--; //Serial.println("solda sim! "); } //Serial.print("Sayt xətti keçir: "); //Serial.println(num_string_seen); qayıtmaq; }/ * * Vaxtın hansı hissəsinin darvazanı əhatə etdiyini təhlil etmək üsulu */int examine_flow () {double percent_seen = double (num_string_seen)/max_in_flow; Serial.print ("Yüzdə əhatə:"); printDouble (yüzdə_görünən, 100); // dəyərin ünsiyyət miqyasına qədər ölçülməsi int scaled_flow = int (yüzde_görünən * msg_max_val); if (scaled_flow> msg_max_val) {scaled_flow = msg_max_val; } if (scaled_flow = 0) frac = (val - int (val)) * dəqiqlik; else frac = (int (val)- val) * dəqiqlik; Serial.println (frac, DEC); }
Sol sözün kodu budur. Sol danışma üçün yuxarıdakılarla eyni addımları izləyin. Gördüyünüz kimi, yeganə fərq, xəbərin nəticələrini göndərdiyi ünvandır.
/** Nağılları araşdırmaq üçün fotogat istifadə edən proqram
*/ #include #include #include #include RF24 radiosu (9, 10); // CE, CSN const bayt ünvanı [6] = "00001"; // --- proqram 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; // yuxarıdakı var -ı öz eksperimental sınaqlarına əsaslanaraq 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); // flora üçün // gecikmə (500); num_string_seen = 0; num_loops = 0;
pinMode (GATE_PIN, GİRİŞ);
pinMode (GATE_PIN_2, GİRİŞ); Serial.begin (115200); // radio.begin () ayıklama üçün; radio.openWritingPipe (ünvan); radio.setPALevel (RF24_PA_MIN); radio.stopListening (); } void loop () {// təkrar etmək üçün əsas kodunuzu bura qoyun: if (num_loops % string_check_time == 0) {// string status check_string (); } if (num_loops == flow_check_time) {// axını yoxlayın //Serial.println(num_string_seen); int flow_num = examine_flow (); // göndərmə dəyərləri send_out (flow_num); // sıfırla vars_sayt_seen = 0; num_loops = 0; gecikmə (flow_check_delay); } num_loops ++; gecikmə (baza gecikməsi); } / * *Stringin qapıdan keçib keçmədiyini yoxlamaq üsulu * / void check_string () {int string_state = digitalRead (GATE_PIN); //Serial.println(string_state); əgər (string_state == 0) {num_string_seen ++; //Serial.println("Saw string! "); }
int bot_state = digitalRead (GATE_PIN_2);
əgər (bot_state == 0) {num_string_seen--; //Serial.println("solda sim! "); } //Serial.print("Sayt xətti keçir: "); //Serial.println(num_string_seen); qayıtmaq; }/ * * Vaxtın hansı hissəsinin darvazanı əhatə etdiyini təhlil etmək üsulu */int examine_flow () {double percent_seen = double (num_string_seen)/max_in_flow; Serial.print ("Yüzdə əhatə:"); printDouble (yüzdə_görünən, 100); // dəyərin ünsiyyət miqyasına qədər ölçülməsi int scaled_flow = int (yüzde_görünən * msg_max_val); if (scaled_flow> msg_max_val) {scaled_flow = msg_max_val; } if (scaled_flow = 0) frac = (val - int (val)) * dəqiqlik; else frac = (int (val)- val) * dəqiqlik; Serial.println (frac, DEC); }
Addım 5: Telltale Assambleyası
Fərdi hissələr
- Nağıl çərçivəsi
- İplik
- Qurulmuş bir xəbər dövrəsi
- Batareya paketi
- Elektrik lenti
- Epoksi və ya yapışqan
3D çap üçün məlumat verən komponentlər üçün STL -lər
- Anlaşılan çərçivə üçün STL: sol, sağ
- Elektron qutu üçün STL -lər: yuxarı, aşağı
Montaj Təlimatları
- Çubuq maqnitlərini 3D çaplı danışma çərçivəsinin yuvalarına yerləşdirin. Maqnitlərin sağ çərçivə ilə sol çərçivə arasında düzgün bir şəkildə hizalandığından əmin olun, sonra maqnitləri çərçivəyə bağlamaq üçün epoksi (və ya yapışqan) istifadə edin. Epoksi (və ya yapışqan) tamamilə bərkiməsinə icazə verin.
- Foto kəsiciləri çərçivənin arxasındakı yuxarı və aşağı yuvalara yerləşdirin. Foto kəsici lövhələri çərçivəyə diqqətlə epoksi (və ya yapışdırıcı) ilə yapışdırın. Epoksi (və ya yapışqan) tamamilə bərkiməsinə icazə verin
- ~ 7 iplik kəsin. İpliyin bir ucunu ilk şaquli çubuğun çuxuruna bağlayın. Kiçik bir elektrik lenti kəsin və elektrik lentini fotoşəkil kəsicilərin bölgəsində olacaq iplik hissəsinin üzərinə sarın. İpliyi foto kəsici qapısının boşluğundan keçməsi üçün çərçivədən keçirin.
- Çubuq mıknatısları, 3D çaplı elektronika qutusunun altındakı yuvalara yerləşdirin. Maqnitlərin sağ qutu ilə sol qutu arasında düzgün bir şəkildə yerləşdiyinə əmin olun, sonra maqnitləri çərçivəyə bağlamaq üçün epoksi (və ya yapışqan) istifadə edin. Epoksi (və ya yapışqan) tamamilə bərkiməsinə icazə verin.
- Fərqli komponentləri yuvalarına uyğunlaşdıraraq qurulmuş nağıl sxemini elektronika qutusuna yerləşdirin. 3D çaplı elektronika qutusunun üstü olan qutunu bağlayın. Batareyanı epoksi (və ya yapışqan) ilə bağlayın ki, açar açılsın.
Addım 6: Dinamik Donanımı
Çıxış sistemi simsiz rabitə və səs tənzimləmə düyməsi ilə təchiz edilmiş hər bir danışma üçün iki dinamik sxemdən ibarətdir. Birincisi, lövhənin yerləşdiriləcəyi iki sıra sancağı ayıran telləri kəsərək nağıl sxemləri üçün etdiyimiz kimi nRF24L01 modulları ilə istifadə üçün protoboardları hazırlayın.
Sonra, tamamlanmış sxemlərin fotoşəkillərinə istinad edərkən, yuxarıdakı diaqramda göstərildiyi kimi dövrə yığın.
İdarə Heyətinin Quraşdırılması Təlimatları
Lövhələri hoparlör qutusuna yığmaq üçün əsas komponentlər lövhənin müəyyən sahələrinə yerləşdirilməlidir. Aşağıdakı təlimatlarda, Adafruit protoboardındakı satır və sütunları ifadə etmək üçün istifadə olunan koordinat sisteminə istinad edəcəyəm:
- Arduino Nano, taxtanın yuxarı kənarına ortada yerləşdirilməlidir ki, Vin pimi G16 -da yerləşdirilsin. Bu, dövrə yığıldıqdan sonra Arduino Nanonun asanlıqla yenidən proqramlaşdırılmasına imkan verəcəkdir.
- NRF24L01 lövhəsi, C1 -dən D5 -ə qədər səkkiz mövqeyi əhatə edən lövhənin sağ alt küncünə yerləşdirilməlidir. Bu, nRF24L01 -in daha yaxşı simsiz ünsiyyətə imkan yaratmaq üçün protobolda asılmasını tərk edəcək.
- Dinamik sistemi üçün batareya paketi hər iki protoboya da güc verir, buna görə də iki Arduino Nanonun GND raylarını/pinlərini və Vin pinlərini enerji təchizatına bağladığınızdan əmin olun.
-
"Alt" dövrə üçün, potensiometr lövhənin yuxarı tərəfinə baxmalı və pinləri J2, J4 və J6 mövqelərinə yerləşdirilməlidir.
- J2, rəqəmsal pin 3 -dən Arduino Nano çıxışı (D3)
- 2N3904 tranzistorlu J4 ↔ əsas pin
- J6 - əlaqəsiz
-
"Üst" dövrə üçün, potensiometr lövhənin dibinə çölə baxaraq yerləşdirilməlidir ki, pinləri J9, J11 və J13 mövqelərinə yerləşdirilsin.
- J13 digital Arduino Nano rəqəmsal pin 3 -dən çıxışı (D3)
- J11 ↔ 2N3904 tranzistorlu əsas pin
- J9 - əlaqəsiz
Addım 7: Dinamik Proqramı
Sol nağılla danışan natiqin kodu budur. Alt dinamik panelindəki Arduino Nano'yu kompüterinizə bağlayın, Arduino IDE -ni açın, bu kodu kopyalayıb yapışdırın və lövhəyə yükləyin.
#daxil edin
#include #include RF24 radiosu (7, 8); // CE, CSN // sol nağıl, üst dinamik lövhəsi const bayt ünvanı [6] = "00001"; const int pitch = 2000; const int pitch_duration = 200; const int dinamik = 3; const int delay_gain = 100; int statusu = 0; int cur_delay = 0; char oxu [2]; boş quraşdırma () {pinMode (dinamik, ÇIXIŞ); Serial.begin (115200); Serial.println ("Simsiz ünsiyyətə başlanır …"); radio.begin (); radio.openReadingPipe (0, ünvan); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& oxumaq, sizeof (oxumaq)); status = (int) (oxuyun [0]-'0'); Serial.print ("Alındı:"); Serial.println (status); cur_delay = delay_gain*statusu; } if (cur_delay) {ton (dinamik, pitch, pitch_duration); gecikmə (cur_delay + pitch_duration); Serial.println ("Beep!"); }}
Doğru nağılla əlaqə quran natiqin kodu budur. Üst dinamik panelindəki Arduino Nano'yu kompüterinizə qoşun, Arduino IDE -ni açın, bu kodu kopyalayıb yapışdırın və lövhəyə yükləyin.
#daxil edin
#include #include RF24 radiosu (7, 8); // CE, CSN // sağ nağıl, alt dinamik panelinin const bayt ünvanı [6] = "00010"; const int pitch = 1500; const int pitch_duration = 200; const int dinamik = 3; const int delay_gain = 100; int statusu = 0; int cur_delay = 0; char oxu [2]; boş quraşdırma () {pinMode (dinamik, ÇIXIŞ); Serial.begin (115200); Serial.println ("Simsiz ünsiyyətə başlanır …"); radio.begin (); radio.openReadingPipe (0, ünvan); radio.setPALevel (RF24_PA_MIN); radio.startListening (); } void loop () {if (radio.available ()) {radio.read (& oxumaq, sizeof (oxumaq)); status = (int) (oxuyun [0]-'0'); Serial.print ("Alındı:"); Serial.println (status); cur_delay = delay_gain*statusu; } if (cur_delay) {ton (dinamik, pitch, pitch_duration); gecikmə (cur_delay+pitch_duration); Serial.println ("Bip!"); }}
Addım 8: Dinamiklər Məclisi
Fərdi hissələr
- 2 qurulmuş dinamik dövrəsi
- 2 dinamik
- 1 ədəd batareya paketi
3D çap üçün STL -lər
- Qutunun üstü
- Alt qutu
Fiziki Quraşdırma Təlimatları
- Dinamik sxemlərini diqqətlə qutunun altına qoyun, bir lövhəni digərinin üstünə qoyun ki, səs düymələri bir -birinin yanında olsun və deliklərə sürüşsün. Rabitə çipləri qutunun arxasında görünməlidir.
- Dinamikləri düzgün lövhənin tərəflərinə uyğun olduğundan əmin olaraq, onları elektron kartın soluna və sağına yerləşdirin. Dinamikləri qutunun yan tərəfindəki yuvalara uyğunlaşdırın.
- Batareya paketinin tellərini qutunun arxasındakı kiçik çuxurdan keçirin. Batareyanı qutunun arxasındakı epoksi (və ya yapışqan) ilə açarın açılması üçün.
- Hər şeyi ehtiva etmək üçün 3D çap qutusunu qutunun altına qoyun.
Addım 9: Quraşdırma/Montaj
- Batareya paketlərindəki açarları "ON" vəziyyətinə çevirərək bildirişləri yandırın. Çıxış sistemini açmaq üçün hoparlör qurğusu üçün də eyni şeyi edin.
- Səsli teleskopların quraşdırılması ən asan iki nəfərlə edilir, ancaq bir nəfərlə edilə bilər. Qıvrımsız bir çubuğa montaj etmək üçün, yelkən qaldırılmadan əvvəl teletlər asanlıqla bağlanırdı.
- Nağıl çərçivəsinin düzgün istiqamətləndirildiyindən əmin olmaq üçün şaquli çubuqlardan birindəki çentikə baxın. Çərçivəni dik tutarkən çentik yuxarıya doğru olmalıdır. Bu çubuğu olan çərçivənin tərəfi də gəminin ön tərəfinə baxmalıdır.
- Nağıllardan birini istədiyiniz yüksəkliyə və yelkənə qoyun. İplik, ənənəvi bir nağılın bir hissəsi olsaydı, olduğu yerdə qalacaq şəkildə yerləşdirilməlidir.
- İstədiyiniz mövqedə bir nağıl danışdıqdan sonra. Başqa bir nağıl yelkənin digər tərəfinə qoyun, birincisinin tam əksinə, maqnitlər düzülür. Maqnitlər bir əlaqə qurduqdan sonra çərçivəni yelkənə möhkəm tutmalıdırlar. Yelkənin hər iki tərəfindəki hər bir nağıl üçün elektronika qutularının maqnitlərini sıralayın ki, onlar da birləşsinlər.
- İp düz geri dönəndə üst qapının qarşısından keçmədiyini görürsünüzsə, nağıl çərçivəsini elə çevirin ki, çərçivənin arxa yarısı aşağıya doğru baş çəksin. İplik düz geriyə axdıqda ip üst foto kəsicidən keçənə qədər çərçivəni döndərin.
Addım 10: Problemlərin aradan qaldırılması
Bütün kod parçaları, məlumatların göndərildiyini, qəbul edildiyini və işləndiyini ifadə etmək üçün debug çap ifadələrinə malikdir. Kompüterə qoşulmuş Arduino Nano alt sistemlərindən biri ilə Arduino IDE -dən istifadə edərək COM portunu açmaq, bu status mesajlarını görməyə imkan verəcəkdir.
Sistem düzgün işləmirsə, bütün komponentlərin açarlarını dəyişdirin.
Addım 11: Mümkün Növbəti Adımlar
- Su yalıtımı
- Daha uzun ünsiyyət. WiFi perspektivli bir seçimdir.
- Mövcud qurğumuz hazırda hər bir xəbər üçün 2 şəkil kəsəndən istifadə edir. Sistemə daha çox şəkil kəsənlər əlavə etmək cəhd etmək maraqlı ola bilər.
Tövsiyə:
Alexa əsaslı səsli idarə olunan raket atıcısı: 9 addım (şəkillərlə)
Alexa əsaslı səsli idarə olunan raket buraxıcı: qış mövsümü yaxınlaşdıqca; İşıqlar bayramının qeyd olunduğu ilin o vaxtı gəlir. Bəli, bütün dünyada qeyd olunan əsl Hindistan festivalı olan Diwali haqqında danışırıq. Bu il Diwali artıq bitdi və insanları görür
Arudino ilə Yelkənli Qayıqdan Qaçmaq: 9 Adım
Arudino ilə Yelkənli Qayıqdan Maneə: Salam dostlar, bu dərsdə sizə Avar Qayıqdan Qaçan Bir Maneənin necə ediləcəyini göstərəcəyəm. Balıq gölümün yanında istirahət edərkən və plastik bir problem üçün bir fikir düşünərkən bu fikrə gəldim. Buradakı plastikin çox olacağını başa düşdüm
Xəbərlər, Hava, Siqnal, Taymer və Todolist ilə Sehrli Güzgü: 9 addım
Xəbərlər, Hava, Siqnal, Zamanlayıcı və Todolist ilə Sehrli Güzgü: Sehrli Güzgü, arxasında ekranı olan xüsusi bir tərəfli güzgüdür. Raspberry Pi -yə qoşulan ekranda hava, otaq istiliyi, vaxt, tarix, todolist və sair kimi məlumatlar göstərilir. Hətta mikrofon da əlavə edib onu qura bilərsiniz
NODEMCU VISUINO İNTERNETDƏN CANLI XƏBƏRLƏR: 8 addım
NODEMCU VISUINO İNTERNETDƏN CANLI XƏBƏRLƏR GÖSTƏRİR: Bu dərslikdə İnternetdən bir neçə saniyədən bir LCD -də canlı xəbərləri göstərmək üçün NodeMCU Mini, OLED Lcd və Visuinodan istifadə edəcəyik. Bir nümayiş videosuna baxın
Vaxt, Xəbərlər və Ətraf Mühit Məlumatları üçün Öz MQTT EInk Ekranınızı yaradın: 7 addım
Zaman, Xəbərlər və Ətraf Mühit Məlumatları üçün Öz MQTT EInk Ekranınızı yaradın: 'THE', Zaman, Xəbərlər və Ətraf Mühit Məlumatları üçün kiçik bir MQTT Məlumat Ekranıdır. 4.2 düymlük eInk ekranından istifadə edərək onun konsepsiyası sadədir-hər iki dəqiqədən bir yenilənən məlumatları rotasiya əsasında göstərmək. Məlumatlar hər hansı bir yem ola bilər - f