Skocz do zawartości

draqo

Użytkownicy
  • Zawartość

    55
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O draqo

  • Ranga
    4/10

Informacje

  • Płeć
    Mężczyzna
  1. Dochodzi jeszcze: 1. Sterownik serw Adafruit 16-kanałowy, 12-bitowy PWM I2C (link) - jedynie polutowany, sprawdzony czy działa - 60zł 2. FT232RL FTDI232 USB to TTL Serial Adapter (jak na zdjęciu) - 15zł
  2. Coś takiego http://allegro.pl/konwerter-ft232-usb-uart-3-3v-5v-arduino-avr-pic-i5397707193.html (Konwerter FT232 USB UART 3.3V 5V Arduino AVR PIC, ROBOHOBBY) ? __________ Komentarz dodany przez: Sabre _allegro
  3. Chciałbym połączyć komputer PC z Raspberry po UART. Są gotowe kable USB ale szukam tańszego rozwiązania. Wiem, że logika RPI pracuje na 3,3V i w tym kablu jest konwerter. Znalazłem coś takiego: http://nettigo.pl/products/konwerter-poziomow-dwukierunkowy Nada się to? Kabli USB w domu mam pełno i chciałbym to samemu zrobić, tylko nie jestem pewien czy dobrze myślę z połączeniem. U góry podpiąć kabel USB, GND - masa, HV - 5v (czerwony przwod), HV1 - biały przwod, HV2 - zielony przewod. Dół płytki: GND - masa z RPI, LV - 3,3V z RPI, LV1 - TXD, LV2 - RXD dobrze?
  4. Płyta będzie lekka. Zależy mi na tym aby ruch był płynny i oczywiście prędkość jest ważna. Chciałbym, aby nie było żadnego szarpania.
  5. A coś takiego: http://abc-rc.pl/MG-90 http://abc-rc.pl/MG-90S Jest jeszcze MG-90D - to jest pewnie cyfrowe. Ktore będzie odpowiednie do mojego projektu?
  6. Zależy co dla Ciebie jest tania. Mam do sprzedania redox alpha v2 za 100zł.
  7. Ktore serwo będzie lepszy wyborem analogowe czy cyfrowe?
  8. Dane techniczne: Nominalne napięcie: 6V Wymiary: 25D x 50L mm Masa: 80g Średnica wału: 4mm Przekładnia 34:1 Obroty na biegu jałowym przy zasilaniu 6V: 260rpm Prąd biegu jałowego (6V): 350mA Prąd max.: 5.5 A Moment obrotowy: 4 kg*cm To są dokładnie te silniki:
  9. To się nada? http://botland.com.pl/serwa-powerhd/2308-serwo-powerhd-hd-1705mg-medium.html
  10. Planuję zrobić coś takiego: Chcę uzyskiwac pozcyję piłki za pomoca panela rezystancyjnego. Można gdzieś coś takiego dostać w PL czy szukać tylko na ebayu? Potrzebuję w miarę duzy od 12 do 15 cali. Znalazłem do tej pory coś takiego: http://www.ebay.pl/itm/12-1-inch-4-wire-Resistive-Touch-Panel-12-1-Digitizer-touch-screen-glass-H04-YD-/181681765177?pt=LH_DefaultDomain_0&hash=item2a4d13bb39 http://www.ebay.pl/itm/12-1-inch-5-Wire-Resistive-Touch-Screen-Panel-/220948304015?pt=LH_DefaultDomain_0&hash=item33718b908f Całość chcę sterować raspberry.
  11. Planuję zrobić cos takiego jak tutaj: Jakie serwa będą odpowiednie? Tak aby były dosyć dobre, nie chcę brać najtańszych. __________ Komentarz dodany przez: Treker
  12. Po obronie pracy inżynierskiej zostało mi parę rzeczy. Nie są mi potrzebne a szkoda żeby leżały. 1. Akumulator LiPol 2200mAh 3S 20-30C Turnigy (link) x 2 - 100zł 2. DC Motor Driver 2×15A - Lite (link) - 170zł 3. Redox ALPHA v2 Ładowarka + zasilacz (link) - 110zł 4. Silnik 25Dx50 34:1 x 4 (link) - 100zł Ceny do negocjacji. [ Dodano: 09-06-2015, 12:23 ] Całość oddam za 450zł z wysylką.
  13. Postanowiłem zrealizować pomysł 2. Lecz mam problem z regulatorem PID. Poniżej kod. #!/usr/bin/python import time import RPi.GPIO as GPIO from PID_reg import PID import math # ----------------------- # Ustawienia silnikow # ----------------------- GPIO.setmode(GPIO.BOARD) # Lewy czujnik TRIGGER_LEWY = 12 ECHO_LEWY = 15 # Prawy czujnik TRIGGER_PRAWY = 5 ECHO_PRAWY = 3 GPIO.setup(TRIGGER_LEWY,GPIO.OUT) GPIO.setup(ECHO_LEWY,GPIO.IN) GPIO.setup(TRIGGER_PRAWY,GPIO.OUT) GPIO.setup(ECHO_PRAWY,GPIO.IN) GPIO.output(TRIGGER_LEWY, False) GPIO.output(TRIGGER_PRAWY, False) # Prawa strona M1_PWM = 26 M1_EN = 24 # Lewa strona M2_PWM = 23 M2_EN = 21 # Prawa strona ustawienia jako output GPIO.setup(M1_PWM,GPIO.OUT) GPIO.setup(M1_EN,GPIO.OUT) # Lewa strona ustawienia jako output GPIO.setup(M2_PWM,GPIO.OUT) GPIO.setup(M2_EN,GPIO.OUT) # Prawa strona ustawienie stanow niskich GPIO.output(M1_PWM, False) GPIO.output(M1_EN, True) # True - do przodu, False - do tylu # Lewa strona ustawienie stanow niskich GPIO.output(M2_PWM, False) GPIO.output(M2_EN, False) # False - do przodu, True - do tylu # Ustawienie PWM dla prawej strony PRAWA_PWM = GPIO.PWM(26,50) # Ustawienie PWM dla lewej strony LEWA_PWM = GPIO.PWM(23,50) # Poczatkowe ustawienia PWM silnikow PRAWA_PWM.start(0) LEWA_PWM.start(0) def prawy(): GPIO.output(TRIGGER_PRAWY, True) time.sleep(0.00001) GPIO.output(TRIGGER_PRAWY, False) start = time.time() while GPIO.input(ECHO_PRAWY)==0: start = time.time() while GPIO.input(ECHO_PRAWY)==1: stop = time.time() elapsed = stop-start distance = (elapsed * 34300)/2 return distance def lewy(): GPIO.output(TRIGGER_LEWY, True) time.sleep(0.00001) GPIO.output(TRIGGER_LEWY, False) start = time.time() while GPIO.input(ECHO_LEWY)==0: start = time.time() while GPIO.input(ECHO_LEWY)==1: stop = time.time() elapsed = stop-start distance = (elapsed * 34300)/2 return distance def lewa_average(): distance1=lewy() time.sleep(0.01) distance2=lewy() time.sleep(0.01) distance3=lewy() distance = distance1 + distance2 + distance3 distance = distance / 3 return distance def prawa_average(): distance1=prawy() time.sleep(0.01) distance2=prawy() time.sleep(0.01) distance3=prawy() distance = distance1 + distance2 + distance3 distance = distance / 3 return distance print "Ultrasonic Measurement" suma_bledow = 0 poprzedni_blad = 0 blad = 0 Kp = 0.005 Kd = 0.0005 Ki = 0.005 max_predkosc = 8; blad = lewa_average() - ((lewa_average() + prawa_average())/2) try: p=PID(0.1,0.4,0.2) p.setPoint(0) while True: blad = lewa_average() - ((lewa_average() + prawa_average())/2) pid = p.update(blad) # poprzedni_blad = blad # suma_bledow = suma_bledow + blad # if (pid > 15): # pid = 10 # if (pid <-15): # pid = -10 # if(pid<0): # LEWA_PWM.ChangeDutyCycle(max_predkosc) # PRAWA_PWM.ChangeDutyCycle(max_predkosc + abs(pid)) # else : # LEWA_PWM.ChangeDutyCycle(max_predkosc + abs(pid)) # PRAWA_PWM.ChangeDutyCycle(max_predkosc) # if(prawy() > 50): # LEWA_PWM.ChangeDutyCycle(0) # PRAWA_PWM.ChangeDutyCycle(0) # korekta = (Kp*blad) + (Kd*(blad-poprzedni_blad)) + (Ki*suma_bledow) # if (pid > max_predkosc): # pid = max_predkosc # if (pid < max_predkosc): # pid = -max_predkosc # if (pid > 0 and pid <max_predkosc): # pid = 0 # pid = math.ceil(pid) # if (pid<0): # GPIO.output(M1_EN, True) # GPIO.output(M2_EN, False) # print "przod" # LEWA_PWM.ChangeDutyCycle(abs(pid)) # PRAWA_PWM.ChangeDutyCycle(abs(pid)) # else: # GPIO.output(M1_EN, False) # GPIO.output(M2_EN, True) # print "tyl" # LEWA_PWM.ChangeDutyCycle(abs(pid)) # PRAWA_PWM.ChangeDutyCycle(abs(pid)) print "Lewy: %.f" % lewy() print "Prawy: %.f" % prawy() print "Blad: %.f" % blad print "Korekta: %.f" % pid time.sleep(0.5) except KeyboardInterrupt: GPIO.cleanup() Problem jest taki, że robot nie stabilizuje swojej pozycji na środku labiryntu. Wartość wyliczana z regulatora przy błędzie 0 narasta i powoduje, że robot skręca. Poniżej przykład: Korekta to wartość z regulatora. Narasta ona od 0 do 4. A przy błędzie = 0 korekta powinna wynosić 0.
  14. Mam dwa pomysły: 1. Czujnik na serwie i robić kilka pomiarów w zakresie od 0 do 180 stopni. Wybrać największą odległość i obliczyć kąt pomiędzy prostą przechodząca przez ten punkt i punkt robota i środek robota. Lepiej wyjasnione na rysunku. I myślalem, zeby zastosować PID i wykorzystać tą wartość kąta, aby największa odległość była zawsze przed robotem. 2. Dwa czujniki - jeden z lewej strony, drugi z prawej. Zastosować PID tak, aby robota trzymał równą odległość od ścian. Wydaje mi się, że 2 sposob bedzie lepszy. Jakie jest Wasze zdanie?
×
×
  • Utwórz nowe...