Skocz do zawartości

Program w C - sterowanie silnikiem


Pomocna odpowiedź

Cześć,

Po wstępnym zapoznaniu się z raspberry, postanowiłem napisać program do sterowania silnikiem w języku C.

Mój pomysł na realizację:

Wciśniecie klawisza "W" spowoduje uruchomienie silnika ( w przyszłości również drugiego silnika) i jazdę do przodu odpowiednio klawisz "S" jazda do tyłu. Klawisze "A", "D" jazdę w lewo oraz prawo. I tu pojawia się pytanie czy jestem w stanie coś takiego zaprogramować ?

Oczywiście nie chcę gotowego kodu tylko informacji czy warto pójść w tym kierunku, aby później sterować maliną z laptopa.

Link to post
Share on other sites

Źle sformułowałem pytanie.

Zaczynając od początku, posiadam 2 silniki którymi chcę sterować z laptopa na zasadzie jedź, stop, lewo, prawo. Zastanawiałem się nad stworzeniem strony www, aby klikać odpowiedni przycisk.

I teraz zastanawiam się od czego zacząć, w jakiś sposób musiałbym połączyć stronę www z napisanym programem w C ?

Prosiłbym o jakieś naprowadzenie co pozwoli mi wystartować z projektem, może jakiś poradnik.

Link to post
Share on other sites

Najpierw zastanów się dobrze czy na pewno język C to dobry wybór. To co piszesz da się zrobić, ale wymaga nieco pracy. Jeśli jednak zmienisz zdanie i wybierzesz np. Node.js lub pythona, cały skrypt zajmie kilka linijek.

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Najpierw zastanów się dobrze czy na pewno język C to dobry wybór. To co piszesz da się zrobić, ale wymaga nieco pracy. Jeśli jednak zmienisz zdanie i wybierzesz np. Node.js lub pythona, cały skrypt zajmie kilka linijek.

Nigdy nie miałem styczności z pythonem, więc muszę zapytać. Sterowanie silnikami robota oraz interfejs www jest możliwość zaprogramować w pythonie ?

Poza tym sporo pracy też jednak jest z podłączeniem elektrycznym takich silników -- bezpośrednio się nie da, musisz zastosować jakiś sterownik, albo sam zrobić mostek H.

Posiadam sterownik DRV8833, aktualnie mam malinę połączoną ze sterownikiem i z silnikami. Jak ustawię odpowiedni PIN w stan wysoki to silniki się kręcą. Teraz tylko muszę stworzyć program, aby móc jeździć robotem.

Link to post
Share on other sites

W książce do Maliny (wydawnictawa Helion) - Raspberry Pi. Przewodnik użytkownika. Wydanie III był przykład wykorzystania w pytonie. Myślę, że ta pozycja powinna być polecana dla każdego nowego użytkownika Maliny. Jeśli na malinie uruchomisz serwer WWW (a każdy linux ma możliwość jego zainstalowania np. Apache) i konfigurujesz uruchamianie skryptów Pythona w serwerze WWW. Tworzysz strony WWW i wykorzystując odpowiednią bibliotekę sterujesz maliną.

Jednak sam język jest interpretowany. Nie jest zbyt wydajny.

Jeśli nie chciałbyś koniecznie wykorzystywać stron WWW tylko wejścia GPIO Maliny przyłączając np przycisk spokojnie możesz wykorzystać język C.

Na początek warto:

1. poznać podstawy języka C,
2. tworzyć aplikacje w C na systemy Linux (możesz po zainstalowaniu środowiska np. Geany - robić to bezpośrednio na malinie)

3. Poznać biblioteki obsługi peryferiów maliny np. wiringPi (http://osworld.pl/start-z-raspberry-pi-3-wiring-pi-i-sterowanie-pinami-za-pomoca-polecenia-gpio/).

Link to post
Share on other sites

Jakikolwiek język skryptowy (m.in PHP, JavaScript, HTML, Matlab) jest zawsze "wolniejszy" od aplikacji binarnej utworzonej przez kompilator. Jest to spowodowane tym, że interpreter z każdą linijką kod "sprawdza poprawność" instrukcji. Do rozpoczęcia pracy to może być ale jako program sterujący użyłbym C lub C# po zainstalowaniu pakietu mono. Co oczywiście nie oznacza, że w językach tych nie da się fajnego napisać.

[ Dodano: 10-01-2017, 15:23 ]

Ale są książki wydane przez Heliona dotyczące Phytona i maliny Raspberry Pi. Przewodnik dla programistów Pythona, ISBN 9788324687091

Link to post
Share on other sites

O, to HTML jest językiem skryptowym? Myślałem, że to język znaczników (markup language) a nie programowania?

Poza tym pleciesz bzdury. Języki "skryptowe" są współcześnie tak samo kompilowane do kodu pośredniego jak języki "nieskryptowe" -- nikt już się nie bawi w interpretery i nikt nie "sprawdza poprawności instrukcji" z każdą linijką. Języki takie JavaScript, Python, czy Perl są kompilowane do kodu pośredniego i wykonywane na maszynie wirtualnej zupełnie tak samo, jak Java, czy polecany przez ciebie C#. Jedyna różnica polega na tym, że języki "skryptowe" dają się kompilować po kawałku, nie trzeba mieć całego programu, wobec czego możliwe jest zrobienie konsoli i bardzo wygodnego debugowania.

Mniejsza wydajność języków wysokiego poziomu (takich jak Python czy C#) w porównaniu do takiego "asemblera z nawiasami" jakim jest C czy C++ wynika z dwóch głównych powodów (oczywiście jest też cała masa mniejszych, można o tym książkę pisać). Po pierwsze, nie przejmują się one alokacjami pamięci, szczególnie przy pracy z tekstem -- zamiast modyfikować bufor w miejscu po prostu się robi jego kopię; a po drugie, ze względu na polimorfizm muszą sprawdzać jakiego to dokładnie typu jest dany obiekt przy każdej operacji na nim -- żeby móc zawołać właściwą wersję operatora czy metody.

Oczywiście, jak wszystkie generalizacje, to też nie jest do końca prawda, bo w praktyce programy napisane w językach wysokiego poziomu potrafią być dużo szybsze -- szczególnie jak są duże. Spowodowane jest to tym, że kompilator ma więcej informacji na temat tego, co tak naprawdę ma być zrobione i ma więcej możliwości optymalizacji (no i używasz bibliotek z wydajnymi algorytmami, które już ktoś napisał i zoptymalizował). Do tego możliwa jest optymalizacja w trakcie działania programu (JIT-em), która naprawdę potrafi podnieść wydajność długo-działających aplikacji. Tak że to też nie jest tak, że jak naskrobiesz coś w asemblerze, to będzie automatycznie szybsze.

Link to post
Share on other sites

Mój kolega zrobił z HTML-a gofrownice. A skoro dowolna przeglądarka interpretuje znaczniki i to jest językiem interpretowanym tak jak języki skryptowe.

Zrobiłem sporo aplikacji do budowy których wykorzystano ten język (oczywiście nie sam).

Widzę, że kolega assemblera nie odróżnia od C. Napisałeś coś na jakimś procku w asmeblerze?

Twój wywód na temat wydajności prowadzi do tego samego, ale początkujący chyba nic i tak nie zrozumieją.

Także oprócz czepiania się nazewnictwa może napisz coś ciekawego.

Zgadza się C# i Java przed użyciem tworzą kod pośredni, ale to ich standardowe użycie. Mają kompilatory JIT. Być może w innych językach utworzono kompilatory do jakiegoś kodu pośredniego ale to chyba skrzyżowania konia z motopompą. Można, ale po co. Trochę mniejsza wydajność ale bez przesady.

[ Dodano: 10-01-2017, 18:47 ]

Tak że to też nie jest tak, że jak naskrobiesz coś w asemblerze, to będzie automatycznie szybsze.

Jak niewłaściwe programujesz w asmeblerze (nieoptymalnie) i optymalnie np. C to może się tak okazać. Ale po co tak robić?

No może transformatę FFT w PHP napiszesz? Zajmowałeś się analizą sygnałów pomiarowych "on-line"?

[ Dodano: 10-01-2017, 19:43 ]

nikt już się nie bawi w interpretery i nikt nie "sprawdza poprawności instrukcji" z każdą linijką

Nie programuję naraz we wszystkich językach świata. Ale ściągnąłem manuala do najnowszej wersji PHP i co tam czytamy:

There are three main areas where PHP scripts are used. 
◦  Server-side scripting. This is the most traditional and main target field for PHP. You need three things to make this work: the PHP parser (CGI or server module), a web server and a web browser. You need to run the web server, with a connected PHP installation. You can access the PHP program output with a web browser, viewing the PHP page through the server. All these can run on your home machine if you are just experimenting with PHP programming. See the installation instructions section for more information.  
◦  Command line scripting. You can make a PHP script to run it without any server or browser. You only need the PHP parser to use it this way. This type of usage is ideal for scripts regularly executed using cron (on *nix or Linux) or Task Scheduler (on Windows). These scripts can also be used for simple text processing tasks. See the section about Command line usage of PHP for more information.  
◦  Writing desktop applications. PHP is probably not the very best language to create a desktop application with a graphical user interface, but if you know PHP very well, and would like to use some advanced PHP features in your client-side applications you can also use PHP-GTK to write such programs. You also have the ability to write cross-platform applications this way. PHP-GTK is an extension to PHP, not available in the main distribution. If you are interested in PHP-GTK, visit » its own website. 

Czy standardowo jest to nadal język skryptowy. Oczywiście istnieją narzędzia do tworzenia wersji skompilowanego kodu pośredniego, ale mogą być przydatne w celu podrasowania nieco wydajności istniejącego dużego projektu.

Podobnie Matlab umożliwia skompilowanie do p-kodu.

Jednak zarówno języki i te i te mają wady i zalety.

Link to post
Share on other sites

Wszystko można zrobić C, także napisać serwer www ale wtedy odkryjesz że potrzebujesz czegoś - jakiegoś języka skryptowego żeby móc łatwo pisać strony www... Wtedy wymyślisz jakiś skrypt który będzie interpretowany przez twój program w C. I staniesz się powtórnym wynalazcą koła, bo stworzysz od zera PHP lub podobne narzędzie tylko gorsze 😉😋 bo nie przetestowane i które nie przeszło podobnej drogi rozwoju, kolejnych iteracji, ulepszeń.

Jest jakaś przyczyna że takie technologie powstają i są rozwijane.

Link to post
Share on other sites

Greenspun's Tenth Rule of Programming: any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp.

Link to post
Share on other sites

Widzę, że macie bardzo ciekawę pomysły, ale nie rozumiem dlaczego chcecie powielać czyjąś pracę?? Używając RPi możecie przecież zastosować ROSa. Gotowy zestaw wysokopoziomowych funkcji napisanych przez programistów z prawdziwego zdarzenia, przy pomocy których jesteście w stanie zrobiź naprawdę ciekawe projekty (bardziej zaawansowane niż sterowanie silniczkami 😋 ).

http://www.ros.org/

Po dołączeniu do RPi jakiegoś sterowanika, do obsługi sensorków czy jak w tym przypadku zwykłych silniczków, mamy gotowy zestaw do pracy.

Są nawet takie sterowniki które są sprzedawane w zestawie z RPi w celu używania ROSa:

https://hackaday.io/project/21589-core2-a-computer-for-robots

Wydaje mi się, że warto zagłębić się w tajniki korzystania z narzędzia którym jest ROS, bo daje naprawdę mega duże możliwości 🙂

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.