Skocz do zawartości

maniackk

Użytkownicy
  • Zawartość

    11
  • Rejestracja

  • Ostatnio

Posty napisane przez maniackk

  1. Ok, będę zwracał uwagę na te napięcie. A do tego serwa mam Hextronik-a HXT900 i jakieś chińskie badziewie z kupionego KIT-u 9G. Mam do obu datasheet

    Tylko nie rozumiem czemu piszą w manualu, że ten Hextronic mam 90st. Jak kręce ośką to wyraźnie jest 180st. ? Podają od pozycji zerowej w jedną stronę czy co ?

    A jest metoda map do pinów w micropython. Po prostu pins.map(millig, -1023, 1023, 0, 180). Mam już wzór, ale fajnie, że jest.

    Na marginesie, fajny robocik 🙂 👍

     

  2. Zagadka rozwiązana.

    Tamte zakresy miałem dla zasilania Joystick-a napięciem 3,3V na karcie rozszerzeń, a pod servo zmieniłem napięcie na 5V no i zmieniły się wartości.

    Biorę się za serwa.

    Znasz może jakiś fajny tutorial do pobawienia się serwer na micro:bit w micropythonie. Znalazłem kilka na ich forum, ale nie do końca je rozumiem. Dla serwa też chciałbym napisać funkcję sprawdzającą pełny zakres jego pracy, ale nie bardzo wiem od czego zacząć.

  3. Dzięki za zwrócenie uwagi na te kilka rzeczy. Poprawiłem kod i faktycznie działa super i jest mały.

    Tylko nie rozumiem jednej rzeczy. Po modyfikacjach zmieniły się zakresy wartości zakresów obu osi i pozycja neutral.

    Wcześniej neutral miał wartości  X: 498 Y: 511 ; Zakres X 4 - 1023; Zakres Y 4 - 1023; 

    Teram mam neutral X: 400 Y: 409 ; Zakres X 4 - 824; Zakres Y 4 - 824;

    O co chodzi ? Nie kumam. Na dole dołączyłem zrzut ekranu.

    from microbit import *
    
    min_x = max_x = zero_x = int(pin1.read_analog())
    min_y = max_y = zero_y = int(pin0.read_analog())
    
    while True:
        
        while not pin2.read_digital():
    
            value = pin0.read_analog()
    
            if value > max_y:
                max_y = value
            elif value < min_y:
                min_y = value
             
            value = pin1.read_analog()
    
            if value > max_x:
                max_x = value
            elif value < min_x:
                min_x = value
                
        break
    
    print('min x: %s  max x: %s ' % (min_x, max_x))
    print('min y: %s  max y: %s ' % (min_y, max_y))
    print('zero x: %s  zero y: %s' % (zero_x, zero_y))
    sleep(100)

     

    po_zmianach.jpg

  4. Masz rację. Źle się wyraziłem, pętle służą tylko określeniu skrajnych wartości wychylenia pada i zapisaniu ich.

    Postarałem się opisać kod i trochę go poprawiłem, bo faktycznie nie ma sensu przypisywać w pętli za każdym razem zmiennym min_x i min_y wartości maksymalnej skoro mam tą wartość w zmiennych "zero". Dodałem też opisy żeby było wiadomo co miałem na myśli.

    Tak jak pisałem chciałbym używać tego kodu jako funkcji, w różnych moich projektach dla różnych joystick-ów. To ma być taka pseudo "kalibracja" systemu sterowania bez ręcznego sprawdzania w konsoli.

    Dlatego zależy mi na mały i jak najprostszym kodzie. Micro:bit niestety nie grzeszy ilością pamięci.

    Da się to uprościć twoim zdaniem ? Albo zrobić w inny sposób ?

    from microbit import *
    
    min_x = 0                          # deklaracja zmiennych przechowujących zakresy wartości odczytywanych na osi X joysticka
    max_x = 0                          
    min_y = 0                          # deklaracja zmiennych przechowujących zakresy wartości odczytywanych na osi Y joysticka
    max_y = 0
    
    zero_x = int(pin1.read_analog())   # zapisanie w zmiennej pozycji neutralnej osi X. Potencjomter jest podpięty do pin1
    zero_y = int(pin0.read_analog())   # zapisanie w zmiennej pozycji neutralnej osi Y. Potencjomter jest podpięty do pin0
    min_x = zero_x                     # wstępne ustalenie wartości zmiennej dla pętli szukającej stanu min osi X
    min_y = zero_y                     # wstępne ustalenie wartości zmiennej dla pętli szukającej stanu min osi y 
    
    while True:
        click = pin2.read_digital()        # zapisanie w zmiennej stanu nacisnięcia przycisku w joysticku. Switch jest podpięty do pin2
        while not(click):                  # wykonuj pętlę dopóki nie wciśnięto przycisku w joysticku.
    
            value = pin0.read_analog()     # zapis w zmiennej wartości odczytanej przy wychyleniu joysticka w dowolnym kierunku osi Y
    
            while value > zero_y and value > max_y:  # jeżeli joystick wychylono w górę ( zakres od zero_y do ??? ) i wartość
                max_y = value                        # zmiennej value jest większa od aktualnej wartości zapisanej max_y
                                                     # aktualizuj wartość zmiennej max_y
                                                     # w ten sposób ustalam maks. wartości osi Y dla podłączonego joysticka
    
            while value < zero_y and value < min_y:  # jeżeli joystick wychylono w dół ( zakres ??? do zero_y ) i wartość
                min_y = value                        # zmiennej value jest mniejsza od aktualnej wartości zapisanej min_y
                                                     # aktualizuj wartość zmiennej min_y
                                                     # w ten sposób ustalam maks. wartości osi Y dla podłączonego joysticka
    
            value = pin1.read_analog()               # zapis w zmiennej wartości odczytanej przy wychyleniu joysticka w dowolnym kierunku osi X
    
            while value > zero_x and value > max_x:  # analogicznie jak przy osi Y i zmiennej max_y
                max_x = value
                
    
            while value < zero_x and value < min_x:  # analogicznie jak przy osi Y i zmiennej min_y
                min_x = value
                
            click = pin2.read_digital()              # zapisanie w zmiennej stanu nacisnięcia przycisku w joysticku. Switch jest podpięty do pin2
        break                                        # przerwanie wykonywania pętli głównej
    
    print('min x: '+str(min_x)+' max x: '+str(max_x))      # wypisanie w konsoli pełnego zakresu wartości dla osi X i Y oraz pozycji neutral 
    print('min y: '+str(min_y)+' max y: '+str(max_y))
    print('zero x: '+str(zero_x)+' zero y: '+str(zero_y))
    sleep(100)

     

  5. To co robi na tą chwilę. Podpiąłem do micro:bit-a taki Joystick. Ale mam jeszcze kilka innych i każdy z nich ma inny zakres wartości w min. i maks. wychyleniu gałki w osi X i Y. Ten program ma być taką powiedzmy " kalibracją " posiadanych joystick-ów. Oś Y jest podpięta do pin0 w micro:bit, oś X do pin1 w microbit, a przycisk do pin2. Po uruchomieniu programu program określa pozycję "neutral" ( zero ) joystick-a i zapisuje w zmiennych zero_x i zero_y. Pierwsza i druga pętla wew. while, mam za zadanie, przy maksymalnym i minimalnym wychyleniu gałki w osi Y odczytać i zapisać min. i maks. wartość odczytaną na pin0 i zapisać w zmiennych min_y i max_y. Analogicznie z osią X trzecia i czwarta pętla ma to samo zadanie tylko w osi X i zapis w zmiennych max_x i min_x.

    W ten sposób otrzymane zakresy wartości wychyłu i pozycji neutral, chciałbym przełożyć na wartości pracy takiego serwo i przesłać je bezprzewodowo do drugiego microbita w celu wychylenia obu serw. Ma to sterować wskaźnikiem laserowym dla kota 🙂

    lub każdym innym mechanizmem który zbuduję na serwach.

    Mam to wykonywać podobną funkcję jak na załączonym filmiku ( zrobiłem przemieszczanie pixelem na ekranie ) tylko bardzo dokładnie.

  6. Witam,

    Uczę się dopiero programowania i chciałbym spytać kolegów z większym doświadczeniem o zdanie.

    Jestem na etapie odczytywania wartości analogowego pada w micropythonie na platformie micro:bit.

    Czy można skrócić ten kod ? Zależy mi na ustaleniu i zapisaniu ( do późniejszego użycia ) w tym kodzie pozycji zero joystick-a, oraz pozycji maks. i min. dla każdej z osi aby potem w programie prawidłowo pozycjonować serwo na podstawie ustalonych zakresów. 

    Jak zmapować poznane zakresy wychyłu pada na pełny zakres wychyłu serva ? Jest jakaś funkcja w micropythonie. Zaznaczam, że jeszcze nie szukałem. Na razie borykałem się z tym programem.

    Dziękuję wszystkim za ewentualne sugestie i pomoc. Jeżeli stosuję gdzieś złe praktyki programowania proszę o napisanie. Człowiek uczy się na błędach 🙂

    linie "print" i "sleep" w pętlach wew. są tylko dla kontroli co mam akurat w zmiennych.

     

    from microbit import *
    
    max_x = 0
    max_y = 0
    min_y = 0
    min_x = 0
    zero_y = int(pin0.read_analog())
    zero_x = int(pin1.read_analog())
    
    while True:
        click = pin2.read_digital()
        while not(click):
    
            value = pin0.read_analog()
    
            while value > zero_y and value > max_y:
                max_y = value
                print(str(max_y))
                sleep(100)
                min_y = max_y/2
    
            while value < zero_y and value < min_y:
                min_y = value
                print(str(min_y))
                sleep(100)
            
            value = pin1.read_analog()
            
            while value > zero_x and value > max_x:
                max_x = value
                print(str(max_x))
                sleep(100)
                min_x = max_x/2
    
            while value < zero_x and value < min_x:
                min_x = value
                print(str(min_x))
                sleep(100)
            click = pin2.read_digital()
        break
    
    print('min x: '+str(min_x)+' max x: '+str(max_x))
    print('min y: '+str(min_y)+' max y: '+str(max_y))
    print('zero x: '+str(zero_x)+' zero y: '+str(zero_y))
    sleep(100)
    

     

  7. Witam,

    trochę minęło od otwarcia tego postu. Znalazłem trochę materiałów i próbuję to ogarnąć.

    Jestem na etapie odczytywania wartości joystick-a analogowego w micropythonie.

    Mam prośbę o pomoc w znalezieniu gdzie popełniam błąd w kodzie. Zależy mi na ustaleniu w tym kodzie pozycji zero joystick-a, oraz pozycji maks. i min. dla każdej z osi aby potem w programie prawidłowo pozycjonować serwo na podstawie ustalonych zakresów. Górny zakres i zero ustala prawidłowo, ale dolny ustala na np. u mnie wartość 4, a po puszczeniu pada wartość znowu jest równa pozycji zero_y. Gdzie jest błąd w tym kodzie ?

    from microbit import *
    
    max_x = 0
    max_y = 0
    
    zero_y = int(pin0.read_analog())
    zero_x = int(pin1.read_analog())
    
    while True:
        
        while not(pin2.read_digital()):
            
            value = pin0.read_analog()
            
            while value > zero_y and value > max_y:
                max_y = value
                print(str(max_y))
                sleep(100)
                             
            min_y = max_y
            
            while value < zero_y and value < min_y:
                min_y = value
                print(str(value))
                sleep(100) 
            
            break
    
    print(str(max_y)+'  '+str(min_y))
    sleep(100)

     

  8. Cześć,

    mam pytanie do kolegów czy znacie jakiś kurs do micro:bit-a ale oparty, nie na javascript czy bloczkach makecode tylko o micropythona ?

    Kupiłem z ciekawości wersję micro:bit V2 i taki zestaw czujników na Alie... KS0361 i wyświetlacz LCD 1.8". Niestety jest do tego sporo artykułów w internecie, ale większość

    oparta o powyższe formy programowania. Biorąc  pod uwagę, że etap diod i buzzer-ów już mam za sobą i chciałbym poprogramować na tym w micropythonie, ale idzie opornie. Czy jest gdzieś w sieci dobrze przygotowana dokumentacja do micropythona na tą platformę ?

    Poza tym mam problem z uruchomieniem tego wyświetlacza LCD 1.8" z kontrolerem GC9106 link: link do produktu( nawet programując go blokowo, wg tej instrukcji )

    Mojej próby na tą chwilę spełzły na niczym. Jeżeli, któryś z kolegów mógłby podzielić się wiedzą, będę wdzięczny za pomoc.

    Oczywiście będę szukał dalej, jak uda mi się to poprawnie uruchomić to podzielę się wiedzą.

     

    Pozdrawiam wszystkich użytkowników forum.

     

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.