Skocz do zawartości

Kurs budowy robotów - #4 - pierwsze programowanie


Pomocna odpowiedź

#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9
#define LED 13

void setup() {
 //Konfiguracja pinow od mostka H
 pinMode(L_DIR, OUTPUT);
 pinMode(R_DIR, OUTPUT);
 pinMode(L_PWM, OUTPUT);
 pinMode(R_PWM, OUTPUT);

 pinMode(LED, OUTPUT);
}

void loop() {
 //Obroty silnika przez sekundę do przodu z prędkością 100
 digitalWrite(L_DIR, 0); //Ustawienie kierunku
 analogWrite(L_PWM, 100); //Ustawienie predkosci
 digitalWrite(LED, 0); //Zmiana stanu diody
 delay(1000); //Opoznienie 1 sekunda
 //Zatrzymanie silnika na sekundę
 digitalWrite(L_DIR, 0); //Ustawienie kierunku
 analogWrite(L_PWM, 0); //Wylaczenie silnika
 digitalWrite(LED, 1); //Zmiana stanu diody
 delay(1000); //Opoznienie 1 sekunda
}

Witam,

wgrałem do robota powyższy kod,  silniki jednak nie działają a dioda świeci, baterie mam wymienione na nowe, sprawdzając woltomierzem przy wyjściu pojawia się napięcie ok. 2V ale tylko gdy silnik jest odłączony, wtyczki są podłączone na pewno dobrze. 

Poprzednie ćwiczenie z buzzerem działało poprawnie.

image.thumb.png.d5636944b930cdeffe858de7e33960f1.pngimage.thumb.png.d4a78c2527b3ba1d1336ff4ef3d8d15f.png

@mariobrothers witam na forum 🙂

Czy silniki wydają jakiś dźwięk? Spróbuj dla testu zdjąć koła (aby mieć pewność, że nic nie blokuje osi silników). Rozumiem, że jesteś przekonany co do poprawności podłączenia wtyczek, ale sprawdź proszę raz jeszcze czy nie popełniłeś tego lub tego błędu. Do tej pory za każdym razem, gdy pojawiał się tego typu problem, rozwiązaniem było właśnie poprawne przykręcenie przewodów. Nigdy nie wystąpił problem innego typu 😉

silniki nie wydają dźwięku, zdjąłem teraz dla testu koła, ale dalej nic 😕 sprawdziłem dla pewności jeszcze raz wtyczki i na pewno tych błędów nie popełniłem.

Sprawdziłem też dla drugiego koła, ale jest tak samo

@mariobrothers pozostaje chyba sprawdzić czy silniki działają. Widzę, że masz zestaw do kursu Arduino (poziom 1). Dasz radę podłączyć układ z koszyka baterii i stabilizatora 5V? Spróbuj wpiąć silnik bezpośrednio pod tak uzyskane 5V i zobacz czy będzie się kręcił 🙂 Alternatywnie możesz na upartego spróbować wziąć 2 baterie AA, połączyć je szeregowo i podłączyć silnik do tak uzyskanych 3V (też powinien ruszyć). Dowiemy się przynajmniej gdzie leży problem (silniki czy sterownik napędów).

oba silniki działają, sprawdziłem za pomocą woltomierza też jakie jest napięcie na wyjściu w sterowniku, i tak dla wypełnienia 100 (tak jak w kodzie) bez podłączenia silników  na wyjściu jest to jakieś 0,75 V, dla wypełnienia 100% to prawie 2 V, jednak przy podłączeniu silników drastycznie spada

Jeśli silniki są poprawnie podłączone, zasilasz układ z 6xAA i same silniki działają to chyba trafił się niestety pierwszy w historii uszkodzony sterownik silników 😞 Napisz proszę na adres [email protected] na pewno szybko uda się wymienić shielda na nowego. Daj później znać czy faktycznie to było problemem 🙂

  • 3 tygodnie później...
  • 2 miesiące później...

Cześć,

U mnie chyba ten sam problem co u mariobrothers.

Wgrałem jeden z testowych programów i silniki się nie kręcą. Sprawdziłem napięcie na wejściu shielda i jest około 9.6V sprawdzam miernikiem wyjścia na silniki i na każdym jest równe zero. Podłączyłem silniki na krótko do baterii i oba się świetnie kręcą. Oczywiście zworka ustawiona na ON i świeci się dioda zasilająca silniki

aktualnie wgrany kod do arduino

 
#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9
 
void setup() {
  //Konfiguracja pinow od mostka H
  pinMode(L_DIR, OUTPUT);
  pinMode(R_DIR, OUTPUT);
  pinMode(L_PWM, OUTPUT);
  pinMode(R_PWM, OUTPUT);
}
 
void loop() {
  digitalWrite(R_DIR, 0); //Ustawienie kierunku
  analogWrite(R_PWM, 100); //Ustawienie predkosci
  delay(1000); //Opoznienie 1 sekunda
  digitalWrite(R_DIR, 0); //Ustawienie kierunku
  analogWrite(R_PWM, 0); //Wylaczenie silnika
  delay(1000); //Opoznienie 1 sekunda
}

 

  • Lubię! 1

@dawidp witam na forum 🙂 Jeśli masz pewność, że podłączenie jest poprawne i nie zacisnąłeś przypadkiem złącz na izolacji to chyba faktycznie masz ten sam problem... 

W takim razie pozostaje reklamacja, bo chyba niestety trafiłeś na uszkodzony element 😞 Napisz proszę na adres [email protected]l, na pewno szybko uda się wymienić element na nowy. Przepraszam za problem, mam nadzieję, że dalej obejdzie się już bez takich niespodzianek!

  • Lubię! 2

Witam,

Chciałem podłączyć arduino, robota z tego kursu do Raspberry Pi 4 za pomocą kabla USB, gdyż potrzebuję aby dane z Raspberry Pi były przesyłane do arduino. Czy gdy mam włąćzone zasilanie bateryjne w robocie i stworzone połączenia USB Raspberry Pi - Arduino to czy mogę bezpiecznie używać robota?

@StarZgred witam na forum 🙂 Nie testowaliśmy takiego połączenia, ale nie powinno być z tym żadnego problemu. Pamiętaj tylko o odpowiednim zasilaniu dla malinki, bo baterie z robota mogą okazać się zbyt słabe, aby zasilić RPi, Arduino oraz silniki.

(edytowany)

@Treker Bardzo dziękuję za odpowiedź. Mam jeszcze jedno pytanie, czy do zasilenia Raspberry Pi 4 mógłbym wybrać np. taki PowerBank ?

https://botland.com.pl/pl/mobilne-baterie-powerbank/10071-mobilna-bateria-powerbank-esperanza-emp111wr-boson-6000mah-bialo-czerwony.html

lub może coś takiego byłoby bardziej odpowiednie?

https://botland.com.pl/pl/raspberry-pi-hat-nakladki-zasilajace/13459-waveshare-li-ion-battery-hat-nakladka-dla-raspberry-pi.html

Jeżeli nie, to czy mógłby Pan coś polecić?

Z góry dziękuję za odpowiedź.

Edytowano przez StarZgred

@StarZgred pierwsze rozwiązanie będzie na pewno bardziej eleganckie. Ciężko jednak o konkretne porady, bo nie wiem co dokładnie będzie robiło to RPi i jakiego poboru prądu się spodziewasz. Możesz też na początku wykorzystać zwykły powerbank, a później pomyśleć o jakiś "bardziej profesjonalnych" rozwiązaniach 😉

  • 3 tygodnie później...
#define PWM_MAX 165
#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9

void setup(){
pinMode(L_PWM,OUTPUT);
pinMode(L_DIR,OUTPUT);
pinMode(R_PWM,OUTPUT);
pinMode(R_DIR,OUTPUT);
}
void loop(){
 leftMotor(40);

 rightMotor(-40);
 delay(2000);
stopMotors; 
delay(2000);
}
void leftMotor(int V){
  if(V > 0){
    V = map(V,0,100,0,PWM_MAX);
    digitalWrite(L_DIR,0);
    analogWrite(L_PWM,V);
  }else{
    V = abs(V);
  V = map(V,0,100,0,PWM_MAX);
   digitalWrite(L_DIR,1);
    analogWrite(L_PWM,V);
    }
}
void rightMotor(int V) {
  if (V > 0) { //Jesli predkosc jest wieksza od 0 (dodatnia)
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 0); //Kierunek: do przodu
    analogWrite(R_PWM, V); //Ustawienie predkosci 
  } else {
    V = abs(V); //Funkcja abs() zwroci wartosc V  bez znaku
    V = map(V, 0, 100, 0, PWM_MAX);
    digitalWrite(R_DIR, 1); //Kierunek: do tyłu
    analogWrite(R_PWM, V); //Ustawienie predkosci    
  }
}
void stopMotors() {
  analogWrite(L_PWM, 0); 
  analogWrite(R_PWM, 0); 
}

Czemu po zrobieniu obrotu silniki się w ogóle nie zatrzymują.

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ę »
×
×
  • Utwórz nowe...