Popularny post Pawel_S Napisano Czerwiec 2, 2020 Popularny post Udostępnij Napisano Czerwiec 2, 2020 (edytowany) Hej! W tym artykule postaram się pokazać krok po kroku jak przygotować lampkę sterowaną mową, wykorzystując aplikację Wroob na smartfonie oraz Arduino. Czym jest projekt Wroob pisałem tutaj: Wroob - Czyli jak zaprogramować swój telefon Projekt może wymagać podstawowej wiedzy z języka Python i minimalnej znajomości systemu Wroob. Zachęcam do wcześniejszego zapoznania się z poprzednim artykułem. Można też skorzystać z kursów na naszym kanale YouTube - tłumaczymy tam jak zrealizować inne ciekawe projekty. Własny moduł na Arduino Najpierw zacznijmy od sprzętu, ja podłączyłem swoją płytkę Arduino UNO z modułem przekaźników, a do tego oprawkę żarówki podłączoną do gniazda sieciowego. Sposób podłączenia widoczny jest na obrazku poniżej. Pamiętajcie, aby zachować szczególną ostrożność pracując z napięciem sieciowym. Podobny efekt można otrzymać podłączając diodę LED do Arduino, nie wymaga to przekaźnika i jest znacznie bezpieczniejsze. W dalszej części artykułu nie będzie miało znaczenia, z której opcji korzystacie. Następnie musimy zmienić nasze Arduino w moduł systemu Wroob. Wykorzystamy do tego celu bibliotekę dostępną pod adresem https://github.com/wroob-io/arduino-wroobimp. Można ją też pobrać za pomocą managera bibliotek w Arduino IDE Biblioteka arduino-wroobimp posiada przykładowy program z którego będziemy korzystać: WroobImpGpio.ino. Znajdziecie go w Arduino IDE -> File -> Examples -> WroobImp -> WroobImpGpio. W programie WroobImpGpio inicjalizujemy pin 13 jako wyjście, a 14 jako wyjście. Jak pamiętacie, naszą lampę mamy podłączoną do pinu 13. #define PIN_OUT 13 #define PIN_IN 14 // initialize used GPIOs pinMode(PIN_OUT, OUTPUT); pinMode(PIN_IN, INPUT); Następnie uruchamiany jest protokół systemu Wroob. We Wroob moduły rozmawiają za pomocą komend w formacie JSON. Reszta kodu związana jest przede wszystkim z obsługą protokołu komunikacyjnego. // initialize Wroob protocol wroob.begin(my_callback); Jeżeli ktoś jest zainteresowany jak przebiega komunikacja między modułami w systemie Wroob można użyć programu com_imp_sniffer.py aby “podsłuchać” komunikacje między modułami. Program można znaleźć w Panelu Użytkownika Wroob w katalogu examples\hardware_projects. Jak jesteście ciekawi, chętnie opiszę protokół w osobnym poście. Program WroobImpGpio realizuje dwie funkcje ustawia oraz odczytuje wartość pinów za pomocą komend “SetPin” oraz “GetPin”. Ustawia stan na pinie 13 gdy otrzyma komendę “SetPin” lub odczytuje stan z pinu 14 gdy otrzyma komendę “GetPin”. Na tym etapie możemy uruchomić aplikację w Wroob na telefonie i przejść do panelu użytkownika w którym będziemy wykonywać resztę pracy. Jeśli nie wiesz jak to zrobić obejrzyj film Szybki start z systemem Wroob. Po podłączeniu modułu do telefonu w zakładce “Moduły” Panelu Użytkownika Wroob pojawi się jego graficzny widget. Do dalszej pracy potrzebujemy nazwy modułu w systemie. Nazwa widoczna jest w górnej części widgetu, w moim przypadku to 'eam001'. Początkowa nazwa nadawana jest automatycznie, składa się z typu modułu oraz kolejnych liczb. Możecie również ustawić własną nazwę, nie powinna się ona jednak powtarzać w systemie. Obsługa modułu Arduino Na początku klasę utwórzmy naszego własnego modułu, pozwoli nam to z niego korzystać w wygodny sposób w naszych programach. Najprostszą klasę modułu możemy zdefiniować w sposób przedstawiony poniżej. Korzystamy tutaj z wcześniej przygotowanej uniwersalnej klasy Module i tworzymy jedną funkcję set_pin() do obsługi komendy “SetPin” from wroob.modules.module import Module class Eam(Module): def __init__(self, moduleName): super(Eam, self).__init__(moduleName) #set_pin wysyła komendę "set_pin" do naszego modułu def set_pin(self, value): params = {"value":value} self._send_cmd('SetPin', params) W przypadku programu WroobImpGpio wgranego na Arduino można też skorzystać z wcześniej przygotowanej klasy Eam. Znajdziecie ją w katalogu examples\hardware_projects\example_arduino_module. Program korzystający z naszej klasy wygląda następująco: from eam import Eam #import klasy Eam z pliku eam from time import sleep eam = Eam ("eam001") #stworzenie obiektu eam powiązanego z modułem o nazwie “eam001” while(True): sleep(1) eam.set_pin(1) #użycie metody set_pin() sleep(1) eam.set_pin(0) Do konstruktora klasy Eam przekazujemy nazwę naszego modułu 'eam001' tworząc jego obiekt. Dzięki temu w programie możemy korzystać w prosty sposób z funkcji naszego modułu przez odwołanie jego do obiektu. Program jest czytelny i łatwy do rozbudowania. Sterowanie mową Kolejny etap to już czysta przyjemność. Wykorzystamy moduł rozpoznawania mowy (SRM) aby sterować naszą lampą. Aby go uruchomić należy przejść do zakładki “Moduły” a następnie wybrać z listy “Moduły w Panelu Użytkownika”. Moduł SRM wymaga mikrofonu podłączonego do komputera. W kolejnym etapie możemy rozbudować program korzystający z naszego nowo utworzonego modułu na Arduino o funkcje modułu SRM from eam import Eam from wroob.modules.srm import Srm #import klasy modułu Srm from time import sleep eam = Eam("eam001") srm = Srm("srm001") def srm_callback(speech): #funkcja reagująca na rozpoznaną mowę print(speech) if "zapal światło" in speech: eam .set_pin(0) elif "zgaś światło" in speech: eam .set_pin(1) srm.start_speech_reporting(srm_callback) #rozpoczęcie rozpoznawania mowy while(True): sleep(60) Efekt prezentuje się następująco: Więcej na temat rozpoznawania mowy i możliwości modułu SRM można się dowiedzieć na naszym kursie video Chatbot. Jeżeli ktoś nie chce przechodzić całego procesu, gotowe programy można znaleźć w zaktualizowanej właśnie aplikacji w folderze examples\hardware_projects\example_arduino_module Bez wprowadzania zmian w kodzie Arduino wszystko od razu powinno działać 🙂 Edytowano Czerwiec 3, 2020 przez Pawel_S 5 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!