Czołem drukarze!
W domyślnej konfiguracji mojej Prusy MK3 brakowało mi jednej rzeczy – jakiegoś akustycznego powiadamiania o zakończeniu druku. Sama drukarka jest tak cicha, że nawet siedząc w tym samym pokoju nie zawsze od razu się orientowałem, że druk się skończył i mogę puszczać kolejny ;)
Na szczęście da się ten temat bardzo prosto ogarnąć dodając jedynie kawałek GCODE do plików generowanych przez slicer.
Jak zmusić drukarkę 3D do wydania dźwięku?
Zacząć trzeba od tego, że grać mogą jedynie te drukarki, które są wyposażone w buzzer, czyli fizyczny element wydający dźwięki. Większość drukarek takie buzzery ma standardowo na płytach głównych lub przy wyświetlaczach.
Za wydawanie dźwięków odpowiada gcode M300, którego używa się w następującym formacie:
1 |
M300 S300 P1000 |
Gdzie S to częstotliwość dźwięku w Hz, a P to jego długość w milisekundach.
Info o gcode M300 znajdziecie na reprap wiki.
Skąd brać gotowe melodie?
Szukając w internecie gotowych GCODE dla drukarek 3D można znaleźć trochę popularnych melodii. Np. tutaj znajdziecie kilka gotowców do użycia w Waszych drukarkach.
W bardzo prosty sposób możemy wykorzystać także melodie zapisane w formacie RTTTL, który jeszcze w czasach internetu na impulsy był wykorzystywany do komponowania utworów w telefonach komórkowych. I melodii w tym formacie są w sieci pewnie całe miliony!
Ja w swoich Prusach używam tego motywu:
1 2 3 4 5 6 7 8 9 10 11 |
;PowerRangers Theme M300 S2349 P166 M300 S0 P166 M300 S2349 P166 M300 S0 P166 M300 S2093 P166 M300 S2349 P166 M300 S0 P166 M300 S2793 P166 M300 S0 P166 M300 S2349 P166 |
Który w drukarce brzmi tak:
Jak skonwertować melodię w formacie RTTTL na GCODE dla drukarki 3D?
Do konwersji można użyć konwertera dostępnego tutaj: http://ddrboxman.github.io/RepRapRingtone/.
Zasada działania jest banalnie prosta – wklejamy melodię w formacie RTTTL, klikamy Convert i mamy gotowy GCODE dla drukarki 3D.
Jak dodawać melodię automatycznie do każdego generowanego GCODE?
Chyba każdy ze slicerów pozwala modyfikować początkowe i końcowe fragmenty GCODE, które są dodawane do każdego generowanego programu.
W przypadku Slic3r PE, którego ja używam, taka opcja znajduje się tutaj:
Wystarczy wkleić gcode z naszą melodią na samym końcu w polu End G-code, aby melodia była dodawana do każdego generowanego pliku.
W bardzo podobny sposób można dodawać własne powiadomienia dźwiękowe przy zmianie warstwy, koloru, itp.
Mam nadzieję, że komuś się ta wiedza przyda i ułatwi życie :)
Pozdrawiam!
Łukasz
A jak realizować to na Ramps+Marlin ?
Marlin bez problemu obsługuje odtwarzanie dźwięków komendą M300, więc jeżeli tylko masz w rampsie albo przy wyświetlaczu buzzer, to zadziała od razu.
Buzzer generuje częstotliwość na jaką jest skonstruowany/zbudowany. Zadawanie konkretnej częstotliwości działa tylko w konfiguracji z głośnikiem.
Są buzzery i buzzery z generatorem. Te z generatorem faktycznie piszczą ednym dźwiękiem, ale ze zwykłego buzzera można wydobywać różne dźwięki.
“Zacząć trzeba od tego, że grać mogą jedynie te drukarki, które są wyposażone w buzzer”
Wieeeeelkie kłamstwo ;) Grać może każda drukarka która ma silniki, na takiej samej zasadzie na jakiej działa Floppotron.
Jest wiele stron gdzie można przerobić midi na gcode do swojej maszyny, drukarki 3D, frezarki CNC, plotera itp.
Wystarczy wyszukać frazę “Midi to gcode”.
Aby nie było że jestem gołosłowny, proszę bardzo link:
https://www.ultimatesolver.com/en/midi2gcode
Otrzymany gcode wystarczy wprowadzić w slicerze do sekcji “end code” i gotowe – nie zależnie od tego czy buzzer mamy czy nie, a i w niektórych przypadkach brzmi to lepiej z racji na możliwość wydobycia niższych tonów oraz polifonii(każda oś może “grać” niezależnie od siebie różne dźwięki).
No, no :) Tylko tutaj już trzeba angażować do pracy silniki ;)
A mi się marzy coś innego…
Oglądam sobie ostatni odcinek jakiegoś fajnego serialu (co się tak fajnie ganiaja i strzelają, albo coś w tym stylu), drukarka stoi w drugim pokoju (drzwi zamknięte i żaden dźwięk nie dociera), a w pewnym momencie słyszę “Cześć, wydruk skończony, temperatura stołu spadła do XX stopni, możesz iść zdjąć wydruk”…
W sumie program mam napisany, tylko muszę jakoś się uporać z zasilaniem…
Teoretycznie nie wydaje się to ciężkie do ogarnięcia. Jeżeli do drukarki podpięty jest octoprint, to wystarczyłoby wysłać jedno zapytanie GET, a w smartfonie obsłużyć to aplikacją Automate.
W podobny sposób miałem zrobione informowanie o temperaturze pieca w fablabie – jak temp. była za wysoka, to arduino wysyłało GET, a mi smartfon za pomocą syntezatora mówił “Uwaga, temperatura pieca przekroczyła 100C”.
Tak, mam octoprinta, tylko nie chcę smartfona angażować. Program mam napisany na ESP8266, działa całkiem zacnie, tyle że przy dłuższych wydrukach akumulator (pojedynczy 18650) może nie wystarczyć – a mam takie ustawienie mebli, że ładowarki wygodnie nie podłączę.
Postaw na ESP lub Rasp serwer, ten niech odbierze od drukarki sygnał o zakończeniu druku, generuje RSS z komunikatem o zakończeniu druku. Jeśli masz dostatecznie inteligentne urządzenia w domu, to powiadomią Cię o tym fakcie. Np TV przełączy się na TVP Religia, pralka zacznie wirować, lodówka rozmrozi mielone, dom podniesie rolety… Możliwości nie ma końca. Ewentualnie asystent G zawibruje Ci w kieszeni.
Oh… really?
Fajny patencior :) Dzięki!