Z pomocą Arduino budujemy mikrofon podsłuchowy W tym opracowaniu skonstruujemy bardzo użyteczne urządzenie dla wszystkich ciekawskich i wścibskich ludzi: mikrofon podsłuchowy z opcją nagrywania. Projekt będzie oparty na Arduino z prostym wzmacniaczem mikrofonowym i kartą pamięci SD. Oto kroki, które zamierzamy wykonać w celu zbudowania tego projektu:! zobaczymy, jak skonfigurować projekt, aby upewnić się, że będzie w nim opcja nagrywania przez określony czas, który może być ustawiany przez użytkownika! następnie nagrany plik audio zostanie zapisany na karcie pamięci SD i będzie dostępny na dowolnym komputerze! przedtem przetestujemy indywidualnie wszystkie elementy projektu. Wymagania sprzętowe i programowe Najpierw sprawdźmy, jakie są wymagane elementy tego projektu. Jak zwykle użyjemy modułu Arduino Uno jako mózgu projektu. Potem potrzebny jest mikrofon. W projekcie użyliśmy prostego mikrofonu elektretowego, który posiada wzmacniacz na płycie, jak pokazano na rysunku 1: Najważniejsze jest, żeby sygnał foniczny mikrofonu był wzmacniany. Na przykład ten wybrany do projektu wzmacnia sygnał audio 100 razy, co umożliwia Arduino Uno rejestrowanie dźwięku na zwykłych poziomach (takich jak głosy). Następnie potrzebna jest karta pamięci microsd z adapterem rys. 2: Rys. 2. Karta pamięci microsd z adapterem Potrzebny będzie również sposób zapisu danych na karcie SD. Jest wiele sposobów na to, aby zrobić to z Arduino. Najprostszym rozwiązaniem, które wybraliśmy, jest użycie nakładki (shield). Mieliśmy nakładkę Ethernet Shield, która jest świetna, ponieważ posiada wbudowany czytnik kart microsd. Oczywiście można użyć dowolnej nakładki z czytnikiem kart microsd lub nawet oddzielnego czytnika kart microsd. Potrzebna będzie również płytka montażowa i przewody (łączówki), aby wykonać wymagane połączenia. Rys. 1. Mikrofon elektretowy ze wzmacniaczem Po stronie oprogramowania potrzebna jest specjalna wersja biblioteki karty SD o nazwie SdFat. Nie możemy używać zwykłej biblioteki SD Arduino, ponieważ będziemy wykonywać naprawdę szybkie operacje zapisu na karcie SD, których nie można obsłużyć przez bibliotekę SD dołączoną do oprogramowania Arduino. Bibliotekę można pobrać ze strony https:// github.com/greiman/sdfat. 1
Z pomocą Arduino budujemy mikrofon podsłuchowy Używanie karty SD Pierwszą czynnością, którą wykonamy w tym projekcie jest sprawdzenie, czy możemy rzeczywiście uzyskać dostęp do karty pamięci SD. Dzięki temu będziemy mieli pewność, że w dalszej części projektu nie wystąpią problemy związane z kartami SD. Na fotografii poniżej (rys. 3) pokazano nakładkę Ethernet Shield, którą zastosowaliśmy, z adapterem karty microsd zamontowanym z prawej strony: Zobaczmy teraz kod, który będzie używany do testowania funkcjonowania karty SD. Poniżej znajduje się pełny kod dla tej operacji: Rys. 3. Nakładka Ethernet Shield z adapterem karty microsd // Include the SD library #include <SPI.h> #include <SD.h> // Set up variables using the SD utility library functions: Sd2Card card; SdVolume volume; SdFile root; // change this to match your SD shield or module; // Arduino Ethernet shield: pin 4 // Adafruit SD shields and modules: pin 10 // Sparkfun SD shield: pin 8 2
const int chipselect = 4; Z pomocą Arduino budujemy mikrofon podsłuchowy void setup() { // Open serial communications and wait for port to open: Serial.begin(115200); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only Serial.print( \ninitializing SD card... ); // we ll use the initialization code from the utility libraries // since we re just testing if the card is working! if (!card.init(spi_half_speed, chipselect)) { Serial.println( initialization failed. Things to check: ); Serial.println( * is a card inserted? ); Serial.println( * is your wiring correct? ); Serial.println( * did you change the chipselect pin to match your shield or module? ); return; else { Serial.println( Wiring is correct and a card is present. ); // print the type of card Serial.print( \ncard type: ); switch (card.type()) { case SD_CARD_TYPE_SD1: Serial.println( SD1 ); break; case SD_CARD_TYPE_SD2: Serial.println( SD2 ); break; case SD_CARD_TYPE_SDHC: Serial.println( SDHC ); break; default: Serial.println( Unknown ); // Now we will try to open the volume / partition - it should be FAT16 or FAT32 if (!volume.init(card)) { Serial.println( Could not find FAT16/FAT32 partition.\nmake sure you ve formatted the card ); return; 3
Z pomocą Arduino budujemy mikrofon podsłuchowy // print the type and size of the first FAT-type volume uint32_t volumesize; Serial.print( \nvolume type is FAT ); Serial.println(volume.fatType(), DEC); Serial.println(); volumesize = volume.blockspercluster(); // clusters are collections of blocks volumesize *= volume.clustercount(); // we ll have a lot of clusters volumesize *= 512; // SD card blocks are always 512 bytes Serial.print( Volume size (bytes): ); Serial.println(volumesize); Serial.print( Volume size (Kbytes): ); volumesize /= 1024; Serial.println(volumesize); Serial.print( Volume size (Mbytes): ); volumesize /= 1024; Serial.println(volumesize); Serial.println( \nfiles found on the card (name, date and size in bytes): ); root.openroot(volume); // list all files in the card with date and size root.ls(ls_r LS_DATE LS_SIZE); void loop(void) { Ten kod sprawdza wiele elementów na karcie SD, takich jak na przykład format plików i dostępna przestrzeń, a także tworzy listę wszystkich plików znajdujących się na karcie SD. Jednak tym, czym tak naprawdę jesteśmy zainteresowani, jest upewnienie się, że karta SD może być czytana przez Arduino. Odbywa się to za pomocą następującego fragmentu kodu: if (!card.init(spi_half_speed, chipselect)) { Serial.println( initialization failed. Things to check: ); Serial.println( * is a card inserted? ); Serial.println( * is your wiring correct? ); Serial.println( * did you change the chipselect pin to match your shield or module? ); return; else { Serial.println( Wiring is correct and a card is present. ); 4
Z pomocą Arduino budujemy mikrofon podsłuchowy Przetestujmy teraz kod. Można po prostu skopiować ten kod i wkleić go do oprogramowania IDE Arduino. Następnie należy przesłać go do płyty Arduino Uno i otworzyć monitor szeregowy. Upewnić się, że prędkość szeregowa wynosi 115200 b/s. To co powinniśmy zobaczyć pokazano na rysunku 4. Jeśli widzisz to co na rysunku 4, to gratulacje karta SD i czytnik kart są prawidłowo skonfigurowane i gotowe do obsługi nagrań dźwiękowych! Rys. 4 Testowanie mikrofonu Teraz musimy upewnić się, że mikrofon działa prawidłowo, a zwłaszcza sprawdzić, czy na przykład można nagrywać poziomy głosu. W trakcie testowania przez nas prototypu tego projektu, wystąpił problem z mikrofonem, który polegał na braku wzmocnienia sygnału audio po prostu niczego nie było słychać w nagraniu. Pierwszym krokiem jest podłączenie mikrofonu do płyty Arduino. Do podłączenia mikrofonu są 3 kontakty: VCC, GND i AUD. Pin VCC Rys. 5. Schemat przyłączenia mikrofonu do płytki Arduino 5
Z pomocą Arduino budujemy mikrofon podsłuchowy należy podłączyć do pinu 5V modułu Arduino, GND do pinu Arduino GND, a AUD do analogowego pinu Arduino A5. Na poprzedniej stronie na rysunku 5 przedstawiono schemat, który może pomóc w przypadku problemów. Na rysunku 6 pokazano końcowy rezultat po przyłączeniu mikrofonu. Teraz użyjemy bardzo prostego szkicu, aby odczytać sygnał z mikrofonu i wydrukować go na monitorze szeregowym: Rys. 6. Widok naszego projektu po przyłączeniu mikrofonu // Microphone test void setup() { // Start Serial Serial.begin(115200); void loop() { // Read the input on analog pin 5: int sensorvalue = analogread(a5); // Print out the value you read: Serial.println(sensorValue); delay(1); // delay in between reads for stability 6
Z pomocą Arduino budujemy mikrofon podsłuchowy Rys. 7. Wydruk szkicu naszego projektu na ekranie monitora szeregowego Ten szkic, w zasadzie, ciągle odczytuje dane z pinu A5, do którego jest podłączony mikrofon i drukuje je na monitorze szeregowym. Teraz skopiujmy i wklejmy ten szkic do środowiska programistycznego Arduino IDE i prześlijmy go płyty Arduino. Należy także otworzyć monitor szeregowy. Powyżej, na rysunku 7 przedstawiono wynik monitora szeregowego: łami. Wystarczy teraz ponownie podłączyć kartę SD do czytnika. Dodaliśmy również diodę LED na pinie 7, aby wiedzieć, kiedy nagrywanie jest włączone. Jeśli chcemy to również zrobić, wystarczy dioda LED i rezystor 330Ω. Oczywiście, tę diodę LED powinniśmy usunąć, jeśli rzeczywiście chcemy używać naszą konstrukcję jako urządzenie podsłuchowe lub szpiegowskie, aby nasz projekt nie rzucał się w oczy. Patrząc na ekran monitora szeregowego, skierujmy kilka słów do mikrofonu. Powinniśmy natychmiast zauważyć pewne odchylenia sygnału, które jest czytane przez płytę. Oznacza to, że głos jest nagrywany przez mikrofon, a amplituda jest wystarczająca, aby mikrofon nagrał poziom normalny głosu. Konstruowanie mikrofonu podsłuchowego Teraz przechodzimy do skonstruowania naszego mikrofonu podsłuchowego. Sprzęt dla projektu jest prawie gotowy, jeśli postępowaliśmy zgodnie z poprzednimi rozdzia- Na rysunku 8 pokazano schemat, który może być pomocny przy podłączaniu diody LED i rezystora Na rysunku 9 pokazano ostateczny widok naszego projektu po przyłączeniu diody LED. Teraz zobaczymy szczegóły kodu dla naszego projektu. Zasadniczo chcemy, aby urządzenie nagrywało dźwięk z mikrofonu przez pewien czas, a następnie zatrzymało nagrywanie. Ponieważ kod jest długi i złożony, zobaczymy tylko najważniejsze części. 7
Z pomocą Arduino budujemy mikrofon podsłuchowy Rys. 8. Schemat przyłączenia diody LED jako wskaźnika nagrywania Rys. 9. Obraz kompletnego projektu mikrofonu podsłuchowego 8
Z pomocą Arduino budujemy mikrofon podsłuchowy Pierwszym krokiem jest włączenie biblioteki SdFat: #include <SdFat.h> Następnie tworzymy instancje, które są konieczne do zapisu na karcie SD: SdFat sd; SdFile rec; Następnie określimy, do którego pinu chcemy podłączyć opcjonalną diodę LED sygnalizującą nagrywanie: const int ledstart = 7; Będziemy również definiować zmienną dla wewnętrznego licznika projektu: byte recordingended = false; unsigned int counter; unsigned int initial_count; unsigned int maxcount = 10 * 1000; // 10 Seconds Należy zauważyć, że w tym miejscu należy zmodyfikować zmienną maxcount w zależności od czasu, w którym urządzenie ma nagrywać. Tutaj, jako test, domyślnie użyto 10 sekund. Następnie zainicjujemy ADC (przetwornik analogowo-cyfrowy): Setup_timer2(); Setup_ADC(); Po tym, zainicjujemy kartę SD, a także włączymy diodę LED, jeśli się powiedzie: if (sd.begin(chipselect, SPI_FULL_SPEED)) { for (int dloop = 0; dloop < 4; dloop++) { digitalwrite(ledstart,!digitalread(ledstart)); delay(100); Wtedy rozpoczniemy nagrywanie z następującą funkcją: StartRec(); Będziemy również inicjować licznik w następującej linii kodu: initial_count = millis(); Następnie, w funkcji loop () szkicu, zaktualizujemy licznik, który pomaga śledzić upływający czas: counter = millis() - initial_count; Pozostając w funkcji pętli loop() faktycznie nastąpi zatrzymanie nagrywania, jeśli zostanie osiągnięty maksymalny czas, który zdefiniowaliśmy wcześniej: if (counter > maxcount &&!recordingended) { recordingended = true; StopRec(); Nagrywanie na karcie SD Na zakończenie przetestujemy nasz projekt i nagramy kilka sygnałów dźwiękowych. Najpierw należy skopiować cały kod i wkleić go do środowiska programistycznego Arduino IDE. Po skompilowaniu należy przesłać go do Arduino. Warto zauważyć, że jak tylko to zrobimy, nasz projekt rozpocznie nagrywanie dźwięku. W przypadku podłączenia opcjonalnej diody LED do pinu 7, dioda LED powinna być również włączona podczas fazy nagrywania. Można teraz trochę mówić lub wytwarzać efekty dźwiękowe albo odtwarzać jakiś utwór, aby upewnić się, że mikrofon nagrywa rzeczywiste dźwięki. Następnie, po upływie określonego czasu ustawionego w kodzie, zatrzymać działanie projektu, poprzez odłączenie zasilania. Następnie wyjąć kartę SD i włożyć ją do komputera. Na komputerze należy wybrać kartę SD, aby zobaczyć, że jeden plik został nagrany: Teraz można po prostu otworzyć ten plik w ulubionym odtwarzaczu audio i odsłuchać tego, co właśnie zostało nagrane. 9
Z pomocą Arduino budujemy mikrofon podsłuchowy Rys. 10. Przebieg sygnału akustycznego zarejestrowanego mikrofonem podsłuchowym Autor tego projektu na przykład otworzył go bezpłatnym oprogramowaniem do edycji dźwięku, Audacity, aby zobaczyć, jak wygląda przebieg sygnału akustycznego rys. 10. Gratulacje, właśnie zbudowaliśmy własny mikrofon podsłuchowy! Teraz możesz eksperymentować z różnymi ustawieniami, na przykład używając dłuższego czasu nagrywania. Podsumowanie W tym opracowaniu dowiedzieliśmy się, jak zbudować mikrofon podsłuchowy bazując na prostym mikrofonie z przedwzmacniaczem, Arduino i karcie microsd. Mikrofon może być ustawiony do nagrywania dźwięku w sposób ciągły przez określony czas ustawiany przez użytkownika. Oczywiście jest wiele elementów, które można teraz zrobić, aby poprawić ten projekt. Możesz na przykład użyć baterii do zasilania pro- jektu, aby było autonomiczne. Następnie wystarczy umieścić go w pokoju, w którym chcemy nagrać rozmowę i po prostu wrócić później, aby pobrać kartę SD z nagraniem. Można również podłączyć czujnik ruchu do projektu i używać go do automatycznego rozpoczęcia nagrywania, gdy wykryty zostanie ruch w pomieszczeniu w celu rejestrowania rozmów z całkowitą dyskrecją. Innym ciekawym projektem byłoby wykorzystanie określonych poziomów dźwięku, które są wyczuwalne przez projekt, aby rzeczywiście rozpocząć lub zatrzymać nagrywanie. Na przykład można przepisać oprogramowanie projektu do ciągłego monitorowania mikrofonu i automatycznie rozpocząć nagrywanie po przekroczeniu danego progu, co wskazuje na to, że ktoś mówi. Następnie program mógłby automatycznie zatrzymać nagrywanie, gdy poziom dźwięku stanie się niski. 10