Skocz do zawartości

Programista3

Użytkownicy
  • Zawartość

    18
  • Rejestracja

  • Ostatnio

Reputacja

16 Dobra

O Programista3

  • Ranga
    2/10
  • Urodziny 08.10.2000

Informacje

  • Płeć
    Mężczyzna
  • Języki programowania
    Python, C++
  • Zainteresowania
    Programowanie, elektronika, sztuczna inteligencja
  • Zawód
    Programista

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Czy tylko ja nadal nie mogę wysłać zgłoszenia? "Wystąpił problem z wysłaniem twojej wiadomości. Spróbuj ponownie później."
  2. Programista3

    Gamepad na Arduino

    @Gieneq Widziałem ten poradnik ale nie lubię wykonywać czegoś ograniczając się do podążania za czyimiś poradnikami/kursami, wolę coś zrobić lub wymyślić sam a zrobienie czegoś w rodzaju biblioteki z tego poradnika jest jednak zbyt zaawansowane dla mnie. @marek1707 Nie gram i raczej nie będę grał na padzie więc w tym przypadku pewnie będzie podobnie. Wolę spędzać czas wolny na programowaniu/elektronice niż przy grach a gdy już gram wystarcza mi mysz i klawiatura. Czasem pewnie użyję pada ale raczej po to żeby się nim pobawić niż faktycznie sobie pograć. Projekt powstał raczej jako ciekawostka niż żeby faktycznie zastąpić gotowego pada. Sama kartonowa konstrukcja jest raczej wytrzymała i trzeba użyć dość dużej siły żeby wgnieść karton. Myślę, że dałoby się zrobić dużo ładniejszą, mniej kanciastą obudowę z kartonu jednak sama obudowa straciłaby na wytrzymałości i wymagałaby wtedy kilkukrotnie więcej pracy niż pozostałe części projektu. Podczas testowania aktualnej wersji zauważyłem że biblioteka pyautogui niestety nie radzi sobie z symulacją myszy w niektórych grach. Co do poprawek to na pewno spróbuję ulepszyć oprogramowanie, być może użyć innego języka niż Python i bardzo prawdopodobne że wymienię te aktualne przyciski .
  3. Programista3

    Gamepad na Arduino

    Tym razem przygotowałem projekt na Arduino. Jest to gamepad który posiada 2 joysticki, 8 przycisków oraz diodę informującą o zasilaniu. Całością steruje Arduino Pro Mini. Budowa Części użyte do budowy: Arduino Pro Mini 328 5V/16MHz Konwerter UART-USB PL2303TA 2x Joystick z przyciskiem 8x przycisk Tact Switch Płytka uniwersalna 30x70mm Czerwona dioda 3mm, rezystor 330Ω, listwa goldpin, przewody Obudowę wykonałem ze sztywnego kartonu. Wewnątrz znajduje się płytka z Arduino oraz 2 joysticki Na górnym panelu obudowy znajdują się przyciski oraz dioda które podłącza się za pomocą wtyków goldpin Po złożeniu wszystkiego w całość pad wygląda tak: Pada podłącza się do komputera za pomocą konwertera UART-USB, od góry znajduje się otwór na wyjściu uart z Arduino Schemat połączeń Oprogramowanie Po stronie Arduino w pętli sprawdzam stan przycisków i jeśli stan przycisku ulegnie zmianie wysyłam informację o zmianie stanu przycisku do komputera for(int i=0; i<10; i++) { // Dla każdego przycisku btn = digitalRead(btnPins[i]); // Odczyt stanu przycisku if(btn != state[i+8]) { // Jeśli stan przycisku różni się od tego który jest zapisany w zmiennej state[i+8] = btn; // Aktualizacja stanu przycisku w zmiennej text = btnPrefix+i+!btn; Serial.write(text.c_str()); // Wysyłanie informacji o zmianie stanu przycisku } } Podobnie działają joysticki, jeśli joystick jest wychylony w którąś stronę to informacja o skierowaniu go w tą stronę będzie wysyłana dopóki nie zmieni on pozycji. Po stronie komputera działa skrypt w Pythonie który odbiera sygnały z Arduino i symuluje klawiaturę oraz mysz. Na początku wczytywany jest plik konfiguracyjny (jeśli został podany) oraz nawiązywane jest połączenie z Arduino. ports = self.listSerialPorts() # Wyszukiwanie dostępnych portów if(len(ports) > 0): if(len(sys.argv) > 1): # Jeśli została podana ścieżka do pliku konfiguracyjnego if(os.path.isfile(sys.argv[1])): # i plik istnieje self.config.read(sys.argv[1]) # Jest otwierany self.readSettings() # Odczytywane są akcje przypisane przyciskom i joystickom if(len(ports) == 1): # Jeśli dostępny jest jeden port self.serial.port = ports[0] else: # Jeśli dostępnych jest więcej portów połączenie jest nawiązywane z tym podanym w pliku konfiguracyjnym lub z pierwszym dostępnym if(self.config.has_section('Config') and self.config.has_option('Config', 'DefaultPort') and self.config['Config']['DefaultPort'] in ports): self.serial.port = self.config['Config']['DefaultPort'] else: self.serial.port = ports[0] self.serial.open() # Otwieranie połączenia print("Połączono z portem ", self.serial.port) self.listen() # Nasłuchiwanie sygnałów z Arduino else: print("Nie wykryto żadnych portów!") Po odebraniu sygnału informacja jest analizowana i wykonywana jest akcja aktualnie przypisana do tego stanu przycisku/joysticka. if(event in pyautogui.KEYBOARD_KEYS): # Wciśnięcie określonego przycisku na klawiaturze pyautogui.keyDown(event) if(state == '1') else pyautogui.keyUp(event) elif(event == 'mouseUp' and state == '1'): # Poruszanie kursorem w określonym kierunku pyautogui.moveRel(None, -speed) ... elif(event == 'LMB'): # Wciśnięcie określonego przycisku myszy pyautogui.mouseDown() if state == '1' else pyautogui.mouseUp() ... elif(event == 'scrollDown' and state == '1'): # Przewijanie w góre/dół pyautogui.scroll(-25) elif(event == 'cursorspeed' and state == '1'): # Zmiana prędkości poruszania kursorem if(self.mouseSpeedSelected == len(self.mouseSpeed)-1): self.mouseSpeedSelected = 0 else: self.mouseSpeedSelected += 1 print("Ustawiono szybkość poruszania kursora na", self.mouseSpeed[self.mouseSpeedSelected]) elif(re.search(r'^(ctrl|alt|shift)\+([a-zA-Z])$', event)): # Proste skróty klawiszowe keys = re.search(r'^(ctrl|alt|shift)\+([a-zA-Z])$', event).groups() pyautogui.hotkey(keys[0], keys[1]) Akcje przypisane do konkretnych przycisków/stanów joysticków można ustawiać w pliku konfiguracyjnym, następnie wystarczy wskazać wybrany plik konfiguracyjny podczas uruchamiania skryptu pythona. Kompletny kod znajduje się w załączniku. Prezentacja działania ArduPad.rar
  4. Pokażę schemat połączeń, zdjęcia z budowy oraz kod w Arduino i Pythonie. Niestety tylko takie akurat miałem Jeśli granie miałoby być przyjemne to kupiłbym gotowy pad, ten ma działać i sprawiać przyjemność tym, że sam go zbudowałem i mogę go dowolnie modyfikować .
  5. Tworzę gamepada na Arduino. Składa się z dwóch joysticków, ośmiu przycisków i diody informującej o zasilaniu. Całość jest sterowana za pomocą Arduino, przewodowo podłączana do komputera. Gamepad ma kartonową obudowę , aczkolwiek nie jest ona tymczasowa, karton jest sztywny, a konstrukcja solidna. Górny panel nie jest jeszcze osadzony na stałe ponieważ cały czas pracuję nad projektem ale gdy go przymocuję pada naprawdę trudno będzie uszkodzić przy normalnym użytkowaniu. Czy ten projekt się nada mimo użytego kartonu?
  6. Programista3

    Zegar, radio internetowe oraz pogoda na Raspberry Pi

    Może mam złe wyobrażenie o prezentacji projektów, ale wydaje mi się, że publikuje się je również po to, żeby dowiedzieć się co myślą o nich inni, jak oni by to zrobili, czy mają jakieś pomysły na ulepszenia lub podobne projekty itp. a nie tylko po to, żeby stworzyć bibliotekę projektów, w której ludzie będą szukać inspiracji. Mam nadzieję, że potrafisz sam wymyślić wspaniały projekt w ładnym pozłacanym pudełku, bez wzorowania się na czyimś projekcie . Uznałem, że nie ma potrzeby częstej zmiany kontrastu i wystarczy, aby potencjometr był ukryty z tyłu. Ogólnie projekt miał być "zamontowany" na półce w meblach gdzie elektronika miała być ukryta za kartonowym panelem zawierającym wszystko potrzebne do używania urządzenia. Liczyło się dla mnie działanie (głównie zegar i szybki dostęp do wybranego radia internetowego), a nie wygląd. Zresztą tworząc projekt nie zakładałem, że będę go gdzieś publikował .
  7. Tym razem projekt nie zachwyca wyglądem ale jest ciekawszy pod względem oprogramowania. Projekt składa się z wyświetlacza segmentowego do wyświetlania godziny, klawiatury numerycznej 12-klawiszy do wprowadzania danych i wyświetlacza LCD 2x16 do wyświetlania wszelkich informacji. Całość podłączona jest do Raspberry Pi. Wykorzystane części Raspberry Pi 3 model B Wyświetlacz alfanumeryczny 2x16 znaków Klawiatura numeryczna 12-klawiszy Moduł 4x wyświetlacz 7-segmentowy Płytka stykowa, potencjometr obrotowy, przewody połączeniowe Dostępne funkcje Wyświetlacz segmentowy wskazuje aktualną godzinę. Kolejnymi funkcjami są odtwarzanie radia internetowego (np. ESKA, RMF FM) oraz prognoza pogody na 9 dni realizowana za pomocą API OpenWeatherMap. Z poziomu klawiatury można również wyświetlić aktualną temperaturę i użycie CPU, czas działania maliny, zrestartować/zamknąć system, zrestartować wifi oraz ustawić jasność wyświetlacza segmentowego. Podłączenie Wyświetlacz LCD podłączamy następująco: Pin 1 wyświetlacza do GND, pin 2 do 5V, pin 3 do środkowej nóżki potencjometru, pin 4 go GPIO25, pin 5 do GND, pin 6 do GPIO24, pin 11 do GPIO23, pin 12 do GPIO17, pin 13 do GPIO18, pin 14 do GPIO22, pin 15 do GPIO4, pin 16 do GND, lewą nóżkę potencjometru do 5V, prawą do GND. W wyświetlaczu alfanumerycznym podłączenie wygląda następująco: GND do GND, VCC do 5V, CLK do GPIO21, DIO do GPIO20 Klawiaturę podłączamy zaczynając od lewej strony kolejno do pinów: 27, 5, 6, 13, 26, 12, 19 (pierwsze 4 odpowiadają wierszom, kolejne 3 kolumnom na klawiaturze) Oprogramowanie Kompletny kod znajduje się w załączniku, tutaj opiszę tylko niektóre ciekawsze, bardziej przydatne funkcje. Do obsługi wyświetlacza segmentowego używam tej biblioteki. Inicjujemy zegar wskazując użyte piny oraz jasność: self.display = tm1637.TM1637(CLK=21, DIO=20, brightness=1.0) Do obsługi wyświetlacza LCD 2x16 używam biblioteki Adafruit CharLCD. Także tutaj podajemy piny użyte w połączeniu. Tworzę również 8 dodatkowych znaków których będzie można użyć w wyświetlaczu (ą, ć, ę, ł, ń, ó, ż, ź). Znaki te można wykorzystać zamieniając polskie znaki w tekście do wyświetlenia na odpowiednie dodatkowe znaki np ą = \x00, ć = \x01 itd. self.lcd = LCD.Adafruit_CharLCD(25, 24, 23, 17, 18, 22, 16, 2, 4) self.lcd.create_char(0, [0,0,14,1,15,17,15,2]) self.lcd.create_char(1, [2,4,14,16,16,17,14,0]) self.lcd.create_char(2, [0,0,14,17,31,16,14,2]) self.lcd.create_char(3, [12,4,6,12,4,4,14,0]) self.lcd.create_char(4, [2,4,22,25,17,17,17,0]) self.lcd.create_char(5, [2,4,14,17,17,17,14,0]) self.lcd.create_char(6, [2,4,14,16,14,1,30,0]) self.lcd.create_char(7, [4,0,31,2,4,8,31,0]) Aby używać klawiatury korzystam z modułu pad4pi KEYPAD = [ ["1","2","3"], ["4","5","6"], ["7","8","9"], ["*","0","#"] ] ROW_PINS = [27, 5, 6, 13] COL_PINS = [26, 12, 19] factory = rpi_gpio.KeypadFactory() self.keypad = factory.create_keypad(keypad=KEYPAD, row_pins=ROW_PINS, col_pins=COL_PINS) To wystarczy aby móc korzystać z podłączonych elementów. Funkcja gówna wygląda następująco: self.display.StartClock() # Uruchomienie zegara w tle self.readSettings() # Odczyt ustawień jasności z pliku self.keypad.registerKeyPressHandler(self.keyPress) # Obsługa zdarzenia naciśnięcia klawisza na klawiaturze while True: # Miganie dwukropkiem na zegarze co 1s self.display.ShowDoublepoint(True) sleep(1) self.display.ShowDoublepoint(False) sleep(1) Wszelkie funkcje urządzenia realizowane są w metodzie keyPress wykonującej się po wciśnięciu klawisza na klawiaturze. Po wciśnięciu dowolnego klawisza, jeśli podświetlenie wyświetlacza jest wyłączone to zostaje włączone i wyświetlony zostaje ekran główny - pierwsza linia to data, w drugiej wyświetlane są informacje o braku internetu lub aktualnie odtwarzanej stacji radia. Podświetlenie wyświetlacza jest automatycznie wyłączane po 20s bezczynności co realizowane jest kodem na początku metody keyPress: if(self.timerActive == True): # Zatrzymanie odliczania jeślie trwa self.timer.cancel() else: self.timerActive = True self.timer = threading.Timer(20.0, self.clear) # Po zakończeniu odliczania zostanie wykonana metoda która wyczyści i wyłączy wyświetlacz self.timer.start() # Rozpoczęcie odliczania od nowa Z poziomu ekranu głównego można przejść do menu(#) lub opcji(*). W menu dostępne opcje to radio(1) oraz pogoda(2). Stream radia odtwarzany jest za pomocą modułu python-vlc. Odtwarzanie radia z adresu url za pomocą vlc może wyglądać tak: self.Instance = vlc.Instance() self.player = self.Instance.media_player_new() # Utworzenie nowego odtwarzacza self.rmffm = self.Instance.media_new("http://195.150.20.9:8000/rmf_fm") # Dodanie źródła # Następnie w w miejscu w kodzie gdzie chcemy uruchomić radio wystarczy wybrać źródło i rozpocząć odtwarzanie self.player.set_media(self.rmffm) self.player.play() Niestety w niektórych stacjach adres streamu nie jest stały i konkretny adres url działa tylko przez kilka godzin np. radio ESKA. W takich sytuacjach pomóc może napisanie skryptu który automatycznie pobierze aktualny adres url. Ponieważ często słucham radia ESKA napisałem taki skrypt dla tego radia (plik znajduje się w załączniku). W tym przypadku skrypt jest napisany w PHP i umieszczony na darmowym hostingu ale równie dobrze mógłby być napisany w Pythonie jako część tego programu. Aby pobrać aktualny adres streamu za pomocą swojego skryptu używam kodu: self.eska_rzeszow = self.Instance.media_new(urllib2.urlopen("http://programista3.000webhostapp.com/inne/pi/radioapi.php?id=0").read()) Kolejną funkcją dostępna z poziomu menu jest pogoda. Po wejściu w ten tryb wyświetlana jest aktualna pogoda a za pomocą klawiszy 1-9 można wyświetlać prognozę na kolejne dni. Wyświetlana jest temperatura, ciśnienie, wilgotność oraz słowny opis pogody. Naciskając * można wyświetlić szczegóły dla danego dnia. W widoku szczegółowym wyświetlane są temperatura minimalna i maksymalna, ciśnienie, wilgotność, zachmurzenie oraz prędkość wiatru. Prognoza pogody pobierana jest za pomocą darmowego API OpenWeatherMap. Do pobrania prognozy wykorzystuję kod: self.forecast = self.getUrl("http://api.openweathermap.org/data/2.5/forecast/daily?q=rzeszow&mode=json&units=metric&lang=pl&cnt=10&appid=xxx") self.forecast = json.loads(self.forecast) if self.forecast else False Wyświetlanie podstawowych informacji o pogodzie wygląda następująco: description = (self.forecast['list'][int(key)]['weather'][0]['description'].encode('utf-8').capitalize()) self.writelcd(str(int(self.forecast['list'][int(key)]['temp']['day']))+chr(223)+"C "+str(int(self.forecast['list'][int(key)]['pressure']))+"hPa "+str(self.forecast['list'][int(key)]['humidity'])+"%\n"+description) W opcjach urządzenia znajdują się natomiast funkcje takie jak restart wifi, restart systemu i wyłączenie systemu które są realizowane za pomocą funkcji call z biblioteki subprocess, ustawienia jasności wyświetlacza segmentowego, czas działania, temperatura CPU oraz użycie CPU. Czas działania pobierany jest za pomocą biblioteki psutil: def uptime(self): time_sec = time.time()-psutil.boot_time() if(time_sec > 172800): return str(round(time_sec/86400))+" dni" elif(time_sec > 3600): return str(round(time_sec/3600))+" h" elif(time_sec > 60): return str(round(time_sec/60))+" min" else: return str(time_sec)+" s" Użycie CPU to również biblioteka psutil: self.writelcd(" Użycie CPU\n "+str(psutil.cpu_percent())+"%") Natomiast temperaturę CPU można odczytać z pliku: file = open("/sys/class/thermal/thermal_zone0/temp") temp = file.read() file.close() self.writelcd("Temperatura CPU\n "+temp[:2]+chr(223)+"C") Jestem otwarty na pomysły jak mógłby wyglądać projekt i jakie funkcje można do niego dodać. Kompletny kod znajduje się w załączniku. rpiha.rar
  8. Chciałbym przedstawić swój kolejny projekt. Jest nim 4-kołowy robot oparty na Raspberry Pi. Robot posiada kamerę i ultradźwiękowy czujnik odległości oraz jest zasilany z powerbanka. Jako wygodną metodę sterowania robotem wybrałem sterowanie przez przeglądarkę www. Raspberry Pi łączy się z wifi i każde urządzenie w tej sieci może sterować robotem. Konstrukcja Podstawowe części z których składa się robot to: Raspberry Pi 3 model B 4-kołowe podwozie robota Kamera ArduCam dla Raspberry Pi Ultradźwiękowy czujnik odległości HC-SR04 Power Bank ADATA 12500mAh sterowniki silników L293D Raspberry Pi oraz powerbank umieszczone są na zrobionych własnoręcznie kartonowych podstawkach przykręconych do podwozia. Kamera również umieszczona jest na kartonowej konstrukcji. Robot zasilany jest z dwóch gniazd USB (jedno dla Raspberry Pi, drugie dla pozostałej elektroniki). Powerbank 12500mAh jest w stanie zapewnić kilka godzin pracy robota na jednym ładowaniu. Kamera oraz czujnik odległości umieszczony jest na przodzie robota. Sterowanie przez przeglądarkę www Sterowanie robotem odbywa się poprzez Node.js. Obraz z kamery streamowany jest za pomocą modułu raspivid-stream z wykorzystaniem WebSocketów na porcie 3000. Pozostała komunikacja odbywa się za pomocą socket.io na porcie 80. Serwer kontroluje klientów w taki sposób, że w danym momencie tylko jeden z nich może sterować robotem (według kolejności połączenia z serwerem). Pozostali klienci mogą tylko oglądać obraz transmitowany z kamery. Do sterowania wykorzystywana jest klawiatura (WSAD lub strzałki). Serwer przesyła do klientów również informację o odległości z czujnika ultradźwiękowego co sekundę. Widok z poziomu operatora: Widok z poziomu widza: Kod jest dość prosty. Po stronie serwera jest to podstawowe wykorzystanie modułu raspivid-stream i odczytu z czujnika odległości za pomocą modułu pigpio oraz trochę bardziej skomplikowane użycie socket.io do komunikacji i rpi-gpio do odpowiedniego sterowania silnikami. Po stronie klienta jest to głównie komunikacja za pomocą socket.io oraz obsługa zdarzeń klawiatury. Pliku projektu znajdują się w załączniku. Prezentacja wideo RaspberryPi_robot.rar
  9. Programista3

    Gwiazda LED

    Sześciany LED są na tyle popularne że ich budowa jest bardzo łatwa (ogromna ilość poradników pokazujących krok po kroku co zrobić) i przez to nudna . Ponieważ wolę wymyślić coś samemu niż zbudować to co pojawiało się już wielokrotnie postanowiłem wykorzystać diody w inny sposób. Wpadłem na pomysł żeby było to coś związanego ze świętami i zdecydowałem się na gwiazdę . Tak wygląda efekt końcowy: Prezentacja wideo Budowa Gwiazda składa się z 40 diod połączonych katodami tak, że tworzą kształt gwiazdy. Konstrukcja umieszczona jest na kartonowym szablonie. Do sterowania diodami użyłem 5 połączonych rejestrów przesuwnych 74HC595. Każdej diodzie odpowiada również jeden rezystor 1kΩ. Układ zlutowałem na płytce uniwersalnej. Gwiazda jest podłączona do układu za pomocą przewodów połączeniowych żeńsko-męskich. Nie wygląda to zbyt ładnie ale konstrukcję można szybko zdemontować a układu użyć do sterowania innymi rzeczami. W płytkę można również wpiąć 4 tranzystory i sterować 4 warstwami np. sześcianu led. Obwód prezentuje się następująco: Całością steruje Cytron Maker Uno. Podłączenie połączonych rejestrów przesuwnych Rejestry łączymy w następujący sposób: VCC i MR (10 pin rejestru) do 5V GND i OE (13 pin rejestru) do GND DS (14 pin rejestru) pierwszego rejestru do 11 pinu Cytrona ST_CP (12 pin rejestru) wszystkich rejestrów do 10 pinu Cytrona SH_CP (11 pin rejestru) wszystkich rejestrów do 12 pinu Cytrona Q7" do pinu DS kolejnego rejestru Q0 - Q7 do kolejnych diod Oprogramowanie Gwiazdą steruję wysyłając 5 bajtów (1 bajt dla każdego rejestru). Kolejne bity w przesłanym bajcie odpowiadają stanowi kolejnych wyjść rejestru. Trzeba pamiętać, że bajty są przekazywane między rejestrami w taki sposób, że pierwszy bajt trafia do ostatniego rejestru, drugi do przedostatniego itd. Deklaracja pinów które będą użyte do komunikacji z rejestrami: int latchPin = 10; int clockPin = 12; int dataPin = 11; Do ustawiania stanu diod używam dwóch funkcji. Funkcja writeBytes wysyła po kolei otrzymane bajty. Bajty przekazujemy do funkcji jako tablicę liczb (wartość bajtu zapisana dziesiętnie) np. jeśli przekażemy do funkcji 5 wartości 255 wszystkie 40 diod zacznie się świecić ponieważ każdy rejestr otrzyma wartość 11111111. void writeBytes(int bytes[], int numberOfBytes) { digitalWrite(latchPin, LOW); for(int i=0; i<numberOfBytes; i++) { registerState[i] = bytes[i]; shiftOut(dataPin, clockPin, MSBFIRST, bytes[i]); } digitalWrite(latchPin, HIGH); } Funkcja writePin jest prostsza w użyciu, wystarczy podać numer diody (w tym przypadku od 0 do 39) i stan diody (LOW/HIGH). Funkcja odpowiednio zaktualizuje wartości i je wyśle włączając lub wyłączając diodę o podanym numerze. void writePin(int pin, bool state){ int reg = pin / 8; int actualPin = pin - (8 * reg); digitalWrite(latchPin, LOW); for (int i=numOfRegisters; i>=0; i--) { if (i == reg){ bitWrite(registerState[i], actualPin, state); } shiftOut(dataPin, clockPin, MSBFIRST, registerState[i]); } digitalWrite(latchPin, HIGH); } Z użyciem powyższych funkcji można już pisać różne efekty. Dla przykładu funkcja wypełniająca gwiazdę losowo wyglądają następująco: void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void effectJ(int d) { clear(); int state[8*numOfRegisters]; for(int i=0; i<8*numOfRegisters; i++) { state[i] = i; } int r; for(int i=8*numOfRegisters-1; i>0; i--) { r = random(0, i); swap(&state[i], &state[r]); } for(int i=0; i<8*numOfRegisters; i++) { writePin(state[i], HIGH); delay(d); } } Kompletny kod znajduje się w załączniku. Shift_Registers.rar
  10. Witam. Zamierzam kupić tego drona i mam pytanie odnośnie akumulatora. Dołączone do zestawu akumulatory to li-pol 3,7 V 650 mAh. Czy można by dokupić oprócz tych dołączonych jakiś inny o większej pojemności np. taki ? Czy to będzie działać prawidłowo, nie uszkodzę czegoś?
  11. Programista3

    Rozpoznawanie mowy oraz odtwarzanie nagrań z microSD

    marek1707 Dziękuję za kolejne cenne rady. Co do tej rozmowy z urządzeniem chodziło mi zastosowanie tego systemu rozpoznawania mowy i odtwarzania nagrań w rozmowie telefonicznej a nie o dosłowną rozmowę z komputerem przy czym to był przykład moich fantazji nie koniecznie związanych z tym co będę chciał kiedyś zbudować. Synteza mowy jest akurat tematem w który nie mam zamiaru się zagłębiać a przynajmniej nie w najbliższych latach. Po prostu widząc obecny postęp w tej dziedzinie (jak wielka różnica jest między głosem ludzkim a tym z syntezatora) uważam że przy poświęceniu na to mnóstwa czasu i pracy (jakieś kilka lat) osiągnąłbym nie zadowalające mnie wyniki dlatego chcę użyć nagrań co na razie w zupełności wystarczy. To kolejny problem, cały temat jest tak skomplikowany że nie sposób ogarnąć go od początku do końca w ciągu całego życia. Również dla tego nie chcę wnikać np. w syntezę mowy, nie mogę zajmować się wszystkim zagadnieniami, a chcąc i tak powiedzmy pracować nad paroma z tych zagadnień nie mogę zagłębiać się w każde z nich za bardzo. Mam 16 lat i patrząc po wieku może się wydawać że pewnie wymyśliłem sobie że zbuduję coś chociaż nie mam pojęcia jak to zrobić, sam projekt za chwilę rzucę w kąt bo coś mi nie wyjdzie a decyzję o tym co chcę robić/kim być wkrótce jeszcze zmienię, ale tak nie jest. Od dawna wiem co chcę robić i co mnie interesuje, potrafię się uprzeć i skończyć to co zacząłem praktycznie bez względu na cenę, zwłaszcza jeśli to dotyczy moich zainteresować i planów na przyszłość. Może źle sformułowałem w temacie czego oczekuję, nie szukam najlepszego rozwiązania, wskazania drogi na lata. Poszukuję czegoś na początek, jakiegoś zestawu na którym mógłbym eksperymentować, uczyć się. Nie potrafię przez rok czytać grubej książki z teorią np. czego używa się do rozpoznawania mowy, jakich algorytmów, sposobów itp. a po skończeniu przerabiania teorii i tak będę mało z niej pamiętał albo nie będę potrafił zastosować zdobytej wiedzy. Chcę praktyki, mogę pomagać sobie książką ale potrzebuję gotowej biblioteki gdzie mogę przeanalizować kod, zmodyfikować go, zobaczyć działanie, analiza całej biblioteki może mi zająć rok albo więcej ale w praktyce a nie tylko w teorii. Może szukam czegoś za bardzo skomplikowanego jak na początek ale chcę spróbować, nie uda się to spróbuję czegoś łatwiejszego, części i tak się prawdopodobnie kiedyś przydadzą.
  12. Programista3

    Rozpoznawanie mowy oraz odtwarzanie nagrań z microSD

    marek1707 Nie chodzi mi o gotowy produkt i nie mam nic przeciwko wnikaniu w temat (no może do pewnego stopnia). Ciekawią mnie tematy związane ze sztuczną inteligencją m.in. rozpoznawaniem mowy. Dobrze wiem że są to bardzo skomplikowane tematy. Jeśli chodzi o elektronikę to chodzi mi o to żeby móc wybrać części i poskładać samemu (nie gotowy produkt ale też nie budować wszystkiego od zera) a co do informatyki (programowanie tego itp.) to najlepiej żebym mógł zobaczyć oraz modyfikować kod biblioteki/algorytmu rozpoznawania mowy. Programowanie np. komend nie stanowi dla mnie problemu, język programowania jest mi obojętny, nauczenie nowego nie jest dla mnie żadną trudnością. Pisząc "Co lepszego poleciłbyś do tego celu?" chodziło mi raczej o coś lepszego od Arduino a nie o moduły do niego ale te linki może również się przydadzą. Co do Raspberry Pi to przeleciało mi to przez myśl chociaż bardzo mało o tym wiem. Mógłbyś rozwinąć ten temat? Co urządzenie ma jeszcze robić to sam nie wiem. Aktualnie przechodzą mi przez myśli funkcje gdzie nawet nie zastanawiam się czy są one w ogóle możliwe do wykonania. Na razie nie zbudowałem nawet pierwotnej wersji rozpoznającej mowę i odtwarzającej nagrania więc nie ma mowy o jakimkolwiek rozwoju projektu. Wszystko zależy od czasu i pieniędzy jakie będę mógł przeznaczyć na ten cel. Z takich szalonych funkcji które gdzieś, kiedyś przemknęły mi przez myśli to np. obsługa karty sim (zamiast mikrofonu i głośnika to rozmowa człowiek(telefon) - urządzenie), robienie zdjęcia po wykrycie ruchu osoby w danym miejscu i próba identyfikacji z pomocą bazy danych (kolejny temat związany ze sztuczną inteligencją - rozpoznawanie twarzy )
  13. Programista3

    Rozpoznawanie mowy oraz odtwarzanie nagrań z microSD

    Dzięki. Nie zamierzam porzucać projektu, zwłaszcza że mam ciekawe pomysły na jego rozwinięcie. Arduino wybrałem na początek ponieważ nie mam zbyt dużego doświadczenia z elektroniką. W przyszłości zamierzam przenieść to na coś lepszego. Na początek nie chciałem brać czegoś bardzo zaawansowanego i drogiego gdzie być może nie potrafiłbym złożyć wszystkiego w całość jeśli w ogóle mógłbym sobie pozwolić na kupno wszystkich części. Co lepszego poleciłbyś do tego celu? Może bym spróbował ogarnąć coś lepszego.
  14. Witam. O dłuższego czasu chodzi mi po głowie zrobienie urządzenia które miało by rozpoznawać komendy głosowe i w zależności od rozpoznanej komendy odtworzyć odpowiednie nagranie z karty SD/microSD (później mógłbym rozwinąć projekt o różne inne funkcje). Od niedawna interesuję się elektroniką. Myślałem żeby spróbować zrobić to na Arduino. Co do rozpoznawania mowy to znalazłem to. Komendy miałyby być w języku Polskim lub Angielskim (wolałbym Polski ale nie ma to dla mnie większego znaczenia). Wstępnie znalazłem podzespoły i postanowiłem zapytać Was czy to ma prawo się udać i te czy inne części wybrać . Oto co wybrałem: Arduino Uno Rev3 , Mikrofon elektretowy z wzmacniaczem , DFPlayer (odtwarzanie nagrań), Głośnik + zasilacz do Arduino, kable itp. Programowanie nie stanowi dla mnie problemu, siedzę w tym ponad 3 lata . Co o tym sądzicie?
×