Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Kurs Arduino - #5 - PWM, serwomechanizmy, biblioteki

Autor Wiadomość
dejmieno 



Posty: 32
Otrzymał 2 piw(a)
Programuję w:
Java, C
Wysłany: 04-06-2017, 23:37   

Ciekawi mnie jeszcze jak później wygląda tworzenie projektów w oparciu o arduino. Teraz na etapie nauki wszystko jest fajnie, ale później jeśli będzie się chciało stworzyć kilka projektów to co? Koszt klona arudino to około 40 zł, a oryginalne 90 zł, więc sporo jeśli chciałoby się zrobić jakieś małe projekty. Więc jak to zazwyczaj wygląda? Czy po prostu używa się arduino jako platformy prototypowej i po skończonej pracy kompiluje się ino do hex i wgrywa na osobny mikrokontroler?
Polecany artykuł z FORBOT.PL:
Pułapki języka C

W poprzednim artykule postawiłem tezę, że dobry programista powinien wiedzieć jakie aspekty języka są niebezpi... Czytaj całość


Postaw piwo autorowi tego posta
 
 
marek1707 



Posty: 3988
Pomógł: 429 razy
Otrzymał 578 piw(a)
Skąd: WAW
Programuję w:
C, asm
Wysłany: 05-06-2017, 17:37   

Arduino to zestaw sprzetowo-programowy przeznaczony moim zdaniem raczej do (samo)edukacji. W podstawowej formie (UNO) masz bardzo ubogo wyposażoną płytkę z portem szeregowym UART/USB i stabilizatorem napięcia. Jej jedyną zaletą jest to, że pasuje do wielu shieldów i ma wgrany bootloader umożliwiający ładowanie kodu jednym przyciskiem z IDE. To samo jednak możesz sobie zrobić samemu za ułamek tej ceny albo kupić płytkę mniejszą, np. Mini lub nawet MiniPRO. Ceny tego w Polsce zaczynają się od 10zł a z daleka to pewnie możesz w tej cenie kupić dwie lub trzy. Musisz wtedy wlutować sobie załącza lub dospawać trochę kabelków, ale układ jest o wiele mniejszy no i tańszy. W wielu projektach wielkość "szkolnego" UNO wręcz przeszkadza - dałoby się je zrobić o wiele mniejszymi i zgrabniejszymi.
Możesz też po prostu kupować gołe procesory po kilka złotych, wgrywać im bootloader (potrzebny programator, ale to jednorazowy wydatek z 25zł) i montować na swoich własnych płytkach.
System Arduino ma jednak swoje ograniczenia (choć coraz mniejsze z uwagi na rozrastające się biblioteki i coraz nowsze platformy) i może też nie ma sensu w nim utykać na dłużej. Na początku można budować mosty z makaronu i plasteliny, ale przecież prawdziwe konstrukcje robi się z czegoś innego. Z biegiem czasu Twoje projekty będą się w naturalny sposób rozrastać bo będziesz wiedział coraz więcej i coraz szersze programy będziesz ogarniał. Prawdopodobnie sam w pewnym momencie zauważysz, że w Arduino robi się chwilami ciasnawo (tak w sprzęcie jak i w IDE) i zaczniesz szukać większych maszynek i bardziej rozbudowanych środowisk. Na razie rozejrzyj się za tańszymi płytkami:
http://allegro.pl/promocja-na-modul-arduino-pro-mini-z-atmega328-avr-i5574675358.html
Kupujesz takich kilka za cenę jednego UNO, podłączasz to przez dodatkowy konwerter USB/UART (musisz mieć jeden do wszystkich płytek, <5zł) do PC, ustawiasz w IDE płytkę Mini PRO i jedziesz.

Postaw piwo autorowi tego posta
 
 
dejmieno 



Posty: 32
Otrzymał 2 piw(a)
Programuję w:
Java, C
Wysłany: 06-06-2017, 08:34   

Cytat:
Możesz też po prostu kupować gołe procesory po kilka złotych, wgrywać im bootloader (potrzebny programator, ale to jednorazowy wydatek z 25zł) i montować na swoich własnych płytkach.


Właśnie posiadam USBasp bo używałem go do programowania "czystego avr". I chyba to będzie najlepsze rozwiązanie, czyli wgrywać im bootloadera, pracować na arduino a później przenieść na kontroler avr. Rozumiem, że najlepsze będą do tego kontrolery Atmega328 ponieważ takie same znajdują się w Arduino UNO. Aktualnie posiadam Atmega8, ale te chyba niezbyt się nadają. A tak na marginesie to jaki obecnie na rynku jest najmocniejszy model atmegi?

Cytat:
System Arduino ma jednak swoje ograniczenia (choć coraz mniejsze z uwagi na rozrastające się biblioteki i coraz nowsze platformy) i może też nie ma sensu w nim utykać na dłużej. Na początku można budować mosty z makaronu i plasteliny, ale przecież prawdziwe konstrukcje robi się z czegoś innego. Z biegiem czasu Twoje projekty będą się w naturalny sposób rozrastać bo będziesz wiedział coraz więcej i coraz szersze programy będziesz ogarniał.


A możesz proszę Cię rozwinąć bardziej temat? Czyli rozumiem, że z biegiem czasu zazwyczaj trzeba się przesiąść na czysty AVR bez arduino, czy masz namyśli jakąś inną platformę.

Postaw piwo autorowi tego posta
 
 
marek1707 



Posty: 3988
Pomógł: 429 razy
Otrzymał 578 piw(a)
Skąd: WAW
Programuję w:
C, asm
Wysłany: 06-06-2017, 10:35   

Drążenie tego tematu może doprowadzić do długiej dyskusji a wątek o serwach chyba nie jest dobrym na to miejscem. W każdym razie wgrywanie bootloadera jest oczywiście fajnym rozwiązaniem bo tanio robisz sobie kolejne, własne Arduina które jedyne co, to muszą być wyposażone w jakieś połączenie UARTa do PC. Czy to przez konwerter z USB czy to (w przypadku starszych komputerów) przez konwerter z portu COM/RS232. Zauważ jednak, że skoro masz już gniazdko ISP do podłączenia programatora, to przecież możesz tą drogą wprost wgrywać kod wygenerowany przez kompilator. Przecież właśnie ten kod jest wysyłany przez program AVRdude z PC po łączu szeregowym do bootloadera. Wystarczy przekonfigurować AVRdude na korzystanie z USBasp (a obecna wersja obsługuje dziesiątki typów programatorów i bootloaderów) i zamiast portu COM z zawieszonym na końcu bootloaderem Arduino będzie poszukiwał i działał z programatorem.

W sprawie procesorów - może zajrzyj po prostu na stronę producenta i wybierz sobie co wg Ciebie jest największe i pod jakim względem:
http://www.atmel.com/
Masz tam wprost link do "Atmel MCU Selector" as tam kolumnę "CPU". Odznacz wszystkie oprócz 8-bit AVR a i tak zostanie ponad 200 układów. Przejrzyj pod kątem wielkości pamięci, liczby i rodzaju peryferiów, obudowy itd..
Jest oczywiste, że małe procesory mogą raczej mniej więc ich otoczenie nie będzie rozbudowywane tak jak dużych, bo one tak dużej liczby skomplikowanych bloków nie uciągną. Dlatego np. nie ma małych AVRów z interfejsem ethernet (LAN), nie ma interfejsów do wyświetlaczy/ekranów LCD itp. Za to mają dużo timerów/PWM, UARTów, SPI, I2C itp. Z powodu ograniczeń wewnętrznego RAMu nie zrobisz wielkich aplikacji obrabiających na bieżąco duże ilości danych. Dospawanie karty SD czy zewnętrznych FLASHów to raczej sposoby na dłuższe przechowywanie zebranych danych/logów itp. AVR są raczej procesorkami do sterowania, obsługi czujników, prostych napędów i zarządzania raczej niewielkimi urządzeniami. Odpadają raczej bardziej wyrafinowane algorytmy (synteza czy rozpoznawanie mowy, analiza obrazów) a z powodu słabego arytmometru (8-bitów) także algorytmy wymagające dużo szybkiej matematyki. Możesz oczywiście na tym zrobić kalkulator naukowy liczący regersje, całki i rysujący wykresy na prostym LCD, ale już ciężko będzie zrobić sterownik silnika BLDC liczący na bieżąco wektory pola magnetycznego w stojanie i wirniku. Za to sterownik wielu serw, odczyt mnóstwa czujników, stacje pogodowe itp układy pomiarowe, sterowanie diodkami LED itp oświetleniem, akwariami, wiatraczkami, zasilaczami, małymi robotami itp mechanizmami, kodowanie/dekodowanie sygnałów (np. zdalne sterowanie) zrobisz bez problemów.

Z tych większych układów bardzo popularnym jest mega128 (na tym jest Arduino Mega), ale masz jeszcze mega1280 w obudowie 100-pinowej i jej nowsza siostra mega1284 z 16K RAMu.

Jakby naturalnym przedłużeniem linii mega jest (a przynajmniej miała być w założeniach Atmela) xmega. Nowsza technologia umożliwiła podkręcenie zegara do 32MHz i znaczną rozbudowę peryferiów przy nawet niższych niż mega cenach jednostkowych, ale seria ta jakoś nie zdobyła wielkiej popularności. Mi się podoba, zrobiłem na tym parę rzeczy i działają :)
http://www.atmel.com/products/microcontrollers/avr/avr_xmega.aspx

No a dalej to już 32-bitowe ARMy produkowane w setkach typów, wciskające się siłą do płytek Arduino i obsługiwane natywnie przez to IDE: Arduino Teensy, DUE, Zero...

Postaw piwo autorowi tego posta
 
 
konrad98ft 



Posty: 1
Skąd: Gidle
Wysłany: 20-06-2017, 20:29   

Witam!
Mam problem potrzebuje zamienić zmienną typu String na int jednak instrukcja znaleziona w internecie { zmienna_int=int(zmienna_string); } nie działa
Alternatywnym rozwiązaniem byłoby przesłanie zmiennej typu int z komputera przez UART

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7601
Pomógł: 114 razy
Otrzymał 491 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 20-06-2017, 21:04   

konrad98ft, witam na forum :) Próbowałeś korzystać z mechanizmów wbudowanych w Arduino? Jest do tego gotowa "funkcja": https://www.arduino.cc/en/Tutorial/StringToIntExample


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
MrSnowman24688 



Posty: 4
Wysłany: 23-06-2017, 21:53   

Witam!
zad.5.2
2 pytanka:
-Dlaczego występuje mignięcie diodą?
-Dlaczego dioda nie gaśnie całkowicie?

Kod programu: Zaznacz cały
int wyp= 0;  //wypełnienie
int zmiana = 2;
 
void setup() {
 pinMode(3, OUTPUT);
 Serial.begin(9600);
}
 
void loop() {

 
while (wyp < 255) {     //pętla rozświecająca diodę
   analogWrite(3, wyp);
   wyp = wyp + zmiana;
   delay(25);
   Serial.println(wyp);
  }

                                                                        //występuje szybkie mignięcie diodą


while(wyp>0){             //pętla gasząca diodę
   analogWrite(3, wyp);   
    wyp=wyp-zmiana;
    delay(25);
    Serial.println(wyp);
  }
  Serial.println(wyp);                          // pokazuje 0, lecz dioda nadal minimalnie się świeci
  delay(3000); 
  Serial.println(wyp);                         // pokazuje 0, lecz dioda nadal minimalnie się świeci
 }

Ostatnio zmieniony przez MrSnowman24688 23-06-2017, 21:54, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7601
Pomógł: 114 razy
Otrzymał 491 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 26-06-2017, 13:06   

MrSnowman24688, mignięcie diodą występuje, ponieważ w Twoim programie przekraczasz na chwilę zakres PWM.
W monitorze portu szeregowego powinieneś znaleźć fragment:
Kod programu: Zaznacz cały
250
252
254
256
254
252
250


Jak widzisz, przez chwile podajesz na wejście funkcji wartość 256, co przekracza zakres PWM (do 255). Zmienna się przepełnia i w efekcie ustawiasz wypełnienie równe 0. Powoduje to przygaszenie diody.

Jeśli chodzi o "Dlaczego dioda nie gaśnie całkowicie?", to dioda gaśnie. Jednak na bardzo krótko, dlatego tego nie zauważasz. Zwróć uwagę, że Twój program wyłącza diodę tylko na kilkanaście milisekund. Uruchom program, w którym będzie tylko analogWrite(3, 0); dioda na pewno będzie wyłączona ;)


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
  
Postaw piwo autorowi tego posta
 
 
Dolin 



Posty: 2
Wysłany: 11-07-2017, 22:54   Zasilanie

Nie posiadam przejściówki jack do arduino, natomiast mam pytanie, czy posiadając koszyczek z bateriami których napięcie wynosi około 5,2V i podpiąłbym je bez stabilizatora by zasilić serwo, nie uszkodzi to mikrokontrolera ( pin z zakresu 0-5V)?

Postaw piwo autorowi tego posta
 
 
marek1707 



Posty: 3988
Pomógł: 429 razy
Otrzymał 578 piw(a)
Skąd: WAW
Programuję w:
C, asm
Wysłany: 12-07-2017, 11:27   

5.2V nie uszkodzi procesora, ale to dość nietypowe napięcie. Jeśli zmierzyłeś "na pusto" komplet jakichś rozładowanych baterii (np. 4x1.5V), to w takim stanie raczej nie zasilą ani serwa ani nawet procesora. Po prostu po podłączeniu napięcie spadnie jeszcze bardziej i wszystko zdechnie.
Poza tym nie zrozumiałem: czy chcesz z tego samego koszyczka zasilać i Arduino (przez pin Vcc) i serwo? To nigdy nie jest dobry pomysł, nawet gdy dysponujesz mocnym zasilaniem stabilizowanym 5V. Zakłócenia od silnika przeszkadzają procesorowi w wykonywaniu programu i rzadko kiedy udaje się uzyskać działający stabilnie system. No, chyba że serwo jest małe, nieobciążone a zasilanie jest poprowadzone z głową - to i tak tylko do eksperymentów na stole, nigdy w docelowym urządzeniu.
Napisz co to za baterie, jak je zmierzyłeś i jakie jest napięcie po podłączeniu np. samego serwa.

BTW: Wtyczka zasilania Arduino to nie jest jack:
https://pl.wikipedia.org/wiki/Jack_(wtyczka)
https://en.wikipedia.org/wiki/Coaxial_power_connector

Postaw piwo autorowi tego posta
 
 
Dolin 



Posty: 2
Wysłany: 12-07-2017, 11:46   

Baterie to Panasonic BK-3MCCE ( akumulatorki ). Właśnie dziwnie bo nominalnie mają one 1,2V, a zmierzyłem je po prostu przykładając napięcie na multimetr. Ogólnie trochę pomieszałem, miałem na myśli, że serwo tylko zasilam z baterii, a płytkę z komputera. Rozumiem, że nie jest to efektywne przy takim zasilaniu, ale chodzi tymczasowo tylko o testy i naukę działania.

Edit:
Podpiąłem silniczek i wszystko działa, napięcie wynosi około 5,15V przy dużym przyspieszeniu spada do około 5V.

P.S dzięki za odzew.

Ostatnio zmieniony przez Dolin 12-07-2017, 11:58, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Kurs Arduino - #9 - ... Kurs STM32 - #4 - St... Kurs STM32 - #2 - Po... Kurs STM32 - #1 - Za...
lub przeszukaj forum po wybranych tagach: artykulow, do, komentarze


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki