Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Sterowanie'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 17 wyników

  1. Na wstępie muszę wyjaśnić co kryje się za imieniem Demostenes. Demostenes to największy grecki mówca. W młodości posiadający wadę wymowy. Ćwiczył on dykcję chodząc po plaży i mówiąc z kamieniami w ustach. Co Demostenes ma wspólnego z elektroniką? Oczywiście mowę, a opis ten dotyczy rozpoznawania ludzkiej mowy za pomocą urządzeń elektronicznych. Dlatego swój projekt postanowiłem nazwać imieniem tego słynnego greckiego oratora i jego podobiznę umieścić na warstwie opisowej płytki drukowanej. Z zagadnieniem sterowania ludzkim głosem zetknąłem się na początku lat osiemdziesiątych ubiegłego wieku. Wówczas to w Młodym Techniku zostało opisane tego rodzaju sterowanie. Dziś patrząc z perspektywy czasu urządzenie zbudowane na dwóch układach scalonych audio i kilku tranzystorach nie miało prawa działać. Przynajmniej nie tak jak sobie to wyobrażamy. Działanie tego sterownika można porównać do działania iluminofonii. O ile w ogóle opisane urządzenie działało. Moduł SpeakUpTM Dziewięć lat temu przeglądając ofertę firmy TME znalazłem interesujący moduł do rozpoznawania mowy o oznaczeniu MIKROE-1534. Jego cena dziewięć lat temu wynosiła około 200 zł i nie trzeba było robić zakupów za granicą oraz ponosić kosztów celno skarbowych. Moduł MIKROE-1534 to produkt firmy MikroElektronika rozpowszechniany pod nazwą SpeakUpTM. Moduł ten to niewielka płytka drukowana o wymiarach 57x25 mm, którą możemy na poniższych fotografiach. Schemat elektryczny płytki umieszczony jest na ulotce dostarczonej wraz z tym modułem, jak również na stronie jego producenta w pliku PDF „user manual”. Moduł ten zbudowany jest w oparciu o 32 bitowy mikrokontroler z rdzeniem ARM Cortex-M4 STM32F415RG. Na płytce drukowanej modułu zostało wyprowadzone dwanaście programowalnych linii wejścia – wyjścia (I/O). Mogą być one wykorzystane do sterowania przekaźnikami. Do budowy tego modułu użyty został popularny kodek audio stereo VS1053 i mikrofon elektretowy o dobrych parametrach. Uzupełnieniem modułu są trzy diody LED sygnalizujące stan pracy oraz dwa mikroprzyciski. Dostępne jest też miniaturowe gniazdo USB typu B pozwalające na połączenie modułu z komputerem. Na płytce znajduje się również gniazdo mikrofonu typu Jack 3,5 mm pozwalające na podłączenie zewnętrznego mikrofonu. Umieszczone są również złącza JTAG, mikrobus oraz UART. Moduł ten można łatwo konfigurować za pomocą darmowego oprogramowania dostępnego na stronie producenta płytki. Płytka SpeakUpTM potrafi rozpoznać dwieście komend o czasie trwania do pięciu sekund, niezależnie od języka mowy w jakim są one wydawane. Cechuje się ona też dużą szybkością przetwarzania i może pracować on jako samodzielne urządzenie lub część większego systemu. O prostocie stosowania modułu SpeakUpTM stanowi zawarte w mikrokontrolerze oprogramowanie. Mianowicie rozpoznawanie komend głosowych zostało zrealizowane w oparciu o algorytm Dynamic Time Warping (DTW). Sygnał akustyczny po odebraniu przez mikrofon i przekształceniu na sygnał elektryczny jest wstępnie przekształcany przez kodek VS1053. Następnie sygnał ten jest interpretowany przez algorytm DTW zawarty w mikrokontrolerze. Po tym procesie mikrokontroler w zależności od wybranego trybu pracy może zmienić stan jednego w dwunastu wyjść. Jest to praca samodzielna modułu. Możliwe jest również przesłanie po poprawnym rozpoznaniu komendy słownej sygnału dalej za pomocą interfejsu USB lub UART. Aplikacja SpeakUpTM Do korzystania z modułu MIKROE-1534 potrzebna jest aplikacja SpeakUp widoczna na zrzucie ekranu poniżej. Aplikację tą możemy pobrać z tego linku w postaci archiwum 5,5 MB. Instalacja tej aplikacji nie odbiega od instalacji programów dla systemu Windows. Pomimo niepozornego wyglądu ma ona duże możliwości i pozwala ustalić zachowanie modułu SpeakUpTM po poprawnym rozpoznaniu wydanej komendy. Aplikacja ta jest w zasadzie niezbędna do konfiguracji modułu SpeakUpTM. Po jego podłączeniu do komputera system Windows 7 (projekt powstał dziewięć lat temu stąd Windows 7) bez problemu wykrył i zainstalował niezbędne sterowniki. Na tym etapie nie jest też wymagane zewnętrze zasilanie modułu SpeakUpTM. Po uruchomieniu aplikacji SpeakUpTM tworzymy nowy projekt ikonką pokazaną poniżej. Podobnie jak w aplikacjach systemu Windows podajemy nazwę i lokalizację naszego projektu i zatwierdzamy je przyciskiem Create. W następnej kolejności klikamy ikonkę START HERE widoczną na kolejnym zrzucie ekranu. Otworzy się okno nagrywania dźwięku widoczne na poniżej. Po kliknięciu przycisku RECORD rozpocznie się rejestrowanie za pośrednictwem mikrofonu wzorca polecenia. Pod przyciskiem RECORD pojawi się licznik upływającego czasu liczący od pięciu sekund do zera. Zarejestrowane polecenie zostanie od razu odtworzone za pośrednictwem karty muzycznej i głośników komputera. Odsłuch zarejestrowanego polecenia możliwy jest też przyciskiem PLAY. Jeśli zarejestrowane polecenie jest poprawne w polu Enter voice command name podajemy nazwę zarejestrowanego polecenia i zapisujemy je przyciskiem Save & Close. Analogicznie rejestrujemy kolejne polecenia. Po zarejestrowaniu potrzebnych nam poleceń pojawią się one w górnej części okna aplikacji SpeakUpTM w formie zakładek widocznych na poniższym rysunku. Klikając na zakładce z tymi poleceniami mamy możliwość przełączania się między nimi. Na końcu listy zakładek z prawej strony aplikacji SpeakUpTM znajduje się mały przycisk z trójkątem oferujący bezpośredni dostęp do zarejestrowanych poleceń. Pod zakładką z poleceniami dostępne są przyciski odtwarzania, edycji i usuwania zarejestrowanych poleceń. Poniżej tych przycisków znajduje się pole w którym mamy możliwość wprowadzenia opisu dla poszczególnych poleceń. Pod tym polem mamy listę dwunastu wyjść modułu SpeakUpTM. Na tej liście mamy możliwość przypisania wybranego polecenia do określonego wyjścia modułu SpeakUpTM. Oprócz przypisania zarejestrowanych poleceń do poszczególnych wyjść modułu SpeakUpTM, mamy także możliwość ustalenia zachowania się tych wyjść. Dostępne ustawienia widoczne są na powyższym i są to: 1. NONE – bez zmian na wyjściu 2. ON – wyjście załączone (wysoki poziom logiczny H) 3. OFF – wyłączenie wyjścia (niski poziom logiczny L) 4. TOGGLE – przełączenie stanu na wyjściu (z niskiego na wysoki lub odwrotnie) 5. PULSE – wygenerowany zostanie na wyjściu impuls lub ciąg impulsów o określonych parametrach Możliwe jest przypisanie jednemu poleceniu głosowemu zmiany stanu więcej niż jednego wyjścia modułu SpeakUpTM. W przypadku wybrania na wyjściu jako sygnału wyjściowego „pulse” pojawi się ikonka edycji parametrów generowanego impulsu lub ciągu impulsów widoczna na z lewej strony. Prawy rysunek to okno ustawień parametrów generowanego impulsu lub ciągu impulsów. W oknie tym można ustawić czas trwania impulsu – parametr T, współczynnik wypełnienia – parametr D i ilość powtórzeń wygenerowanego impulsu – parametr N. Jeśli ilość powtórzeń impulsów na wyjściu będzie miała wartość zero to impulsy będą generowane w sposób ciągły. Po kliknięciu na ikonce ustawień aplikacji SpeakUpTM (przycisk z kołem zębatym) mamy możliwość wybrania dodatkowych ustawień modułu SpeakUpTM. Ustawienia te możemy zobaczyć na rysunku poniżej i tak: 1. Acceptance threshold – to krótko pisząc poziom akceptacji błędów. Parametr ten decyduje o tym jak precyzyjnie moduł SpeakUpTM będzie rozpoznawał wydawane polecenia. Zbyt niski poziom akceptacji błędów może utrudnić poprawne rozpoznawanie wydawanych poleceń głosowych. 2. Recording timeout – maksymalny czas (ramy czasowe) w jakim rejestrowane są rejestrowane polecenia. Można wybrać czas o długości 5, 10 i 15 sekund. 3. Word Length – maksymalna długość zarejestrowanego polecenia. Dostępne są następujące długości czasu rejestrowanych poleceń, 1, 1.5, 2, 2.5 i 3 sekundy według dokumentacji. U mnie jak widać na rysunku 8 parametr ten jest nieaktywny. 4. Noise level - poziom hałasu. Niski poziom dźwięku może spowodować przypadkowe zadziałanie modułu. Niższe wartości wymagają też cichszego wydawania poleceń, co powoduje wzrost podatności na zakłócenia hałasem i wyższym poziomem szumów. Wyższy poziom dźwięku wymaga głośniejszego wydawania poleceń, dzięki czemu moduł jest mniej wrażliwy na zakłócenia hałasem i poziom szumów sygnału. 5. Notify master – wybór interfejsu (UART lub USB) do komunikacji z nadrzędnym systemem. 6. Data rate – szybkość transmisji danych do nadrzędnego systemu Sekcja Initial Pin States widoczna na powyższym zrzucie ekranu pozwala na ustawienie stanu spoczynkowego wyjść modułu MIKROE-1534. Może być to stan wysoki H lub niski L. Do zmiany stanu służą wirtualne przełączniki przypisane każdemu wyjściu. Natomiast przycisk podwójnej strzałki wskazany na tym rysunku pozwala na zdefiniowanie własnych nazw poszczególnych wyjść modułu SpeakUpTM - Pin Aliases. Widoczne jest to na poniżej. Po zakończeniu nagrywania i konfigurowania poleceń utworzony projekt zapisujemy na dysku komputera, a następnie przesyłamy do modułu SpekUp przyciskiem Upload project co możemy zobaczyć poniżej. Pora na omówienie zastosowania przycisków Push-button 1 i 2 na płytce oraz diod LED, które możemy zobaczyć na fotografiach modułu MIKROE-1534. Przycisk Push-button 1 służy do nagrywania poleceń głosowych. Po naciśnięciu i przytrzymaniu przycisku należy wypowiedzieć żądane polecenie do zarejestrowania. Domyślny czas polecenia to jedna sekunda. Można nagrywać więcej poleceń trzymając wciśnięty przyciski Push-button 1. Przy tej rejestracji poleceń głosowych należy się upewnić, że pomiędzy wypowiadanymi poszczególnymi poleceniami do zarejestrowania wystąpi błysk czerwonej diody LED. Jednoczesne wciśnięcie obydwóch przycisków na dłużej niż dwie sekundy zresetuje moduł SpeakUpTM. Rejestracja i zarządzanie poleceniami głosowymi za pomocą przycisków na płytce nie jest najwygodniejsze. Zielona dioda LED sygnalizuje zasilanie modułu SpeakUpTM. Świecenie bursztynowej diody LD1 sygnalizuje gotowość modułu SpeakUpTM do nagrywania i rozpoznawania poleceń głosowych. Czerwona dioda LD2 sygnalizuje iż moduł SpeakUpTM jest zajęty rozpoznawaniem lub rejestrowaniem poleceń głosowych. Poprawne rozpoznanie polecenia głosowego sygnalizowane jest zaświeceniem obydwóch diod LD1 i LD2 na pół sekundy. Do przycisków Push-button 1 i 2 i diod LD1, LD2 i PWR mogły zostać doprowadzone złącza goldpin umożliwiające umieszczenie ich na obudowie urządzenia, co w niektórych przypadkach mogło by być dużym ułatwieniem w korzystaniu z modułu SpeakUpTM z użyciem tych przycisków. Uwagi praktyczne 1. Aby uzyskać najlepsze wyniki nagrywania poleceń głosowych konieczne jest zapewnienie warunków nagrywania przy niskim poziome hałasu otoczenia. Mikrofon nie może być zbyt blisko głośników komputera z uwagi na możliwość powstania szkodliwych sprzężeń. Mikrofon powinien znajdować się w odległości około 10 – 20 cm od ust osoby nagrywającej komendy – wydającej polecenia. 2. Jeśli występują problemy z rozpoznaniem określonego polecenia głosowego, należy zapisać je kilka razy z uwzględnieniem różnorodności w wymowie. 3. Obowiązkowo należy odtworzyć zarejestrowane polecenie głosowe, aby usłyszeć czy oprócz polecenia nie został zarejestrowany hałas otoczenia lub przypadkowy dźwięk. 4. Z tego powodu zaleca się umieszczenie modułu SpeakUpTM na powierzchni, która nie przenosi drgań mechanicznych, ewentualnie korzystanie z zewnętrznego mikrofonu. 5. Jeśli jest więcej użytkowników, każdy z nich powinien nagrać polecenia głosowe oddzielnie z uwagi na różnorodność wymowy. 6. Liczba poleceń głosowych, które można zapisać zależy od ich długości. Zazwyczaj jest to ponad dwieście poleceń głosowych o długości od jednej sekundy. 7. Nagrywane polecenia głosowe są rejestrowane za pomocą mikrofonu znajdującego na płytce modułu SpeakUpTM, więc nie ma potrzeby podłączania zewnętrznego mikrofonu do komputera. Praktyczne zastosowanie SpeakUpTM Po zapoznaniu się z możliwościami modułu SpeakUpTM pora na jego praktyczne i efektowne zastosowanie. Spośród wielu pomysłów jakie przyszły mi do głowy zdecydowałem się na użycie modułu SpeakUpTM do sterowania ramieniem robota KSR10 dostępnym w sklepie Botlandu, które możemy zobaczyć na fotografii tytułowej. Po poprawnym złożeniu tego ramienia zgodnie z załączoną instrukcją, można przystąpić do połączenia ramienia robota i modułu SpeakUpTM. Oczywiście nie jest możliwe to bezpośrednio. Słaby sygnał z wyjść modułu SpeakUpTM trzeba wzmocnić, aby mógł on sterować silnikami ramienia robota. Zanim do tego przystąpimy spójrzmy na schemat elektryczny ramienia robota widoczny poniżej. Oczywiście przełączniki SW1-SW5 w stanie spoczynku muszą być rozwarte. Jak widzimy schemat elektryczny tego ramienia jest bardzo prosty. Do napędu ramienia wykorzystanych jest pięć silniczków, które zasilane są napięciem 2 x 3V symetrycznym względem masy. Tego rodzaju rozwiązanie ma na celu uproszenie schematu elektrycznego ramienia robota. Nie trzeba stosować podwójnych dwubiegunowych przełączników. Minusem tego rozwiązania jest konieczność stosowania dwóch zestawów baterii zasilających. Dodatkowo w chwytaku ramienia robota zastosowana jest dioda LED oświetlająca pole robocze ramienia. Całość podzielona jest na dwie części elektryczne. Pierwsza część to zespół pięciu silniczków elektrycznych, dioda LED, płytka połączeniowa oraz zespół baterii zasilających typu R20, które są umieszczone w podstawie robota. Druga część to zespół pięciu pojedynczych przełączników dwubiegunowych i przełącznik włączający diodę LED. Całość połączona jest za pomocą wielożyłowego przewodu i ośmiostykowego złącza. Przełączniki SW1 – SW5 można łatwo zastąpić przekaźnikami. Do sterowania ramieniem robota można wykorzystać przekaźniki załączane za pośrednictwem układów ULN2803. Wadą tego rozwiązania jest to iż oryginalne przełączniki pulpitu sterującego muszą zostać zastąpione dwoma przekaźnikami, aby w stanie spoczynku ramię robota nie pracowało. Czyli potrzebujemy dziesięć przekaźników. Dioda LED może być włączona bezpośrednio z układu ULN2803. Jednak zdecydowałem się na zastosowanie dwunastu przekaźników co pozwala na wykorzystanie wszystkich dwunastu wyjść modułu SpeakUpTM. Dzięki temu łatwo możemy wykorzystać całość do sterowania innym urządzeniem lub mechanizmem niż ramię robota. Wybierając to rozwiązanie nie trzeba też ingerować w obwody elektryczne ramienia KSR10. Gotowy moduł sterujący można po prostu podłączyć do złącza sterującego robota, zamiast oryginalnego pulpitu sterującego. Schemat elektroniczny całego sterownika ramienia robota możemy zobaczyć poniżej. Nie jest to skomplikowane urządzenie elektroniczne. W zasadzie jest to karta przekaźników z zasilaczem i możliwością podłączenia płytki SpeakUpTM. Sygnały pojawiające się na wyjściach IO1- IO12 modułu SpeakUpTM wzmacniane są w układach ULN2803, które włączają poszczególne przekaźniki. Diody LED dołączone do przekaźników pełnią rolę sygnalizacyjną, który przekaźnik jest w danej chwili załączony. Zasilacz to tradycyjne rozwiązanie oparte na stabilizatorach LM7805 i LM33CV. Zastosowana została nieco większa ilość kondensatorów filtrujących. Ich zadaniem jest nie tylko filtracja napięcia zasilającego, ale również ograniczenie i filtracja przepięć powstających w cewkach przekaźników. Mogło by to spowodować niekontrolowane działanie całego urządzenia. Montaż i uruchomienie Płytka sterownika zaprojektowana jest z użyciem elementów SMD i przewlekanych. Elementy te są montowane po obu stronach płytki drukowanej. Schemat montażowy płytki sterownika, jej widok 3D oraz fotografie możemy zobaczyć poniżej. Montaż płytki sterownika przeprowadzamy w tradycyjny sposób zaczynając od elementów najmniejszych czyli SMD, na końcu montujemy duże elementy czyli przekaźniki i kondensatory elektrolityczne. Jako złącze pod moduł SpeakUpTM można zastosować goldpiny typu żeńskiego 1x8 pinów. Jeżeli napięcie wyjściowe transformatora zasilającego sterownik nie będzie zbyt wysokie to stabilizatory napięcia nie wymagają radiatora, ale warto go zastosować. Pobór prądu w stanie spoczynku to około 72 mA i 142mA przy włączonym jednym przekaźniku. Pobór prądu wzrasta o około 70 mA przy każdym kolejnym włączonym jednocześnie przekaźniku. Uwzględniając najbardziej niekorzystny przypadek włączenia wszystkich przekaźników i zasilanie części elektronicznej, pobór prądu może przekroczyć 910 mA. Wówczas radiator będzie potrzebny. Silniki serwomechanizmów są zasilane z osobnego źródła zasilania jakim są baterie R20. Przed zamontowaniem na płytce sterownika kosztownego modułu SpeakUpTM należy sprawdzić poprawność montażu płytki i jej działanie. Sprawdzamy napięcia 5V i 3,3V oraz działanie przekaźników podając na piny IO1-IO12 złącz płytki MIKROE-1534 napięcie 3,3V co powinno spowodować załączenie kolejnych przekaźników. Wymagana jest ostrożność i staranność montażu zarówno płytki sterownika jak i płytki SpeakUpTM, aby nie uszkodzić kosztownej płytki SpeakUpTM. Uwaga! Na płytce drukowanej sterownika nie ma gotowych połączeń styków przekaźników do sterowania ramieniem robota. Wykonanie tych połączeń na płytce ograniczyło by jej zastosowanie tylko do sterowania ramieniem KSR10. Odpowiednie połączenia należy wykonać przewodami na podstawie rysunku przedstawiającego połączenia manipulatora robota. Do wykonanych przewodami połączeń należy dołączyć za pośrednictwem taśmy przewodów ośmiostykowe żeńskie złącze typu 402. Do połączenia z płytą drukowaną Demostenesa użyłem żeńskich dwupinowych złącz z przewodami z odzysku z obudów komputerowych. Taśmę ze złączem typu 402 i przewody ze złączami do płytki drukowanej połączyłem razem na małej uniwersalnej płytce drukowanej. Rozwiązanie to jest widoczne na poniżej. Może to nie jest elegancie rozwiązanie, ale taka jest natura połączeń kablowych. Wspomniałem wcześniej, że ramię robota KSR10 zasilane jest z czterech baterii typu R20. Ze zrozumiałych względów baterie te powinny być dobrej jakości. Przy intensywnym korzystaniu z ramienia warto rozważyć zastąpienie ich odpowiednimi akumulatorkami. Jeszcze jedna możliwość to zbudowanie zasilacza do zasilania zarówno ramienia robota jak i sterującej nim części elektronicznej. Odpowiedni do tego rozwiązania jest transformator o oznaczeniu TS25/9, którego napięcia wyjściowe są niemal idealne do wykorzystania i wynoszą 10,5V – 1,2A, 2x 2V – 1,2A oraz 3V – 1,2A – niewykorzystane. Według starszego katalogu transformator ten miał inne napięcia, co należy uwzględnić przy ewentualnym jego zakupie. Zasilanie części elektronicznej z tego transformatora nie wymaga modyfikacji poza ewentualnym zastosowaniem radiatora dla stabilizatorów napięcia. Natomiast do zasilania ramienia robota należy wówczas wykonać prosty zasilacz według poniższego schematu. Napięcia na kondensatorach filtrujących napięcia wyniosą 2V (AC) * 1,41 = 2,82V (DC). Zastosowanie zasilacza zamiast baterii wiąże z niewielkimi przeróbkami ramienia robota i każdy musi sam zdecydować jakie rozwiązanie wybierze. Należy też pamiętać, że duże i ciężkie baterie R20 umieszczone w podstawie ramienia robota stanowią jego obciążenie i zapewniają jego stabilność. Bez baterii w podstawie ramię robota może być podane na przewrócenie. Programowanie modułu SpeakUpTM Korzystając z aplikacji SpeakUp i wcześniejszego opisu należy zaprogramować odpowiednie komendy sterujące ramieniem robota. Zaprogramowanie potrzebnych komend może wymagać trochę treningu, zarówno w czasie programowania komend jak i późniejszego wydawania poleceń, tak aby ramię robota pewnie reagowało na nasze polecenia. Do programowania możemy wykorzystać mikrofon znajdujący się na płytce SpeakUpTM, jak również możemy dołączyć mikrofon zewnętrzny. Podczas programowania komend należy uwzględnić wcześniej podane uwagi praktyczne. Ramię KSR10 ma pięć stopni swobody czyli możliwych do wykonania kierunków ruchu. Na każdy z tych stopni składa się dwa przeciwstawne ruchy. Dla każdego z nich trzeba wybrać i zaprogramować odpowiednie komendy. Najprościej będzie te stopnie swobody opisać za pomocą poniższej fotografii. Literka „M” wraz z cyfrą oznacza dany silniczek serwomechanizmu. Oznaczenia te są zgodne z rysunkiem z punktu 8 na stronie 41 oryginalnej dokumentacji montażowej ramienia KSR10. 1. M1 – sterowanie szczękami chwytaka 2. M2 – pochylanie chwytaka góra – dół 3. M3 – pochylanie połowy ramienia góra – dół 4. M4 – pochylanie całego ramienia góra - dół 5. M5 – obrót ramienia prawo – lewo 6. Włączanie światła Poniżej znajduje się zastosowany przeze mnie wykaz komend sterujących ruchem ramienia. Komendy te powinny być w miarę możliwości krótkie i proste w wymowie. 1. M1 – chwyć – zwolnij – chwytanie i puszczanie przedmiotu szczęką chwytaka 2. M2 – pochyl – unieś – podnoszenie i opuszczanie chwytaka 3. M3 – góra – dół – podnoszenie i opuszczanie połowy ramienia 4. M4 – podnieś – opuść – podnoszenie i opuszczanie całego ramienia 5. M5 – prawo – lewo – ruch ramienia w prawo i lewo 6. Lampa – włącza światło 7. Stop – wyłącza wszystkie komendy Podczas programowania modułu SpeakUpTM odpowiednie jego wyjścia musimy przypisać do odpowiednich przekaźników sterujących poszczególnymi silnikami ramienia. Uwaga! Programując na przykład wyjście IO9 jako komendę „prawo” pozostałe wyjścia dla tej komendy należy ustawić jako OFF czyli wyłączone. Jeśli tego nie zrobimy to wydanie przeciwstawnej komendy „lewo” spowoduje aktywację wyjścia IO10 bez wyłączenia drugiego przekaźnika z wyjścia IO9 i zwarcie elektryczne! Natomiast wydanie innej komendy np. „unieś” spowoduje, że będą wykonywane dwa ruchy ramienia jednocześnie. Drugi przypadek nie jest szkodliwy, ale przez nieuwagę może być jak to wyżej opisałem powodem zwarcia, jak również trudności w kontrolowaniu kilku ruchów ramienia jednocześnie. Dla komendy „stop” przypisujemy wszystkim wyjściom parametr OFF. Przy prawidłowym zaprogramowaniu komend wydanie jednej komendy ma spowodować wyłączenie komendy uprzednio wydanej. Nie dotyczy to jedynie komendy włączania lampki oświetlającej chwytak, która po włączeniu powinna świecić ciągle oświetlając pole robocze chwytaka. Komendzie „stop” możemy przypisać generowanie impulsów na wyjściu, co może sygnalizować zatrzymanie ramienia poprzez klikanie przekaźnika i błyskanie diody LED. Może być to na przykład trzy impulsy o czasie trwania 1s. Ewentualne błędy w przypisaniu serwomechanizmom komend możemy wygodnie skorygować poprzez przeprogramowanie wyjść IO modułu, lub mniej wygodnie poprzez zmianę okablowania w obrębie przekaźników sterujących ramieniem. W tym miejscu należy wspomnieć, że serwomechanizmy ramienia posiadają proste sprzęgła przeciążeniowe i kiedy dany segment ramienia osiągnie skrajne położenie to sprzęgło to zapobiega uszkodzeniu serwomechanizmu. Dłuższe trzymanie włączonego silnika ramienia w skrajnym jego położeniu może spowodować trwałe uszkodzenie lub przedwczesne zużycie tego sprzęgła. Z tego też powodu kiedy element ramienia osiągnie skrajne wychylenie i zadziała sprzęgło, co objawi się głośniejszą pracą serwomechanizmu, należy bezwzględnie wyłączyć silnik komendą „stop”. Lub wyłączyć zasilanie ponieważ hałas generowany przez serwomechanizmy zakłóca wydawane komendy! W przypadku sterownia modułem SpeakUpTM mamy możliwość ustawienia czasu na jaki będą włączane silniki serwomechanizmu. Ustalenie odpowiedniej wartości czasu włączenia danego silnika pozwoli na osiągnięcie jego skrajnego położenia i jednocześnie jego wyłączenie bez konieczności wypowiadania komendy „stop”. Może być to pewien rodzaj wyłącznika bezpieczeństwa i warto rozważyć skorzystanie z niego, aby nie uszkodzić serwomechanizmów kosztownego ramienia KSR10. Teoretycznie możliwe jest wcześniejsze wyłączenie silnika serwomechanizmu komendą „stop”. Jednak hałas serwomechanizmów nakłada się na wydawane komendy i moduł MIKROE-1534 nie reaguje na wydawane polecenia. Po zaprogramowaniu modułu SpeakUpTM i podłączeniu do ramienia robota można zacząć próby sterowania nim za pomocą głosu. Wbrew pozorom nie jest to na początku tak proste jak się wydaje i wymaga prób zarówno wydawania poleceń i rejestracji komend, tak aby były one poprawnie rozpoznawane. Może być konieczna zmiana poziomu akceptowalnych błędów jak i poziomu hałasu. Również treningu wymaga wydawanie poleceń, tak aby ramię reagowało na nasze polecenia zgodnie z naszymi oczekiwaniami. Czyli aby segmenty ramienia KSR10 ustawiały się i zatrzymywały w położeniach, których wymagamy. Nie jest to łatwe, ponieważ ramię cechuje się pewną bezwładnością i po wyłączeniu serwomechanizmu jeszcze się przemieszcza przez krótki czasu. Serwomechanizmy ramienia KSR-10 nie mają sprzężenia zwrotnego co utrudnia kontrolowanie jego ruchów za pomocą głosu. Wrażenia z testów Podczas korzystania z modułu SpeakUpTM komendy i polecenia należy wymawiać głośno, zdecydowanie i wyraźnie szeroko otwierając usta. Nie można niewyraźnie „mruczeć” pod nosem. Zalecane jest nagranie wszystkich komend za jednym razem i przesłanie ich do modułu. Kiedy modyfikujemy ustawienia i ponownie je przesyłamy do modułu SpeakUpTM to odniosłem wrażenie, że z niektóre z modyfikowanych komend są jakby „gubione” podczas ich aktualizacji. Przed wgraniem nowego zestawu komend można zresetować moduł SpeakUpTM wciskając jego przyciski na co najmniej 2 sekundy. Także zdarza się, że moduł SpeakUpTM pomimo poprawnego zaprogramowania komend i przypisania im poszczególnych wyjść myli się i po rozpoznaniu komendy przypisuje jej inne wyjście niż zaprogramowane. Sporadycznie zdarza się, że komendy są błędnie rozpoznawane, na co może wpływać wiele czynników począwszy od niedoskonałości algorytmu zapisanego w mikrokontrolerze, inne akcentowanie poleceń oraz wypowiadanie komend poprzez hałas i dźwięki postronne, a skończywszy na zmianie akustyki pomieszczenia. Zdarzyło się, że moduł przypadkowo zareagował na głos innej osoby, trzaśnięcie drzwiami, dmuchnięcie w mikrofon, a także włączył dwa serwomechanizmy jednocześnie. To były jednak pojedyncze przypadki. Głównym powodem błędnego rozpoznawania komend i błędnego włączania innych wyjść modułu SpeakUpTM, w mojej ocenie jest szybkie wydawanie komend w odstępach kilku – kilkunastu sekundowych. Tak jak w przypadku sterowania ramieniem KSR10. Wówczas moduł SpeakUpTM czasami działa niezgodnie z ustawieniami. W takim przypadku pomaga ponowne jego uruchomienie. Największy problem podczas testów sprawiło ramię KSR10. Odgłos pracy jego serwomechanizmów zakłócał rozpoznawanie komend przez moduł SpeakUpTM. O ile rozpoznanie wydanej komendy nie stanowiło problemu, to jej zmiana lub zatrzymanie ramienia KSR10 po jego uruchomieniu było w zasadzie niemożliwe. Odgłos pracy serwomechanizmu skutecznie utrudniał rozpoznanie wydawanych komend. Sporadycznie udawało się zatrzymać ramię komendą „stop”. W zdecydowanej większości przypadków do zatrzymania ramienia trzeba było wyłączyć zasilanie układu elektronicznego. To z kolei wymagało odczekania kilkunastu sekund na ponowne uruchomienie modułu SpeakUpTM co sygnalizowane jest przez jego diody LED. Nie pomogło nawet oddalenie zewnętrznego mikrofonu od ramienia KRS10 na odległość około trzech metrów. Również zmiana czułości jak i poziomu akceptowalnych błędów przez moduł SpeakUpTM nie przyniosła poprawy. Zadowalające rezultaty osiągnąłem dopiero umieszczając ramię KSR10 na balkonie za zamkniętymi drzwiami. Sterownik Demostenesa w tym czasie znajdował się po drugiej stronie drzwi w salonie. Przechodzący przez drzwi cichy odgłos pracy serwomechanizmów nie zakłócał już wydawanych komend i były one rozpoznawane poprawnie. Jeszcze innym rozwiązaniem, aczkolwiek niewygodnym może być zastosowanie mikrofonu mocowanego jak w hełmofonie czołgisty na krtani operatora. W związku z zakłóceniami dźwięku generowanymi przez serwomechanizmy ramienia KSR10 zaprogramowałem moduł SpeakUpTM, tak aby po rozpoznaniu komendy nie włączał silniczków serwomechanizmów na stałe. Generowany jest jeden impuls o czasie trwania dwóch sekund. Wówczas po załączeniu silniczka jest on automatycznie wyłączany po zaprogramowanym czasie bez konieczności wypowiadania komendy „stop”. W takich warunkach powstał krótki film obrazujący działanie samego układu elektronicznego jak i w połączeniu z ramieniem KSR10. Wybierając ramię KSR10 do sterowania głosem liczyłem się z zakłóceniami. Nie przypuszczałem jednak, że hałas generowany przez jego serwomechanizmy w zasadzie uniemożliwi rozpoznawanie wydawanych komend. Przykładowy film z działania ramienia KSR10 sterowanego głosem możemy zobaczyć w poniższym linku: Film składa się on z trzech części. Test samego modułu elektronicznego. Sterowanie poprzez szybę w drzwiach oraz sterowanie z zatrzymaniem silniczków po upływie dwóch sekund. Poniżej fotografia zmontowanego Demostenesa podczas testów z wykorzystaniem zewnętrznego mikrofonu. Na tym kończę ten obszerny opis. Załączniki: 1. Demostens KiCad9.zip - pliki z programu KiCad 9 ze schematem i rysunkiem płytki drukowanej. Pliki pochodzą z systemu Linux w związku z tym w systemie Windows niektóre ścieżki do bibliotek trzeba skorygować. Docztyczy to w szczególności bibliotek modeli 3D. 2. Demostenes wsad.zip - plik z nagranymi komendami i ustawieniami aplikacji SpeakUp. Plik ten raczej nie zadziała z innym głosem niż mój. Jednak po otwarciu w aplikacji SpeakUp można zobaczyć jak płytka MIKROE-1534 została skonfigurowana dla robota. 3. Mikroe-1534_3D.zip - zmodyfikowany model płytki MIKROE-1534 w programie FreeCAD do wykorzystania w programie KiCad. 4. W tym linku ze strony producenta płytki MIKROE-1534 pobierzmy dokumentację płytki w PDF, aplikację SpeakUP oraz nie modyfikowany model 3D tej płytki. Demostenes KiCad9.zip Demostenes wsad.zip Mikroe-1534_3D.zip
  2. Pneumatyka odgrywa kluczową rolę w dzisiejszym przemyśle, będąc podstawą wielu systemów automatyzacji, robotyki oraz procesów produkcyjnych. Zrozumienie zasad działania układów pneumatycznych nie tylko pomaga w projektowaniu wydajnych i niezawodnych systemów, ale również otwiera drzwi do innowacyjnych rozwiązań technicznych. Pneumatyka znajduje zastosowanie w branżach, gdzie kluczowe znaczenie ma szybkie i niezawodne działanie systemów, a także tam, gdzie użycie energii elektrycznej lub hydraulicznej jest mniej efektywne, lub niebezpieczne. Jednym z narzędzi, które mogą Ci przybliżyć pneumatykę oraz jej zastosowanie jest program FluidSIM pozwalający na symulację schematów i systemów pneumatyki, hydrauliki i elektryki. W tym artykule przedstawię Ci: Do czego służy pneumatyka? Czym jest FluidSIM? Funkcjonalności FluidSIM. Komponenty dostępne w FluidSIM. Przykład symulacji. Pneumatyka to ciekawa i względnie łatwa dziedzina, która może urozmaicić wiele twoich projektów! Źródło zdjęcia. Do czego służy pneumatyka? Pneumatyka to dziedzina inżynierii, która zajmuje się wykorzystaniem sprężonego powietrza do wykonania pracy mechanicznej. Stosuje się ją w różnych branżach do napędzania, sterowania i automatyzacji procesów. Na liniach produkcyjnych znajdziemy maszyny przemysłowe, którymi mogą być prasy pneumatyczne korzystające z powietrza do generowania siły przy docisku. Roboty przemysłowe korzystają z pneumatycznych przyssawek, którymi podnoszą i transportują elementy produkcyjne. Technologia sprężonego powietrza znajduje zastosowanie w wielu branżach. Poniżej przedstawiam ciekawe i praktyczne zastosowanie pneumatyki: 1) Pneumatyczne mięśnie, które poruszają się kołami. Miękka robotyka to dział robotyki, który zajmuje się tworzeniem robotów przy użyciu rozciągliwych materiałów. W tej dziedzinie bardzo użyteczna jest pneumatyka, dzięki której można poruszać kończynami robotów. Grupa badawcza Mazzeo stworzyła miękkiego robota mobilnego wykorzystującego powietrze do napędzania kół w robocie. Robot jest w całości elastyczny, co sprawia, że nie ma żadnych sztywnych części, dzięki czemu może bezpiecznie upadać z wysokości. Mobilny robot pneumatyczny. Źródło zdjęcia. 2) Miękki robot wydrukowany w 3D. Podobnym zastosowaniem robotyki miękkiej jest wykorzystanie jej przy stworzeniu czworonożnego robota kroczącego. Zespół z Uniwersytetu Kalifornijskiego w San Diego zastosował pneumatykę w zginaniu kończyn robota, który potrafi poruszać się po nierównym terenie. Pneumatyczny robot kroczący. Źródło zdjęcia. 3) Roboty przemysłowe z pneumatycznymi przyssawkami. Pneumatykę chętnie stosuje się w robotyce przemysłowej. Roboty wyposażone w przyssawki pneumatyczne precyzyjnie podnoszą i przenoszą elementy, dzięki zastosowaniu sprężonego powietrza. Robot może efektywnie manipulować ładunkami o różnych kształtach. Robot przemysłowy wyposażony w przyssawki pneumatyczne. Źródło zdjęcia. 4) Siłowniki pneumatyczne Jednym z najpopularniejszych zastosowań pneumatyki jest zastosowanie sprężonego powietrza w siłownikach pneumatycznych. Poprzez doprowadzenie lub odprowadzenie powietrza do odpowiedniej komory w konstrukcji tego urządzenia, siłownik wykonuje liniowy ruch mechaniczny, co można wykorzystać do manipulacji obiektami lub generacją siły nacisku. Siłowniki to bardzo ważne elementy wykorzystywane w rozwiązaniach pneumatycznych. Źródło zdjęcia. Pneumatyka umożliwia konstrukcji takich jak elastyczne roboty kroczące czy mobilne. W przemyśle pozwala na precyzyjne manipulowanie obiektami za pomocą przyssawek pneumatycznych. Istotnym elementem pracy z takimi urządzeniami jest także symulacja tych systemów. Jednym z narzędzi, które służy do symulacji układów pneumatycznych jest FluidSIM. Czym jest FluidSIM? Jest to oprogramowanie od Festo, które służy do symulacji układów pneumatycznych, hydraulicznych i elektrycznych. Dzięki niemu możemy zaprojektować i zasymulować układ pneumatyczny ze sterowaniem elektrycznym. Oprogramowanie jest bardzo proste i intuicyjne. Jednym z głównych atutów programu jest jego przejrzysty interfejs i metoda projektowania oparta na symbolach, które można łatwo łączyć, tworząc funkcjonalne układy. To sprawia, że FluidSIM jest idealnym narzędziem zarówno dla początkujących, którzy dopiero uczą się zasad działania systemów pneumatycznych i elektrycznych, jak i dla bardziej zaawansowanych użytkowników, chcących szybko prototypować swoje rozwiązania. Program FluidSIM dysponuje szeregiem elementów, których zachowanie można symulować. Źródło logo Festo: FluidSIM Pneumatics V 4.0. Ponadto elementy dostępne w oprogramowaniu posiadają zmienne parametry. Pozwala to na symulację rzeczywistych parametrów urządzeń. Funkcjonalności FluidSIM W artykule opisano funkcjonalności związane z wersją czwartą oprogramowania. FluidSIM oferuje nie tylko możliwość rysowania schematów, ale także ich symulację, co pozwala na pełne testowanie zaprojektowanych układów. Symulację można zatrzymywać i wykonywać krok po kroku. W parametrach symulacji dostępna jest zmiana kolorystyki niektórych elementów (kolor linii ze sprężonym powietrzem/bez, kolor wskazań elementów pod napięciem, kolor próżni). Oprócz tego można modyfikować szybkość symulacji i kompatybilność z Siemens LOGO!Soft. Parametry symulacji. Przykład prostej symulacji. Zgodnie z kolorystyką możemy założyć, że linie, które symbolizują przewody pneumatyczne, są pod ciśnieniem. Po załączeniu zaworu rozdzielającego powietrze znalazło się w komorze siłownika, skutkując wysunięciem tłoczyska. Podczas symulacji istnieje możliwość zapisywania stanów urządzeń w poszczególnych chwilach. Umożliwia to State Diagram. Wygenerowany podczas symulacji diagram funkcyjny. Diagramy funkcyjne można rysować ręcznie za pomocą Functional diagram. Przykład narysowanego diagramu funkcyjnego. Możliwa jest konfiguracja i zmiana parametrów elementów i urządzeń. Oprócz tego w oknie konfiguracyjnym dostosujemy zewnętrzne obciążenia oraz profile siły. Konfiguracja siłownika. W prawym dolnym rogu okna jest widoczny podgląd elementu po zmianie. Parametry siłownika. Znajdziemy tutaj między innymi średnicę tłoka, kąt montażu lub pozycję początkową tłoka. Ustawienie parametrów jest ważne pod kątem testu układu, gdy chcemy zaimplementować rozwiązanie z określonymi urządzeniami. To oczywiście nie są wszystkie dostępne funkcjonalności programu. Oprogramowanie oferuje również materiały edukacyjne na temat pneumatyki oraz wiele więcej, w tym bogatą bibliotekę komponentów. Komponenty FluidSIM FluidSIM oferuje bogaty zestaw urządzeń i komponentów, które umożliwiają tworzenie oraz testowanie zaawansowanych układów. Poniżej znajdziesz listę elementów, które mogą okazać się przydatne podczas projektowania. 1. Źródła oraz elementy związane z doprowadzaniem powietrza. Źródła oraz elementy zasilające w FluidSIM zapewniają dostęp do sprężonego powietrza oraz jego odpowiednie przygotowanie. Dzięki temu możliwe jest tworzenie kompletnych układów, które można następnie odwzorować w rzeczywistych warunkach. Źródło sprężonego powietrza. Zespół przygotowania powietrza. Zespół przygotowania powietrza. Filtr. Chłodnica. Dostępne elementy źródła zasilania pneumatycznego i elementy pokrewne. 2. Urządzenia wykonawcze Pneumatyczne urządzenia wykonawcze to elementy układów pneumatycznych, które przekształcają energię sprężonego powietrza na ruch mechaniczny. Odpowiadają za realizację określonych czynności, takich jak przesuwanie, podnoszenie, dociskanie czy obracanie elementów. Siłownik pneumatyczny jednostronnego działania ze sprężyną. Siłownik pneumatyczny dwustronnego działania. Silnik pneumatyczny o dwóch kierunkach przepływu. Dostępne elementy wykonawcze. Należy pamiętać, że można zmieniać parametry urządzeń i elementów. Na przykład siłownik jednostronnego działania ze sprężyną można przekształcić na dwustronnego działania bez sprężyny i na odwrót. 3. Zawory Istnieje wiele zaworów pneumatycznych, które mają zastosowanie w pneumatyce. Jedne z najpopularniejszych to rozdzielające, dławiąco zwrotne i logiczne. FluidSIM je implementuje i umożliwia za ich pomocą sterowanie pośrednie układami. Zawór rozdzielający 3/2. Zawór dławiąco zwrotny. Zawór podwójnego sygnału (logiczne AND). Część dostępnych zaworów. Dostępnych jest o wiele więcej. Podobnie jak elementy wykonawcze zawory są w pełni konfigurowalne. Konfiguracja zaworu rozdzielającego. 4. Układy elektryczne FluidSIM oferuje symulację elektrycznych układów sterowania. Biblioteka symboli zawarta w programie zawiera bogatą kolekcję elementów, takich jak: przyciski, sensory, przekaźniki, styki, a nawet sterownik PLC oraz regulator PID. Zasilanie elektryczne. Generator funkcyjny. Przycisk. Cewka elektryczna. Moduł logiczny (coś w rodzaju PLC). Regulator PID. Jak widzisz, istnieje wiele elementów i modułów, z których możesz skorzystać. Każdy z nich pełni określoną rolę i może zostać użyty do budowy złożonych symulacji. Kluczem jest ich odpowiednie połączenie i wykorzystanie, aby stworzyć coś funkcjonalnego i interesującego. Zastanówmy się, jak połączyć te moduły w spójną całość i stwórzmy symulację pewnego układu. Przykład symulacji Stwórzmy uproszczoną symulację obrabiarki detali. Urządzenia ma działać z następującym algorytmem: Urządzenie po włączeniu nie wykonuje żadnych ruchów. Po wciśnięciu przycisku START rozpoczyna się proces obrabiania. Jeżeli w którymkolwiek momencie działania algorytmu zostanie wciśnięty przycisk STOP, to wszystkie urządzenia się wyłączają. Siłownik dociska detal do stołu. Po dociśnięciu detalu włącza się silnik elektryczny i zaczyna obrabiać detal. 3 sekundy po załączeniu silnika rozpoczyna się proces wyłączania. W tym momencie wyłącza się silnik. Po 2 sekundach od wyłączenia silnika siłownik wraca na swoją początkową pozycję. Jeżeli masz dostęp do FluidSIM, to spróbuj wykonać taki układ i przeprowadzić kilka symulacji. Jedno z rozwiązań problemu. Powyżej znajduje się jedno z możliwych rozwiązań tego zadania. Po wciśnięciu przycisku START załączy się stycznik K1 podtrzymujący cały proces oraz cewkę K2, która załącza siłownik pneumatyczny. Siłownik ma dwie pozycje. Pozycja ‘A’ to pozycja początkowa, a ‘B’ to pozycja końcowa. Dojazd tłoczyska do pozycji ‘B’ powoduje załączenie się styku ‘B’, który jest stykiem wyłącznika drogowego, co powoduje dołączenie zasilania na silnik. Silnik zaczyna się obracać i obrabiać materiał. W tym momencie załącza się czasówka K3, która po 3 sekundach rozwiera styk NC K3. W rezultacie silnik się zatrzyma. W tym samym czasie zwiera się styk NO K3, który załącza przekaźnik czasowy K4. Ten odlicza 2 sekundy i po tym czasie tłok wraca do swojej pierwotnej pozycji przez rozwarcie styku NC K4 w układzie po lewej stronie. Jeżeli wciśniemy przycisk STOP podczas działania układu, to cały proces zakończy się przed jego ukończeniem. Przykład działania rozwiązania. Podsumowanie Pneumatyka jest kluczową dziedziną inżynierii, mającą szerokie zastosowanie w automatyce przemysłowej, robotyce oraz wielu innych branżach. Współczesne narzędzia, takie jak FluidSIM, umożliwiają modelowanie i testowanie układów pneumatycznych, hydraulicznych i elektrycznych bez potrzeby fizycznej budowy prototypów. Dzięki temu można nie tylko sprawdzać poprawność działania projektów, ale także optymalizować je pod kątem wydajności i oszczędności energii. Warto pamiętać, że nauka symulacji i projektowania w FluidSIM to nie tylko sposób na lepsze zrozumienie pneumatyki, ale także doskonała okazja do rozwijania umiejętności inżynierskich.
  3. Napisałem prosty program, którego zadaniem jest wyświetlaniu na ośmioelementowej listwie LED dowolnego wzoru i jego przesuwanie. //Dołączenie biblioteki obsługującej linijkę led #include <Adafruit_NeoPixel.h> //dedklaracja pinów i stałych const int ledPin = A0; const int ledCount = 8; //ilość LED w linijce const int patCount = 3; //ilość elementów wzoru do wyświetlania //deklaracja tablicy wyświetlanego wzoru unsigned long pattern[patCount]; bool start = true; //flaga używana w instrukcji if , start = true dla początkowego wzoru, start = false dla kolejnych wzorów //Konfiguracja linijki Adafruit_NeoPixel linijka = Adafruit_NeoPixel(ledCount, ledPin, NEO_GRB + NEO_KHZ800); void setup() { //Inicjalizacja linijki linijka.begin(); linijka.show(); } void loop() { //definiowanie wyświetlanego wzoru unsigned long red = linijka.Color(30, 0, 0); unsigned long blue = linijka.Color(0, 0, 30); unsigned long green = linijka.Color(0, 30, 0); unsigned long magenta = linijka.Color(30, 0, 30); unsigned long pattern[patCount]; // ponowna deklaracja, bez której program nie działa if (start) { //wypełnienie linijki kolejnymi elementami wzoru unsigned long pattern[] = {blue, blue, red}; for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); start = false; } else { //zmiana wzoru - przesunięcie o jeden element w górę, element ostatni staje się pierwszym unsigned long tempVal = pattern[patCount-1]; for (int i=patCount-1; i>0; i--) { pattern[i] = pattern[i-1]; } pattern[0]=tempVal; //wypełnienie linijki kolejnymi elementami wzoru for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); } } Program nie jest skomplikowany, wymaga zdefiniowania kolorów: //definiowanie wyświetlanego wzoru unsigned long red = linijka.Color(30, 0, 0); unsigned long blue = linijka.Color(0, 0, 30); unsigned long green = linijka.Color(0, 30, 0); unsigned long magenta = linijka.Color(30, 0, 30); zadeklarowania w tablicy pattern: unsigned long pattern[] = {blue, blue, red}; przypisania kolejnym LED elementów wzoru: for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } wyświetlenia: linijka.show(); delay(150); Funkcję ruchu uzyskałem dzięki zmianie wzoru - przesuwając elementy o jeden tzn.: pierwszy staje się drugim, drugi - trzecim, a ostatni - pierwszym: unsigned long tempVal = pattern[patCount-1]; for (int i=patCount-1; i>0; i--) { pattern[i] = pattern[i-1]; } pattern[0]=tempVal; oraz ponownemu przypisaniu elementom LED kolejnych elementów nowego wzoru i wyświetleniu: //wypełnienie linijki kolejnymi elementami wzoru for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); Nic nadzwyczajnego, ale uruchamiając program napotkałem kilka istotnych problemów. Najważniejszy, to deklaracja zmiennych i ich zasięg. Aż się prosi by fragment przypisywania elementom LED elementów wzoru i wyświetlenie wstawić do odrębnej funkcji: //wypełnienie linijki kolejnymi elementami wzoru unsigned long pattern[] = {blue, blue, red}; for (int id = 0; id < ledCount; id=id+patCount) { for (int m = 0; m < patCount; m++) { linijka.setPixelColor(m+id, pattern[m]); } } //wyświetlenie linijki linijka.show(); delay(150); Jednak gdy to zrobiłem, okazało się, że kompilator nie zgłaszał błędu, ale zapisany wzór nie był wyświetlany. Podobnie prosi się, by fragment funkcji void loop(): //definiowanie wyświetlanego wzoru unsigned long red = linijka.Color(30, 0, 0); unsigned long blue = linijka.Color(0, 0, 30); unsigned long green = linijka.Color(0, 30, 0); unsigned long magenta = linijka.Color(30, 0, 30); unsigned long pattern[patCount]; // ponowna deklaracja, bez której program nie działa który właściwie mógłby być wykonywany tylko raz, umieścić w void setup(). Próba umieszczenia tego fragmentu do setup także kończyła się błędami kompilacji. Czy mógłby ktoś bardziej biegły w programowaniu powiedzieć, co jest nie tak i skąd błędy w kompilacji i sygnalizowanie błędów zasięgu zmiennych? Co trzeba zrobić by powtarzające się fragmenty zapisać w funkcji?
  4. Witam serdecznie. Kupiłem do testów zawór elektromagnetyczny 12V - 3/4'' - SparkFun ROB-10456 ze sklepu Botland. Do wzmocnienia napięcia użyłem przetwornicę step-up XL6009 regulowaną 4V-35V 3A . I tak, jeśli wepnę przewody do pinów 5V i GND, napięcie wyjściowe jest ok. 4.86V i takie dochodzi do przetwornicy . Zostaje wzmocnione do ok 12V, chociaż zawór działa prawidłowo już przy niecałych 9V i wszystko jest OK. Ustawiam stan wysoki na pinie 8 i napięcie wyjściowe jest 4.88V. Na wejściu przetwornicy jest już tylko 2.90V (???) a na wyjściu aż 17.69V, czasami wartość mniejsza niż na wejściu np. wejście 2.60V, wyjście 2.30V i regulacja potencjometrem nic nie daje. Jednak po zmniejszeniu napięcia wyjściowego elektrozawór nie działa. Przy tym wysokim napięciu słychać ciche puknięcie w cewce, jednak po zmniejszeniu napięcia do wartości rzędu 8-12V, zawór nie podnosi się. Po ponownym podłączeniu do pinu 5V i wyregulowaniu napięcia na przetwornicy, znów wszystko działa poprawnie. Dlaczego???? Chcę programować otwarcie i zamknięcie elektrozaworu (docelowo trzech), jednak tą metodą nie działa. Proszę o pomoc, w co należy wyposażyć układ, aby było możliwe zasilenie elektrozaworu z pinów cyfrowych? Dodam, że wszystko ma być zasilane z Arduino jednym zasilaczem 7V 1A.
  5. W moim autku na BT koła miały problem z rozkręcaniem się najprawdopodobniej przez niecałkowite otwarcie się MOSFET-u, gdyż silniczki w aucie są na max. 6 v a układ sterujący na 12 v (jak mi zasugerował stary gracz w tym temacie) i powiedział też, żebym zastosował logikę ujemną, lub sterowanie masą jak kto woli, no i zabieram się do tego i tu jest problem, bo jak na pojedynczych komponentach wiem co robić, tak tutaj nie wiem, od czego zacząć, a nie chciałbym sobie usmażyć czegoś, także co zrobić? Będę wdzięczny za każdą sugestię i odpowiedź
  6. Witam, pracuję nad stworzeniem autonomicznego pojazdu, bazującego na Raspberry Pi i Pythonie. Do sterowania silnikami wykorzystuję układ DRV8835 od Pololu (dedykowany układ do RPi), ma on nawet stworzoną własną bibliotekę do obsługi. Testowałem jego działanie na przykładowym programie dostarczonym wraz z biblioteką i działa, tylko nie mogę znaleźć nigdzie jakiegoś projektu, informacji jak przełożyć to na jakieś konkretne zastosowanie. Poniżej wstawiam kod który był dostarczony z biblioteką. from __future__ import print_function import time from pololu_drv8835_rpi import motors, MAX_SPEED # Set up sequences of motor speeds. test_forward_speeds = list(range(0, MAX_SPEED, 1)) + \ [MAX_SPEED] * 200 + list(range(MAX_SPEED, 0, -1)) + [0] test_reverse_speeds = list(range(0, -MAX_SPEED, -1)) + \ [-MAX_SPEED] * 200 + list(range(-MAX_SPEED, 0, 1)) + [0] try: motors.setSpeeds(0, 0) print("Motor 1 forward") for s in test_forward_speeds: motors.motor1.setSpeed(s) time.sleep(0.005) print("Motor 1 reverse") for s in test_reverse_speeds: motors.motor1.setSpeed(s) time.sleep(0.005) print("Motor 2 forward") for s in test_forward_speeds: motors.motor2.setSpeed(s) time.sleep(0.005) print("Motor 2 reverse") for s in test_reverse_speeds: motors.motor2.setSpeed(s) time.sleep(0.005) finally: # Stop the motors, even if there is an exception # or the user presses Ctrl+C to kill the process. motors.setSpeeds(0, 0) W moim przypadku mam do pobrania z drugiego pliku wartości "angle" i "distance", muszę wprowadzić dodatkowo dwie stałe "dis=.75" oraz "ang=1" . Z tego wszystkiego muszę wyprowadzić sterowanie silników aby działały według równania które jest zamieszczone poniżej. Mógłby mi ktoś pomóc, poradzić, powiedzieć, naprowadzić mnie jak to zdefiniować na mim konkretnym przykładzie? from plik1 import angle, distance dis=.75 ang=1 rownanie=((distance*dis)+(angle*ang))
  7. Witam! Rozpoczynam nowy projekt, którym będzie próba zbudowania robota balansującego. Będzie to mój pierwszy robot. Ponieważ temat jest obszerny, oraz sama elektronika robota będzie modułowa, więc postanowiłem podzielić projekt na kilka worklogów. Zaczynam od modułu sterowania silników i tego będzie dotyczyć ten worklog. Założenia: 1. Dwa kanały (2 silniki BLDC - do gimbali) 2. Sterowanie FOC z enkoderem magnetycznym 3. Zintegrowany mikrokontroler który będzie tylko do sterowania silnikami (utrzymywanie równowagi i zadanych parametrów ruchu) 4. Zintegrowany akcelerometr i żyroskop 5. Monitorowanie max prądu silników (zabezpieczenie przed przeciążeniem) Zdecydowałem się na następujące główne komponenty: 1. Silniki BLDC do gimbali - 5208 - 2 szt. 2. Driver silników L6234 - 2 szt. 3. Enkodery magnetyczne AS5600 - 2 szt. 4. Akcelerometr i żyroskop - MPU6050 - 1 szt. 5. Mikrokontroler STM32F103RG (wersja XL-density bo ma dwa zaawansowane timery TIM1 i TIM8) Pozdrawiam, Marek
  8. Witajcie Uczę i poznaję możliwości Arduino. Wpadłem na pomysł zbudowania ruchomych tarcz strzelniczych dla synka z użyciem pistoletów na piankowe naboje. Sterowanie za pomocą Arduino + przekażniki + elektrozawory pneumatyczne + siłowniki. Stworzyłem jak narazie kod gdzie na każdy kanał podaję parametry czasu opóźnienia i czasu trwania załączenia. Uruchamianie następuje po wciśnięciu przycisku na kablu. Akcja zaczyna z odliczaniem np po 5 sekundach (z regulacja od 0 do 30 sekund w kodzie) po wciśnieciu przycisku. Potrzebuję dopisać kod z udziałem diody LED mrugający co sekundę odliczanie i zaraz przed rozpoczęciem akcji pali sie np na 3 sekundy. Niestety programowanie jak dla mnie czarna magia i dlatego zwracam o pomoc. Dziękuje Oto kod: //opoznienie i czas trwania w ms dla kanału 1 unsigned long opoznienie1 = 1500; unsigned long czas1 = 50; //opoznienie i czas trwania w ms dla kanału 2 unsigned long opoznienie2 = 2000; unsigned long czas2 = 100; //opoznienie i czas trwania w ms dla kanału 3 unsigned long opoznienie3 = 1500; unsigned long czas3 = 150; //opoznienie i czas trwania w ms dla kanału 4 unsigned long opoznienie4 = 3000; unsigned long czas4 = 200; //opoznienie i czas trwania w ms dla kanału 5 unsigned long opoznienie5 = 3500; unsigned long czas5 = 250; //opoznienie i czas trwania w ms dla kanału 6 unsigned long opoznienie6 = 4000; unsigned long czas6 = 300; //opoznienie i czas trwania w ms dla kanału 7 unsigned long opoznienie7 = 4500; unsigned long czas7 = 350; //opoznienie i czas trwania w ms dla kanału 8 unsigned long opoznienie8 = 5000; unsigned long czas8 = 400; // cyfrowy, pod który podłączony jest przycisk START const int buttonPin = 2; int buttonState = 0; unsigned long int last_millis; void setup() { //tutaj wpisujemy instrukcje pinMode dla wszystkich kanałów pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); pinMode(8, OUTPUT); pinMode(7, OUTPUT); pinMode(6, OUTPUT); pinMode(5, OUTPUT); pinMode(buttonPin, INPUT); //itd. } void loop() { buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { delay(5000); last_millis = millis(); } //KANAL 1 if( millis() >= (last_millis + opoznienie1 + czas1)) { //tutaj wyłączamy urządzenia kanału 1 digitalWrite(12, HIGH); } else if( millis() >= (last_millis + opoznienie1)) { //tutaj uruchamiamy urządzenia dla kanału 1 digitalWrite(12, LOW); } //KANAL 2 if( millis() >= (last_millis + opoznienie2 + czas2)) { //tutaj wyłączamy urządzenia kanału 2 digitalWrite(11, HIGH); } else if( millis() >= (last_millis + opoznienie2)) { //tutaj uruchamiamy urządzenia dla kanału 2 digitalWrite(11, LOW); } //KANAL 3 if( millis() >= (last_millis + opoznienie3 + czas3)) { //tutaj wyłączamy urządzenia kanału 3 digitalWrite(10, HIGH); } else if( millis() >= (last_millis + opoznienie3)) { //tutaj uruchamiamy urządzenia dla kanału 3 digitalWrite(10, LOW); } //KANAL 4 if( millis() >= (last_millis + opoznienie4 + czas4)) { //tutaj wyłączamy urządzenia kanału 4 digitalWrite(9, HIGH); } else if( millis() >= (last_millis + opoznienie4)) { //tutaj uruchamiamy urządzenia dla kanału 4 digitalWrite(9, LOW); } //KANAL 5 if( millis() >= (last_millis + opoznienie5 + czas5)) { //tutaj wyłączamy urządzenia kanału 5 digitalWrite(8, HIGH); } else if( millis() >= (last_millis + opoznienie5)) { //tutaj uruchamiamy urządzenia dla kanału 5 digitalWrite(8, LOW); } //KANAL 6 if( millis() >= (last_millis + opoznienie6 + czas6)) { //tutaj wyłączamy urządzenia kanału 6 digitalWrite(7, HIGH); } else if( millis() >= (last_millis + opoznienie6)) { //tutaj uruchamiamy urządzenia dla kanału 6 digitalWrite(7, LOW); } //KANAL 7 if( millis() >= (last_millis + opoznienie7 + czas7)) { //tutaj wyłączamy urządzenia kanału 7 digitalWrite(6, HIGH); } else if( millis() >= (last_millis + opoznienie7)) { //tutaj uruchamiamy urządzenia dla kanału 7 digitalWrite(6, LOW); } //KANAL 8 if( millis() >= (last_millis + opoznienie8 + czas8)) { //tutaj wyłączamy urządzenia kanału 8 digitalWrite(5, HIGH); } else if( millis() >= (last_millis + opoznienie8)) { //tutaj uruchamiamy urządzenia dla kanału 8 digitalWrite(5, LOW); } }
  9. Cześć. Chciałbym zaprezentować projekt sterownika pieca dwufuncyjnego na paliwo ciekłe - gaz ziemny. Założenia projektowe: utrzymanie zadanej temperatury w pomieszczeniu/ mieszkaniu w okresie zimowym; wyświetlanie temperatur pomieszczenia, nastaw, godziny daty, stanu pracy pieca. BOM:arduino uno, serwo modelarskie sg90, czujnik temperatury lm335, wyświetlacz LCD 1.8" ST7735 waveshare, zegar rtc, obudowa wydruk 3d, materiał easy PET-G, zasilacz 9V DC, śruby, nakrętki, magnesy neodymowe. Działanie: urządzenie mierzy temperaturę otoczenia a następnie dostosowuje położenie pokrętła w celu załączania pieca. Jest to rozwiązanie najmniej ingerujące w jego działanie. Wykorzystanie przekaźnika przerywającego zasilanie powoduje natychmiastowe wyłącznenie pompy. Powyższe rozwiązanie powoduje tylko przekręcenie pokrętła do pozycji "0", przez co piec wygasza się zgodnie ze swoim cyklem pracy. Modyfikacja w piecu polegała na wymontowaniu oryginalnego pokrętła i włożeniu w jego miejsce ramienia połączonego z serwomechanizmem. Całość zmontowano w samodzielnie zaprojektowanej obudowie, wydrukowanej w technologii 3d. Korpus utrzymywał się na obudowie pieca za pomocą magnesów neodymowych, przez co nie ma konieczności wiercenia otworów.
  10. Robot unikający przeszkód z regulacją napędu silników prądu stałego Cześć! Ponad rok temu skonstruowałem w ramach przedmiotu na studiach robota unikającego przeszkody. Po czasie pomyślałem, że konstrukcją warto podzielić się na Forbocie. Zakres projektu Robot porusza się na dwóch kołach i omija przeszkody wykrywane za pomocą czujnika ultradźwiękowego. Dużo pracy włożono w sterowanie silnikami prądu stałego, które stanowią napęd robota. Mimo że zakres zachowań platformy nie jet zbyt szeroki, to wartość projektu leży w algorytmach teorii sterowania, które skonstruowano by zwiększyć precyzję ruchów. W zakres prac projektowych weszły: projekt platformy robota i jej wykonanie w technologii druku 3D (Fusion 360), projekt układu drukowanego z mikroprocesorem Atmega32u4, mostkiem H oraz paroma innymi peryferiami (Autodesk Eagle), oprogramowanie robota pozwalające na wykrywanie i omijanie przeszkód (biblioteki i bootlader Arduino), konstrukcja pętli sprzężenia zwrotnego dla silników oparta na użyciu enkoderów szczelinowych, algorytm regulatora PI do synchronizacji prędkości kół przy jeździe na wprost (poprawia utrzymanie kierunku jazdy), algorytm zagnieżdżonego regulatora obrotu platformy o zadany kąt (algorytm podobny jak ten stosowany w serwomechanizmach), prosta identyfikacja parametrów transmitancji użytych silników i trochę rozważań na temat możliwości strojenia regulatorów przy pomocy metody linii pierwiastkowych. W ramach zaliczenia projektu powstał dosyć długi raport, gdzie jest opisane jak zrealizowano poszczególne części projektu, dlatego nie ma chyba potrzeby przedstawiać w poście szczegółów po raz drugi. Gdyby ktoś szukał informacji o przenoszeniu swojego projektu z Arduino na własną płytkę PCB (z działającym USB na Atmedze32u4), konstrukcji systemów regulacji w praktyce, czy budowy własnych serwomechanizmów to można tam znaleźć działające przykłady. Kod projektu i dokumentację można znaleźć na GitHubie. Oczywiście projekt nie jest idealny, szczególnie że powstał już jakiś czas temu, a wraz ze zdobywaniem doświadczenia dostrzega się coraz więcej błędów. Na koniec dorzucam parę grafik i gifów, więcej można znaleźć w podlinkowanym raporcie i repozytorium. Ujęcia na robota z różnych stron Wierzchnia strona płytki PCB, spód oraz schemat elektryczny w raporcie Utrzymywanie kierunku jazdy Obrót o zadany kąt
  11. Dobry wieczór, Jestem "świeży" w sprawach programowania kontrolerów takich jak arduino, ale musiałem zrobić projekt na uczelnie. Wybrałem sobie sterowany przez moduł bluethooth XM-15 czołg. Podłączyłem wszystko z lekką pomocą stworzyłem połączenie z telefonem, przy użyciu terminala arduino "odpowiadało mi". Więc dodałem bibliotekę do silników dodałem kilka linijek kodu i wtedy zaczął się problem. Używam shielda z L293D i póki arduino jest połączone z komputerem czołg się porusza, ale jeśli podepnę zasilanie do złącza DC, nic nie działa. Używam Arduino Leonardo, a moduł bluethooth jest połączony do pinów 10,11. Czy to wina płytki czy coś w kodzie mam nie tak? Drugie pytanie czy da się zamiast terminala sterować za pomocą "gotowych kontrolerów" z google marketu. Poniżej kod programu: #include <SoftwareSerial.h> #include <MotorDriver.h> //Deklaracja portu szeregowego dla Bluetootha SoftwareSerial Bluetooth(10, 11); //Utworz instancje Bluetooth 10-RX 11-TX int buffer_in[200]; int i=0; int BluetoothDane; //do zmiennej int będą zapisywane odebrane dane MotorDriver m; int jade=0; void setup() { //i=0; // jade=0;//uruchomienie transmisji z terminalem while(!Serial); Serial.begin(9600); Bluetooth.begin(9600); //uruchom SerialSoftware z prędkością 9600 baud //Serial.println("Polaczyles sie z modulem Bluetooth czolgiem"); // digitalWrite(13,LOW); } void loop() { if (Bluetooth.available()) //Jeśli są jakieś dane { i=0; while (Bluetooth.available()>0) //Odczytujemy dane z bluetooth aż odczytamy wszystko { buffer_in[i]=Bluetooth.read(); //kopiuje dane z bluetooth do bufora i++; } digitalWrite (13,HIGH); Serial.println("Odebrano =\n"); Serial.print(i); //Serial.print("Zawartosc bufora\n"); for(int j=0;j<i-5;j++) Serial.println(buffer_in[j]); Serial.print("Koniec bufora\n"); if (i>0) //sprawdzamy czy cokolwiek odebraliśmy { //jesli tak to sprawdzamy co w buforze if (buffer_in[0]==1) { Serial.println("jade do przodu"); m.motor(1,FORWARD,255); m.motor(4,FORWARD,255); } if (buffer_in[0]==2) { Serial.println("jade do tylu"); m.motor(1,BACKWARD,255); m.motor(4,BACKWARD,255); } if (buffer_in[0]==3) { Serial.println("prawo"); m.motor(1,FORWARD,255);; m.motor(4,BRAKE,0); } if (buffer_in[0]==4) { Serial.println("lewo"); m.motor(4,FORWARD,255); m.motor(1,BRAKE,0); } if (buffer_in[0]==5) { Serial.println("Stop"); m.motor(1,BRAKE,0); m.motor(4,BRAKE,0); } //jak już sprawdzilismy co w buforze to trzeba go wyczyscic // i w następnym przebiegu petli znowu czekamy na coś co przyjdzie z blue memset(buffer_in, 0, sizeof(buffer_in)); } delay(1); //odczekaj 1ms } }
  12. Witajcie Forumowicze, Zamarzył mi się kiedyś wyświetlacz biegów w motocyklu. Stwierdziłem, że zamiast kupować, można zrobić go samemu. Będzie większa frajda Wykorzystam wyświetlacz 7 segmentowy ze wspólną anodą. Jako dekoder chciałbym użyć układ 4543, gdyż jak wyczytałem wyświetla pełną 6 i 9. W motocyklu mam 6 pinów, odpowiadających 6 biegom, na których przy poszczególnych biegach pojawia się stan niski (masa). I tu mam problem, bo nie wiem jak zredukować te sygnały na kod BCD. W necie znalazłem podobny schemat, jak poniżej, jednak nie mogłem znaleźć w Polsce układu 74ls147d, żeby go potestować. Czy wiecie, gdzie można go dostać, pod inną nazwą? Może mogę go zastąpić jakimś podobnym układem logicznym? Będę wdzięczny za wszystkie wskazówki. P.S. Jak się nie uda nic znaleźć, to za pomocą Arduino zaprogramuję sobie Atmegę. Wyjście awaryjne.
  13. Projekt Rąsia jest trochę wzorowany na projekcie z filmu Rodzina Adamsów. Może na razie nie aż tak perfekcyjny, ale realny. Mechanizm dłoni (prawej) został zakupiony tradycyjnie na stronie chińskiej (link na mojej stronie). Dostawa trwała wyjątkowo długo, ale była z miłą niespodzianką - dłoń była całkowicie zmontowana. Umożliwiło to pierwsze eksperymenty praktycznie w ciągu 15 minut od rozpakowania paczki. Jako układ sterowania posłużył moduł sterowania ramienia (opis na stronie). Obecnie program został przeniesiony na płytkę Arduino Uno, moduł sterowania został dostosowany do pinów Uno. Żeby Rąsia mogła mówić dodany został moduł odtwarzania dźwięku z Mówiącej Kostki - ładnie liczy na paluszkach. W związku z tym, że jest zima Rąsia otrzymała śliczną różową rękawiczkę. Urządzenie wzbudza pewien niepokój wśród ludzi, którzy doznali zaszczytu bezpośredniego kontaktu z Rąsią, ale nie należy się dziwić - nie jesteśmy jeszcze przyzwyczajeni do robotów. I tak już całkiem poważnie - projekt jest nie tylko zabawą. Ma na celu konstrukcję asystenta osoby niepełnosprawnej sterowanego głosowo i poruszającego się samoczynnie. Również będą prace nad sterowaniem bionicznym. http://www.ksiega-cesarska.pl/443758128
  14. W ostatnim czasie zorientowałem się, że trochę życie by mi ułatwiło urządzenie, które pozwoliło by mi sterować odtwarzaczem multimediów odpalanym na urządzeniu (telefonie) z Androidem. Całość byłoby niewielkim pilotem podobnym do tych znanych ze standardowych słuchawek np. takich: Widzimy tam po prawej stronie pilot do sterowania głośnością oraz włączaniem i zatrzymywaniem odtwarzacza. Chciałbym zrobić coś podobnego w formie niewielkiej płytki z kilkoma przyciskami fizycznymi działającej najlepiej bezprzewodowo (komunikacja poprzez Bluetooth). Funkcje o których myślę to zwiększanie i zmniejszanie głośności (2 przyciski: [+] i [-]), pauza/start (1 przycisk) i jeśli się da oraz jeśli odtwarzacz to obsługuje to szybkie cofanie się lub przeskakiwanie o kilka sekund do przodu w zależności od odtwarzacza (2 przyciski: [>] i [<]). Słuchawki z obrazka sam posiadam i ten pilot działa z wieloma odtwarzaczami - aplikacja YouTube, TuneIn i wiele innych. Mnie interesuje podobna funkcjonalność tj. kompatybilność z wieloma odtwarzaczami. Moje pytania to: 1. Jakie elementy elektroniczne będą potrzebne do wykonania urządzenia. 2. Jakie oprogramowanie będzie potrzebne (łącznie z technologiami i językami programowania). 3. Jaki jest poziom skomplikowania projektu - do ogarnięcia dla początkującego, średnio zaawansowanego, eksperta itd. Będę wdzięczny za wszelką pomoc. Informacje ogólne jak działają tego typu piloty i w jaki sposób potrafią działać z różnymi odtwarzaczami też będą pomocne.
  15. Witam, Dopiero zaczynam moją przygodę z Arduino i mam zamiar zrealizować projekt systemu sterowania rozjazdami na mojej makiecie kolejowej. Każdy rozjazd ma być przesuwany za pomocą zamontowanego pod makietą serwomechanizmu SG90 (razem 10 serwomechanizmów). Każde serwo reagować ma na zmianę pozycji swojego przełącznika dwupozycyjnego - w momencie przełączenia, zmienić pozycję o około 30 stopni i w niej pozostać, przy zmianie pozycji przełącznika do pierwotnej - serwo również ma wrócić do pozycji pierwotnej. Dodatkowo, przy każdym przełączniku mają być dwie diody, zawsze świecić ma się jedna z nich w zależności od pozycji, w jakiej znajduje się dany serwomechanizm. Posiadam Arduino Uno, oraz Adafruit servo shield pozwalający na podłączenie do 16 serw. Stąd moje pytanie do bardziej doświadczonych kolegów: czy przy użyciu Adafruit mogę coś takiego zrobić? Czy w ogóle przełączniki dwupozycyjne z dźwignią są do zastosowania w tego typu projekcie? Uwagi dotyczące połączeń i zaprogramowania mile widziane, za każdą pomoc z góry dziękuję
  16. Witam Jestem bardziej niż początkującym w tematach mikrokontrolerów i elektroniki, więc proszę o wyrozumiałość. Od jakiegoś czasu planuje zrobić robota wykorzystującego czujnik ultradźwiękowy (między innymi) do mapowania terenu. Ale dopiero od paru dni zacząłem szperać i czytać jak to zrobić krok po kroku. Ha. Nawet znalazłem coś podobnego na forum https://forbot.pl/forum/topic/11454-prosty-ultradzwiekowy-skaner-otoczenia-2d-360-stopni/ Rozbiłem się już na początkowych pytaniach, ale w tym temacie chciałbym zapytać konkretnie o jeden z nich: 1. Mianowicie jeżeli mam już arduino (z kursu arduino, który do teraz zbierał u mnie kurz) to co mi jest potrzebne prócz serwa pracy ciągłej do zbudowania obrotowej wieżyczki na której będą zamontowane czujniki ultradźwiękowe? Rozumiem, że zależy od serwa, ale łączy się je przez shieldy, albo tworzy się jakieś układy, albo zasila niezależnie od arduino? Czy to przez pobór prądu? 2. Czy dostępne w różnych sklepach ( botland, kamami) shieldy do silników obsłużą też serwo? Czy muszę mieć konkretnie shield ze sterownikiem serw? 3. Czy jeżeli servo będzie miało duży pobór prądu to nie zakłóci w jakiś sposób pracy czujników? Wiem, że pytania banalne, ale może Panowie potraficie mnie choć naprowadzić na trop. Sam w miarę czasu i możliwości w chwilach wolnych od roboty staram się szperać po książkach i necie, ale temat niby prosty a jednak masę wiedzy należy sobie gdzieś ze szkoły przypomnieć, a większości przypadków od zera się uczyć.
  17. hej w ramach łączenia hobby z nauką chcę wykonać nastawny-wagowo dozownik kremu - jak wystarczy wiedzy i cierpliwości to z obrotową końcówka w celu uzyskania domowych i efektywnie wyglądających słodyczy: Niestety nie posiadam pomysłu na sposób dozowania - wiadomo w domowych warunkach robi się różne rzeczy więc dobrze by było gdyby dało się to używać zarówno jak i do puszystych(bita smietana) jak i do kremów szwedzkich (ciężkie kremy ubijane na bazie tłuszczu ) - myślę że pracę można by oprzeć na powtarzalnym pomiarze wagi albo objętości Czy ktoś kiedyś zajmował się dozowaniem z takim pomiarem, będę wdzięczna za wszystkie wskazówki i podpowiedzi
×
×
  • Utwórz nowe...