==== Konwerter obrazu na sygnał/rysowanie na oscyloskopie ==== ^Zamieszany|[[user>hamsterking]] | ^Rozpoczęto | 2020-10-24 | ^Status|{{tag>w_realizacji}} | ^Tagi|{{tag>projekt}} | ==== Skąd pomysł ? ==== Swojego czasu ktoś zarzucił pomysł narysowania [[https://wiki.hsp.sh/logotyp|logo HSP]] na oscyloskopie. Zaciekawił mnie na tyle temat, aby odkurzyć stare Arduino oraz ruszyć zapomnianego Pythona. ==== Ogólny zamysł oraz zasady ==== (Przykładowy opis w: [1])\\ Oscyloskop korzystając z dwóch kanałów oraz trybu rysowania w osi X oraz Y poszczególnych kanałach jest w stanie wygenerować obraz z sygnałów. \\ Jednak mikrokontrolery z zasady nie posiadają konwerterów cyfrowych na analogowe (DAC), więc najłatwiejszym sposobem jest wykorzystanie sygnału PWM, który ładuje kondensatory. ==== Przydatne linki z programami==== - https://www.wave-editor.com/ - podgląd przebiegów plików z rozszerzeniem .wav - https://asdfg.me/osci/ - emulator oscyloskopu - https://www.svgviewer.dev/ - podgląd plików SVG - https://github.com/hamsterking123/svg_to_pwm/tree/master - repo z aktualnym kodem ==== Biblografia ==== [1] https://www.youtube.com/watch?v=nlCADL5_g-I \\ [2] https://physics.stackexchange.com/questions/160048/how-to-draw-waves-in-x-and-y-position-like-this-oscilloscope-example\\ [3]https://github.com/WarrenWeckesser/wavio/blob/master/wavio.py\\ [4]https://www.youtube.com/watch?v=MS931nlxB8Y\\ [5]https://music.stackexchange.com/questions/74555/how-to-generate-the-tone-of-a-specific-waveform\\ [6]https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes\\ [7]https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/d#Path_commands\\ [8]https://observablehq.com/@toja/ellipse-and-elliptical-arc-conversion\\ [9]https://www.johndcook.com/blog/2009/12/21/bezier-basics/ \\ [10]https://www.geeksforgeeks.org/cubic-bezier-curve-implementation-in-c/ \\ [11]https://www.mathsisfun.com/algebra/vectors-dot-product.html \\ ==== WORKLOG ==== * 25.10.2020\\ Po długiej walce z Pythonem oraz biblioteką ''wavio'' udało się wygenerować plik wav, który ma dwa kanały i można rysować już pierwsze kształty - koło, jako złożenie sinusa i cosinusa. {{ projekty:kolo_oscyloskop.png |}} * 26.10.2020\\ Udało się stworzyć asynchroniczny przebieg trójkątny z użyciem ''numpy.concatenate'', jednak przebieg jest teraz za wolny, aby narysować statyczny obraz. * 22.11.2020\\ Po miesiącu walki z SVG oraz PWMem (gdzie zamiast robić waveshaping z sygnału trójkątnego jest robiony DAC) udało stworzyć się stworzyć program, który tworzy plik .wav oraz łuk eliptyczny parametryzowany z użyciem końcowego punktu. {{ projekty:ellipse_arc_svg.png |}}\\ [Update z końca dnia]: - okazuje się, że dla SVG, oś Y rośnie w dół :) To, że wychodzą mi teraz dobre łuki, jest tylko efektem mojego kodu do kreowania punktów, a nie faktycznie poprawnie działający interpreter. Odkryłem to, gdy zauważyłem, że wg. standardu SVG, gdy dla linii podaje co raz wyższą wartość Y, to ta spada jeszcze bardziej. Planuje jakoś dokonać rzutowania punktów z osi dodatnią na ujemną. * 06.12.2020\\ Problem z osiami został rozwiązany. Okazało się, że program źle liczył kąty (zły znak) oraz później z tego powodu, była źle liczona krzywa (nie był uwzględniany znaku wartości kąta theta). Dodatkowo udało się zaimplementować równanie krzywe Beziera, więc aktualnie została kwestia czytania z pliku tekstowego.