Jakiś czas temu trafiło do mnie dość specyficzne zlecenie na gadżet weselny. Sam dobrze pamiętam jeszcze swoje wesele i temat bardzo mi się spodobał. Chodzi o telefon na życzenia. Zamiast standardowej książki, gdzie wpisują się goście, postawiony jest telefon, najlepiej w jakiejś oldschoolowej obudowie, na który, jak na automatyczną sekretarkę, można nagrać życzenia dla nowożeńców w formie audio.
Pomysł na Projekt
W skrócie, zadanie dla urządzenia jest proste: po podniesieniu słuchawki odtwarza się powitanie, potem rozpoczyna się nagrywanie, które kończy się po odłożeniu słuchawki lub po osiągnięciu limitu czasowego. Dodatkowo LED informuje o nagrywaniu, zasilanie jest z powerbanku, a nagrania można łatwo zgrywać najlepiej przez WiFi, bez otwierania urządzenia.
Projekt wydaje się przydatny także do innych zastosowań, jak np. robienie notatek głosowych, dlatego postanowiłem go opublikować w formie open source. Link do repozytorium. Powstał także film, który możecie zobaczyć poniżej. Cieszył się on zainteresowaniem, dlatego według obietnicy o powstaniu wersji 1.1, przygotowałem ją.
Proces Budowy
Klient miał już wybraną obudowę, więc pozostało wybrać elektronikę, jakoś to tam upchać i przygotować oprogramowanie. Mógłbym to zrobić na wiele sposobów, ale miałem wolną Raspberry Pi (jeśli nie wiesz czym jest zerknij tutaj), a termin był bardzo bliski, więc poszedłem na może nie najbardziej optymalne rozwiązanie, ale spełniające potrzeby.
Do budowy tego urządzenia potrzebne są: Raspberry Pi, czujnik do podniesienia słuchawki (może to być zwykła krańcówka), LED + rezystor, zestaw słuchawka z mikrofonem na USB, powerbank, trochę przewodów.
Wszystko dość ciasno, ale udało się zmieścić do obudowy według poniższego schematu.
Słuchawkę z mikrofonem musiałem rozłożyć na części pierwsze, aby je zaadaptować. Udało się wykorzystać wtyczki i kabel do słuchawki z telefonu, który był podstawą. Głośnik i mikrofon w słuchawce musiałem wymienić, ponieważ miały inną rezystancję niż to, co było w zestawie na USB. Do mocowania użyłem niezastąpionego kleju na ciepło, w który też musiałem zatopić trochę złomu, aby dociążyć słuchawkę. Oryginalny mikrofon i głośnik były znacznie cięższe, bez tego ciężaru nie mógłbym poprawnie odłożyć słuchawki.
W telefonie została tarcza, można by pomyśleć nad jej potencjalnym użyciem. Dość śmieszna sprawa, bo były to przyciski, oryginalnie w takich telefonach tarcza była obracana. Ja jestem z tego pokolenia, które jeszcze korzystało z takich telefonów, ale pewnie z czasem coraz mniej gości weselnych będzie znało taki telefon z życia i wiedziało, jak działał oryginał 😋
Oprogramowanie
Na Raspberry Pi wystarczył skrypt w Pythonie, głównie pomagał mi wtedy ChatGPT przy pierwszej wersji. Do wersji 1.1 przyłożyłem się bardziej sam oraz użyłem narzędzia AI trochę bardziej skrojonego na zadania programistyczne – Codium, o którym nagrałem niedawno short.
Jeśli jeszcze nie korzystaliście z Raspberry Pi, warto zobaczyć playlistę z Raspberry na moim kanale.
Podczas instalacji kolejny raz miałem mały problem z korzystaniem z funkcji wykrywającej podniesienie słuchawki:
GPIO.wait_for_edge(button_pin, GPIO.RISING)
Musiałem zmienić bibliotekę do obsługi GPIO (z tym AI nie potrafiło pomóc i reserach trzeba było robić konwencjonalnymi metodami). Jeśli też macie z tym problem wsytarczą poniższe komendy:
pip uninstall rpi.gpio
pip install rpi-lgpio
Aby urządzenie działało bezobsługowo, konieczne było dodanie skryptu do autostartu. Skorzystałem tutaj z pliku:
/etc/xdg/lxsession/LXDE-pi/autostart
Trzeba tam dodać linię z ścieżką do Pythona i głównego skryptu w projekcie, czyli np.:
@/usr/bin/python /home/pi/voice_mail_Pi/main.py
Inne formy dodania do autostartu, jak np. crontab, mają problem z poprawnym działaniem funkcji biblioteki pygame.
Żeby łatwo ściągnąć nagrania lub zmienić pliki powitalne, zainstalowałem serwer FTP na Raspberry Pi z pomocą poniższej komendy:
arecord -l
Po zainstalowaniu można się łączyć z Raspberry Pi np. za pomocą FileZilli.
Użytkownik i hasło są takie jak ustawiliśmy do Raspberry Pi.
Jeśli chodzi o zmiany, np. plik powitania, sygnał lub limit czasowy nagrania (na wypadek gdyby ktoś zapomniał odłożyć słuchawkę), są w pliku config.txt.
Nagrania audio trafiają do folderu records, a ich nazwy to po prostu kolejne timestampy, czyli data i godzina nagrania.
Jeśli macie jakieś pomysły na rozwinięcie projektu, problemy, lub po prostu odtworzyliście go i chcecie się pochwalić swoim efektem, piszcie 🙂