Skocz do zawartości
Komentator

Kurs Arduino - #8 - Sterowanie silnikami DC, pętla for

Pomocna odpowiedź

Chciałbym zbudować robota: arduino uno, mostek L293D, 2 silniczki, serwo, czujnik ultra dzwiękowy, dioda, przycisk. Czy mogę zasilić to tylko jedną baterią 9v podłączoną do arduino? Jeśli nie to co mam zrobić?

Udostępnij ten post


Link to post
Share on other sites

Gregory_59, nie, nie możesz, ponieważ bateria 9V nie nadaje się do takich zastosowań (ma za małą wydajność). Widziałeś już nasz kurs budowy robotów? Wykorzystywana tam platforma pozwala na zbudowanie dokładnie takiego robota, o którego pytasz. Więcej: Kurs budowy robotów – #1 – wstęp, spis treści

Udostępnij ten post


Link to post
Share on other sites

Zadanie 8.4. Rozpędzanie i hamowanie silnika DC z wykorzystaniem pętli for. Jak zwykle chciałem pochwalić się filmikiem 😉

Pozdrawiam!

Udostępnij ten post


Link to post
Share on other sites

A jeżeli mam już kupione mostki to jest jakiś sposób na zasilenie tego układu bez większych kosztów np jak bym podłączył paluszki razem 12V?

Udostępnij ten post


Link to post
Share on other sites

Gregory_59, wszystko zależy od mostków, silników i całej reszty. Ciężko ocenić po tak zdawkowej informacji, _kursSprzet

Udostępnij ten post


Link to post
Share on other sites

Witam. Mam silnik wymontowany ze starego magnetofonu. Problem w tym, że posiada on cztery wyprowadzenia: - + H L. Nie mam pojęcia czym jest H i L. No i jeszcze jedna sprawa: nie znalazłem noty katalogowej, do tego modelu silnika. Wiem, że zasilany jest na 12V. Jaki jest przedział prądu, jaki może on pobierać?

Udostępnij ten post


Link to post
Share on other sites

kownikużyt, _kursSprzet

Udostępnij ten post


Link to post
Share on other sites

Mam problem z 8.3 Podaję kod programu:

String odczyt = "";
int liczba = 0;

void setup() {
 Serial.begin(9600);
}

void loop () {
 if (Serial.available() > 0) {
   odczyt = Serial.readStringUntil('\n');
   liczba = odczyt.toInt();
 }
 if (liczba > 0 && liczba <= 9) {
   for (int i = 0; i < liczba; i++) {
     Serial.print("*");
   }
   while (liczba > 0 && liczba <= 9) {
     delay(25);
   }
 }
}

Po dodaniu pętli while gwiazdki już nie lecą w nieskończoność, ale liczbę można wpisać tylko raz, później program nie reaguje i trzeba dopiero wszystko resetować. Czemu tak jest? Próbowałem też zrobić podobnie z boolean, ale nic to nie dało - efekt ten sam.

+chcę dodać komunikat o złej liczbie za pomocą 'else'. Jak zrobić żeby wyświetlił się tylko raz?

Udostępnij ten post


Link to post
Share on other sites

thequeash, poczytaj jeszcze raz jak działa pętla while. W tej chwili jeśli liczba spełnia warunek "liczba > 0 && liczba W każdym razie na 100% w takiej formie nigdy nie przyniesie ona nic dobrego 😉

Udostępnij ten post


Link to post
Share on other sites

Dziękuję 🙂 Dało mi to trochę do myślenia.

Ostatecznie poradziłem sobie tak:

String odczyt = ""; 
int liczba = 0; 

void setup() { 
 Serial.begin(9600); 
} 

void loop () { 
 if (Serial.available() > 0) { 
   odczyt = Serial.readStringUntil('\n'); 
   liczba = odczyt.toInt();
 } 
 if (liczba > 0 && liczba <= 9) { 
   for (int i = 0; i < liczba; i++) { 
     Serial.print("*"); 
   }
   Serial.println(); 
   liczba =0;
 }
 if(liczba>9){
   Serial.println("Bledna liczba"); 
   liczba = 0;
 }
} 

Jest ok, ale czy da się to jakoś uprościć? Może bez sensu się tak męczę...

Udostępnij ten post


Link to post
Share on other sites

thequeash, można wprowadzić kilka zmian. W tej chwili każdy warunek umieściłeś jeden pod drugim. Warunek sprawdzający, czy liczba mieści się w zadanym zakresie lepiej umieścić wewnątrz tego pierwszego if'a. Sprawdzanie liczby powinno się odbywać tylko, gdy odebraliśmy jakąś wartość. Teraz robisz to w każdym obiegu pętli. Ostatni warunek w sumie jest zbędny. Liczba jest "błędna", gdy nie spełnia warunku z zakresem "liczba > 0 && liczba

Udostępnij ten post


Link to post
Share on other sites

Witam.

Po zmontowaniu całości dokładnie według schematu, z tą róznicą, że podłączyłem silniczek 5V z przekładnią (https://botland.com.pl/kola-dagu/3696-kolo-silnik-65x26mm-5v-z-przekladnia-481.html?search_query=silnik+6v+z+przekladnia&results=271) i wgrałem program. Wpierw skopiowałem go ze strony, ale wywaliło błąd. Doszedłem do tego, że problemem może być jakaś spacja. Tak, więc całość przepisałem i po wgraniu działa.

Jednak nie do końca tak jak powinien. Wiem, że spadki napięć spowodowane są mostkiem i to pominę, ale sytuacja ma się następująco:

Kiedy Arduino mam podpięte kablem USB i daję napięcie z komputera wszystko działa jak należy. Koło obraca się w jedną stronę 3s, następnie w przeciwną 3s. Ale kiedy odpinam kabel USB i podłączam do Arduino baterię 9V koło kręci się znacznie szybciej ale tylko w jedną strone. Około 3 sekundy, zatrzymuje się i znowu z tym, że nie zmienia kierunku.

W czym może być problem ?

Udostępnij ten post


Link to post
Share on other sites

Problem pewnie jest w tym, że w czasie pierwszej fazy ruchu napięcie tej żałosnej baterii spada do tak małej wartości (<6V), że procesor się resetuje i program startuje od początku.

Ani zasilanie silników z USB komputera ani tym bardziej z 6F22 nie jest dobrym pomysłem. Ile razy można to wałkować??

Stosując driver H masz nie tylko możliwość ustawiania kierunku ruchu silnika, ale też jego prędkości. Przy pracy z baterii ustaw więc mniejsze obroty, np. 30% maksymalnego wypełnienia PWM. Będzie wtedy wolniej, ale napęd będzie pobierał znacznie mniej prądu/mocy. A przede wszystkim mierz napięcia: baterii i Vcc procesora. Jeśli to pierwsze spada poniżej 7.5V to przeciążasz baterię albo już ją wyczerpałeś. To drugie nigdy nie powinno się wahać - jak drut powinno tam być cały czas 5V±0.2V.

Jeśli nie jesteś pewien co się dzieje z procesorem, zrób w kodzie wstawkę zapalającą jakąś diodę LED np. na sekundę czy mniej, ale tylko raz po starcie programu np. w funkcji setup() Arduino. Wtedy od razu zobaczysz, że system się zresetował w czasie pracy.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Tenshuchiyu, podłącz zamiast silnika diodę - wtedy zobaczysz, czy to wina programu, czy jednak silnika. Jeśli bierze on duży prąd, to bateria zapewne nie daje rady. Przy okazji: raczej nie polecam zasilania tych napędów z 9V 😉

Udostępnij ten post


Link to post
Share on other sites

Dzięki za podpowiedzi. Wybaczcie takie błahe pytania. Wiem, że nie powinno się zasilać silnika z pojedynczej baterii, czytałem o tym, choć jeszcze nie do końca przyswoiłem tą wiedzę. Myślałem, że przy zbyt małej mocy baterii po prostu silnik przestanie się kręcić nie pomyślałem, że może to resetować program.

Dziś wieczorkiem przeprowadzę oba doświadczenia i zobaczymy rezultaty.

Mógłbyś mi jeszcze podpowiedzieć Treker jak podłączyć osobne zasilanie do silnikja i osobne do Arduino? W kursie zasilanie czy to z usb czy z baterii przechodzi przez mikrokontroler. A gdybym chciał samo Arduino zasilać powiedzmy baterią 9V a silnik z 4 akumulatorków 1,5V w koszyczku ? Czy w takim przypadku powinienem układ połączyć jak na schemacie z kursu, baterie 9V pod arduino a koszyk z paluszkami ?

Dobrze kombinuję ?

Udostępnij ten post


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!

Gość
Napisz odpowiedź...

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