Skocz do zawartości

Pomocna odpowiedź

28 minut temu, ethanak napisał:

@Trekertu się nie zgodzę. Aby zaimplementować jakiś algorytm w jakimś języku należy znać ów język - bez tego będziemy skazani na domysły, bezsensowne próby i niekończące się pytania na forum typu "dlaczego nie działa funkcja if".

Oczywiście, bez żadnych podstaw nie ma co się zabierać za programowanie. Z opisu @kamdz wynika, że ma już program, który pozwala sterować robota z poziomu aplikacji na telefonie. Zakładam więc, że jest on już na takim poziomie, że wspomniany "if" nie jest dla niego problemem. Skoro był w stanie uruchomić silniki, czujniki i skomunikować się z telefonem to nie wiem czy książka do C jest niezbędna do implementacji PID'a. Oczywiście byłoby wskazane lepiej opanować język programowania, ale chodzi mi o to, że po przeczytaniu książki nagle nie okaże się, że istnieje magiczna funkcja pidLF(), która rozwiąże sprawę tworzenia regulatora do Line Followera. Prawdopodobnie kamdz zna już te elementy języka, które pozwolą na napisanie prostego PID'a - kwestia tylko zrozumienia tego regulatora.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Takie podstawy rozumiem i znam. Ale coś takiego jak chociażby wyżej wspomniana emulacja eeprom to dla mnie czarna magia. No i najważniejsze to właśnie:

7 minut temu, Treker napisał:

kwestia tylko zrozumienia tego regulatora

Ale z tym myślę, że sobie poradzę 😉

Udostępnij ten post


Link to post
Share on other sites

@TrekerNaprawdę uważasz, że wystarczy pobieżna znajomość języka, aby zrobić coś sensownego? Owszem - da się zrobić miganie ledami (nawet więcej niż jedną), da się skopiować jakiś kod (czasami nawet po takiej operacji działa) tyle że na tym się to skończy. Bo jak bardziej skkomplikowamy (tzn. mający więcej niż 7 linii) kod nie będzie chciał współpracować, trzecia leda nie będzie migać bo przykład był dla dwóch, a robot będzie świetnie jeździł po prostej - zaczną powstawać problemy związane zniezrozumieniem tego, co ten kod robi.

To tak jak z pierogami - dopóki nie zrozumiesz jak się robi dobre pieerogi będziesz jadł gnioty.

Kiedyś moim mottem w kursie C dla Amigowców było "wielu ludzi zna angielski, ale tylko jednemu gościowi udało się napisać Hamleta". I to będę powtarzać: jeśli chcesz coś napisać w jakomś języku, musisz go znać. Bez tego nawet nie zadasz pytania na forum - bo nie zrozumiesz odpowiedzi.

Udostępnij ten post


Link to post
Share on other sites

@ethanak cały czas chodzi mi głównie o to, że z książki o języku C @kamdz nie dowie się nic, co bezpośrednio rozwiąże jego problem implementacji PIDa (ani tej emulacji EEPROMa). Będzie mógł świetnie operować różnymi elementami języka programowania, wykorzystywać przedziwne konstrukcje, ale nadal nic nie zmieni tego, że PID w najprostszej formie to dodawanie i mnożenie. Rozumiem Twoje podejście i oczywiście jest ono słuszne - idealnie byłoby znać najpierw C, a później zabierać za mikrokontrolery. Uważam po prostu, że przebrnięcie na tym etapie przez "cegłę" o C zniechęci 99% osób. Jak się zaczyna to miło widzieć od razu efekty, a decydując się na czytanie książki o samym C należałoby odstawić tego robota w kąt na 3 miesiące i dla treningu pisać programy na PC. Nie istnieje książka, która uczyłaby C od podstaw na użytym tu STMie. Jestem zwolennikiem nauki przez praktykę i tego, że na początku można "ominąć" trochę materiału, aby uzyskać szybko efekty, które zachęcą do dalszej nauki. Podkreślam, że chodzi mi o taką sytuację jak tu - @kamdz poradził sobie z uruchomieniem robota, więc podstawy, podstaw zna. Chociaż i tak mam wrażenie, że komunikacja przez BT z telefonem i zdalne sterowanie jest bardziej zawiłe programistyczne od PIDa do LFa. Każdy ma swoją drogę nauki elektroniki i programowania, każdemu co innego będzie pasowało. Nie mówię, że moja metoda jest jedyna i słuszna - Twoją również popieram, biorę tylko pod uwagę to, że wiele osób zniechęca się, gdy musi od razu przyswajać tyle materiału "w teorii".

Udostępnij ten post


Link to post
Share on other sites
2 minuty temu, Treker napisał:

mam wrażenie, że komunikacja przez BT z telefonem i zdalne sterowanie jest bardziej zawiłe programistyczne od PIDa do LFa

To przesada chyba 😉 Jeden prosty CASE i aplikacja na BT ze sklepu PLAY

while (1)
 {

 HAL_UART_Receive(&uart, &value, 1, 100);

 switch (value)
 {
 case '0':
	 predkosc = 0;
 break;
 case '1':
	 predkosc = 100;
 break;
 case '2':
 predkosc = 200;
 break;
 case '3':
	 predkosc = 300;
 break;
 case '4':
	 predkosc = 400;
 break;
 case '5':
	 predkosc = 500;
 break;
 case '6':
	 predkosc = 600;
 break;
 case '7':
	 predkosc = 700;
 break;
 case '8':
	 predkosc = 800;
 break;
 case '9':
	 predkosc = 900;
 break;
 case '10':
	 predkosc = 1000;
 break;
 case 'F':
	 PWM(predkosc, predkosc);
 break;

 case 'B':
	 PWM(-predkosc, -predkosc);
 break;
 case 'R':
PWM(predkosc,-predkosc);
 break;
 case 'L':
	 PWM(-predkosc,predkosc);
	 break;

 case 'G':
	 PWM(0, predkosc);
 break;

 case 'I':
	 PWM(predkosc, 0);
 break;

 case 'H':
	 PWM(-predkosc, 0);
 break;

 case 'J':
	 PWM(0, -predkosc);
 break;

 case 'S':
	 PWM(0,0);
 break;
 case 'D':
	 PWM(0,0);
 break;
 case 'W':
	 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET); // zapalenie diody
break;
 case 'w':
	 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // zapalenie diody
break;

 }
 }
 }

 

Udostępnij ten post


Link to post
Share on other sites

To jak już się chwalisz kodem to pamiętaj o ładnym formatowaniu programów. Większość masz dobrze, ale np. w "case" nr 2 zabrakło Ci wcięcia itd. Jest jeszcze kilka takich drobiazgów, warto dbać o takie szczegóły od początku - jak się przyzwyczaisz to będzie "z górki" 😉

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
1 godzinę temu, Treker napisał:

Uważam po prostu, że przebrnięcie na tym etapie przez "cegłę" o C zniechęci 99% osób. J

Czyli raczej tej książki nie czytałeś, jeśli określiłeś ją mianem "cegła".

Uściślijmy:

1) Jeśli czytałeś - napisz uczciwie "czytałem, do niczego nie przydatna, ponieważ (tu wstaw argumenty)".

2) jeśli nie czytałeś:

a) przeczytaj i wróć do puntu 1)

b) nie czytaj, ale nie nadużywaj swej pozycji administratora twierdząc, że książka której nie znasz nie jest przydatna ponieważ Ty jej nie przeczytałeś i w związku z tym nie jest przydatna bo tak.

@kamdz zapoznaj się ze starym, prehistorycznym ale wciąż aktualnym programem "indent".

Edytowano przez ethanak

Udostępnij ten post


Link to post
Share on other sites
1 godzinę temu, Treker napisał:

Jestem zwolennikiem nauki przez praktykę i tego, że na początku można "ominąć" trochę materiału, aby uzyskać szybko efekty, które zachęcą do dalszej nauki.

Nie znam nic bardziej irytującego niż wzięcie się za zadanie dużo nad swój poziom i utknięcie przy tym na dłuższy czas.
Wiem, przerabiam to nadal: robię bota na discord
Ale z drugiej strony nie ma nic bardziej satysfakcjonującego niż skończenie albo nawet ruszenie i odpalenie jednej części tej funkcji z którą mieliśmy problemy.

Nie wiem czy jest to dobry sposób uczenia się. Natomiast wiem jak bardzo uruchomienie czegoś co nie działało przez 2 miesiące motywuje do dalszych prób.

Udostępnij ten post


Link to post
Share on other sites

@ethanak, nie odnosiłem się tutaj do żadnej konkretnej książki. Pisałem ogólnie o książkach dotyczących samego języka C. Po drugie, nie uważam, abym gdzieś tutaj "nadużywał pozycji administratora" - możesz wskazać o jakie zachowanie Ci chodzi?

Czasy się zmieniają. Kiedyś do zaprogramowania mikrokontrolera trzeba było studiować noty katalogowe i korzystać z rejestrów, a dziś nie trzeba. Jest Arduino, są gotowe biblioteki do różnych innych układów - po prostu można zacząć prościej i to od razu w praktyce. Do tego w razie problemu większość sytuacji może rozwiązać jedno zapytanie wpisane do Google. Gdyby tak nie było to całe Arduino* nie zyskałoby takiej popularności. Zdecydowana większość osób, która sięga po tę platformę nie ma za sobą książek o podstawach C.

*tak, wiem, że ten temat nie jest o Arduino, ale podaję go jako analogię, bo HAL też jest taką "ułatwiającą" nakładką na STMy.

Napisałem wcześniej kilka razy, że rozumiem Twoje podejście, nawet poparłem taką metodę, ale wyraziłem też swoje zdanie i pokazałem inną drogę nauki. Jeśli poczułeś się tym jakoś urażony to przepraszam - nie taki był mój zamiar. Po prostu wyraziłem swoją opinię, jeśli się z nią nie zgadzasz to w porządku, absolutnie tego nie wymagam. Forum służy do dyskutowania i każdy może wyrażać swoją opinię. Nie oczekuj tylko od innych, że muszą zgadzać się z Twoją metodą.

7 minut temu, Aiden_Pearce napisał:

Nie znam nic bardziej irytującego niż wzięcie się za zadanie dużo nad swój poziom i utknięcie przy tym na dłuższy czas.

Kwestia tego jak trudne jest to zadanie i co jest w nim najtrudniejsze (zrozumienie tematu, algorytmika, poznanie frameworka itd).

9 minut temu, Aiden_Pearce napisał:

Ale z drugiej strony nie ma nic bardziej satysfakcjonującego niż skończenie albo nawet ruszenie i odpalenie jednej części tej funkcji z którą mieliśmy problemy.

No i właśnie o to chodzi, a wszelkie próby też są cenną nauką. Przy okazji można się zorientować czego się nie wie i uczyć się tego, aby zaraz wykorzystać daną umiejętność w praktyce 😉

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

kamdz tak z ciekawości, w której jesteś klasie ? Jeśli będziesz kiedyś chciał stworzyć bardziej zaawansowaną konstrukcje (nie dla celów edukacyjnych) warto pomyśleć o kwestii aerodynamiki i wagi robota, płytkę drukowaną można zamówić z Chin za małe pieniądze, a ze schematów dostępnych na forum stworzyć np. projekt w Autodesk Eagle lub innym programie. Generalnie forum to kopalnia wiedzy na ten temat, gratuluje konstrukcji !!! Jeśli się nie mylę masz moduł BT na interfejsie UART, więc jakbyś chciał mogę kiedyś pomóc w wolnej chwili z komunikacją ROBOT <-> komputer, którą w pełni zrealizowałem w oparciu o stm32f103 i  moduł HC - 05, który jest chyba podobny. Pozdrawiam !!!

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

1 LO

Wiem, że warto o tym pomyśleć. Ale do tego muszę się jeszcze nauczyć eagle, Bo narazie to dla mnie magia 😉 zresztą w jednym z linków w pierwszym poście masz temat w którym się z nim bawiłem 🙂

Co do BT to poradziłem sobie z sterowaniem robota przez BT to poradzę sobie i z wysyłaniem kilku komend start stop 🙂 zreszta część kodu która odpowiada za sterowanie masz wyżej. Chyba nic trudnego w tym nie ma... Przynajmniej na tym etapie na którym jestem, bo jak próbowałem odebrać jakieś dłuższe słowa, to mi tylko 3 pierwsze litery odbierało... A co do hc05 to to praktycznie to samo, mój ma dodatkowo konwenter napięć ale to w sumie w stm32 nie ważne 😉

A jeszcze co do tej książki, to jaką polecacie do nauki? Tzn taką aktualną? Bo może miałabym możliwość ją gdzieś wypożyczyć;)

Udostępnij ten post


Link to post
Share on other sites

Witam ponownie.

MDF kupione, trasa zrobiona i pierwsze testy za mną 🙂 Wrzucam filmik z testów. Co do trasy to wrzucam foto w załącznikach. W miejscu, w którym jest mniejsze czerwone kółko, trasa była pod takim kątem jak zielona linia. Wtedy robot w ogóle nie wykrywał, że ma zakręt i jechał prosto aż znowu złapał trasę. To trochę dziwne, bo w kodzie jest liczona średnia ze wszystkich czujników, więc powinien choć trochę odbić w lewo... W miejscu gdzie jest duże czerwone kółko... no to na filmie widać jak się zachowuje. To norma, czy błąd programu? może robię za ciasne zakręty na takiego dużego robota? Oczywiście PIDa nawet nie zacząłem jeszcze regulować, a prędkość mam zamiar zwiększać 🙂 to takie testowe przejazdy na razie. Liczę na opinie i sugestie jak można jeszcze usprawnić robota, co można poprawić 🙂

 

20181121_161911.jpg

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Fajnie, że są postępy 😉

9 minut temu, kamdz napisał:

To trochę dziwne, bo w kodzie jest liczona średnia ze wszystkich czujników, więc powinien choć trochę odbić w lewo...

Kwestia oprogramowania. Możliwe, że przy takiej trasie (kąt ostry) robot widział ostatnio linię właśnie pod czujnikiem środkowym i stąd taki efekt.

10 minut temu, kamdz napisał:

To norma, czy błąd programu?

Kwestia ustawień 🙂

11 minut temu, kamdz napisał:

Oczywiście PIDa nawet nie zacząłem jeszcze regulować, a prędkość mam zamiar zwiększać 🙂

Oczywiście docelowo warto zwiększać prędkość, ale zastanów się czy dla testów nie lepiej jest ją zmniejszyć. Będziesz mógł wtedy łatwiej zauważyć co się dzieje z robotem i jak reaguje on na zmiany. Pamiętaj, że lepiej jechać powoli i dokładnie, niż szybko i tracić czas na błędne machanie czujnikami w lewo i prawo (przez brak stabilizacji robota).

Udostępnij ten post


Link to post
Share on other sites
30 minut temu, Treker napisał:

Kwestia ustawień 🙂

Tak myślałem 🙂

30 minut temu, Treker napisał:

zastanów się czy dla testów nie lepiej jest ją zmniejszyć

No ale chyba robot inaczej reaguje na tą samą trasę z różnymi prędkościami... Czyli jak nawet go ustawię idealnie na małych prędkościach, to na większych już będzie miał większy bezwład i będzie zupełnie inaczej jeździł... Choć oczywiście na sam początek wstępnego ustawiania PIDa pewnie lepiej wolniej...

Udostępnij ten post


Link to post
Share on other sites
24 minuty temu, kamdz napisał:

Czyli jak nawet go ustawię idealnie na małych prędkościach, to na większych już będzie miał większy bezwład i będzie zupełnie inaczej jeździł...

Oczywiście, że tak, ale:

  1. Sporo nauczysz się podczas regulacji PIDa przy niskich prędkościach. Łatwiej zauważysz efekty swoich zmian w ustawieniach, więc będziesz miał lepsze wyczucie.
  2. Łatwiej z wolnego i dobrze wyregulowanego robota dojść do szybkiej i stabilnej konstrukcji, niż ze średniego robota dojść na szczyt 😉
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »

×