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

Kurs budowy robotów - #4 - pierwsze programowanie

Autor Wiadomość
Treker 




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

Wysłany: 07-01-2017, 16:12   

qbeczek, cieszę się, że już wszystko działa :)

Może w takim razie to samo rozwiąże problem kolegi ZombiZiomek? Spróbuj odkręcić i jeszcze raz założyć wtyczki na kable od silników. Pamiętaj, aby wewnątrz złącza znajdował się odsłonięty kawałek przewodu, a nie izolacja.
Polecany artykuł z FORBOT.PL:
Odlewanie opon z silikonu

Opony jakie robiłem kilka razy do linefollowera wykonane były z silikonu oryginalnie używanego do tworzenia fo... Czytaj całość



Sprawdź! >> Kurs ARDUINOKurs podstaw elektronikiKurs STM32
Postaw piwo autorowi tego posta
 
 
buchbuch 



Posty: 63
Pomógł: 1 raz
Skąd: ze wschodu
Wysłany: 07-01-2017, 19:42   

Prawie jak Colobot: motor(30,-30); tylko chwytaka brak ;)


Polecam książki: Williams E. - "Programowanie układów AVR dla praktyków", Tomasz Francuz - "Język C dla mikrokontrolerów AVR"
Postaw piwo autorowi tego posta
 
 
ZombiZiomek 



Posty: 5
Otrzymał 1 piw(a)
Wysłany: 07-01-2017, 19:52   

Dzięki Treker i qbeczek, miałem ten sam problem. już wszystko działa :D

Postaw piwo autorowi tego posta
 
 
Więcej szczegółów
Wystawiono 1 piw(a):
Treker
Treker 




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

Wysłany: 07-01-2017, 21:19   

ZombiZiomek, super, cieszę się, że wszystko jest dobrze :)

buchbuch, przyznam, że nigdy nie grałem... Chyba najwyższa pora ;)


Sprawdź! >> Kurs ARDUINOKurs podstaw elektronikiKurs STM32
Postaw piwo autorowi tego posta
 
 
robert10 



Posty: 1
Wysłany: 07-01-2017, 21:33   

Witam,
Pozdrawiam autora Trekera - super kursy - świetny opis i grafika.
Sam dzisiaj walczyłem z brakującą zworką polecam rozwiązanie stara płyta główna od komputera - jest ich kilka można wykorzystać.
Miałem problem z niedziałającym prawym silnikiem - już byłem pewny że nie działa
wielokrotne próby nic nie pomagały. Liczy się dokładność patrząc z boku należy precyzyjnie zamieść nie osłonięty izolacją przewód we wtyczce i dokręcić. Najczęstsze błędy to przewód przykręcony z izolacją oraz przewód nie przymocowany - nie widać tego błędu przez ograniczoną przestrzeń

Postaw piwo autorowi tego posta
 
 
leepa79 




Posty: 20
Otrzymał 3 piw(a)
Wysłany: 07-01-2017, 21:52   

Zadanie 4.3 można oczywiście zrobić kilkoma sposobami. U mnie najszybciej tą drogą:
Kod programu: Zaznacz cały
#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9
#define PWM_MAX 165

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(){
  turnMotor1();
}

void turnMotor1() {
  for (int i = 50; i < 165; i++){
    digitalWrite(L_DIR, 0);
    analogWrite(L_PWM, i);
    digitalWrite(R_DIR, 1);
    analogWrite(R_PWM, i);
    delay(100);
  }
  for(int i = 165; i >= 50; i--){
    digitalWrite(L_DIR, 0);
    analogWrite(L_PWM, i);
    digitalWrite(R_DIR, 1);
    analogWrite(R_PWM, i);
    delay(100);
  }
}

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

//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); //Wylaczenie silnika lewego
//  analogWrite(R_PWM, 0); //Wylaczenie silnika prawego
//}


Zadanie 4.2 to świetna zabawa - nie daję kodu bo zadanie rozbudowałem i dostosowałem do warunków w mojej kuchni :)

PS. Ja również nie miałem zworki, ale w garażu mam kilka starych dysków więc nie ma problemu. Reszta działa (na tym etapie) super. Tylko bieżnik w jednym kole obróciłem żeby poślizgów nie było :)

PS1. Kot mój nie reaguje na robota. Może to być związane z tym, że jest głuchy...

Postaw piwo autorowi tego posta
 
 
Treker 




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

Wysłany: 07-01-2017, 21:59   

robert10 napisał/a:
Pozdrawiam autora Trekera - super kursy - świetny opis i grafika.


Dzięki za miłe słowa :) Nie sądziłem, że z tymi złączami może być tyle problemów (a to już 3 taki przypadek). Zaktualizowałem właśnie artykuły i dodałem uwagi na temat izolacji. Jeśli chodzi o zworki, to faktycznie płyty główne (i stare dyski) są dobrym źródłem takich elementów. Oczywiście, jeśli ktoś nie znajdzie zworki, to ją doślemy - proszę takie osoby o kontakt na PW.

leepa79 napisał/a:
Zadanie 4.3 można oczywiście zrobić kilkoma sposobami. U mnie najszybciej tą drogą:

Działa dobrze, więc super, ale mnie trochę zaskoczyłeś :D
Dlaczego zakomentowałeś przygotowane funkcje left/rightMotor?
Wystarczyło przecież je zostawić i wewnątrz for'a wydawać komendy:
Kod programu: Zaznacz cały
leftMotor(i);
rightMotor(-i);

Pamiętaj też o stałej PWM_MAX warto z niej korzystać, bo za jakiś czas zapomnisz skąd te 165 się wzięło wewnątrz pętli ;)


Sprawdź! >> Kurs ARDUINOKurs podstaw elektronikiKurs STM32
  
Postaw piwo autorowi tego posta
 
 
leepa79 




Posty: 20
Otrzymał 3 piw(a)
Wysłany: 08-01-2017, 10:38   

Teraz mam tak:
Kod programu: Zaznacz cały

#define L_PWM 5
#define L_DIR 4
#define R_PWM 6
#define R_DIR 9
#define PWM_MAX 165
#define PWM_MIN 50

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(){
  turnMotor1();
}

void turnMotor1() {
  for (int i = PWM_MIN; i < PWM_MAX; i++){
    leftMotor(i);
    rightMotor(-i);
    delay(100);
  }
 
  for(int i = PWM_MAX; i >= PWM_MIN; i--){
    leftMotor(i);
    rightMotor(-i);
    delay(100);
  }
}

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

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); //Wylaczenie silnika lewego
  analogWrite(R_PWM, 0); //Wylaczenie silnika prawego
}

Ale nie działa tak jak myślałem :) Po rozpędzeniu się do max zatrzymuje się na około 1 sek. Z min do rozpędzania przechodzi płynnie. Czegoś jeszcze nie widzę?

ED - ok znalazłem winowajce :) nie wrzucam, bo nie chcę psuć innym zabawy :) naprawdę drobna poprawka

Ostatnio zmieniony przez leepa79 08-01-2017, 12:26, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
Więcej szczegółów
Wystawiono 1 piw(a):
robert10
Treker 




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

Wysłany: 14-01-2017, 19:56   

Dodaliśmy jeszcze do artykułów nową grafikę - mam nadzieję, że teraz nikt nie będzie miał już problemów z mocowaniem przewodów w złączach:



Sprawdź! >> Kurs ARDUINOKurs podstaw elektronikiKurs STM32
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 STM32 - #4 - St... Kurs STM32 - #3 - Pł... Kurs Arduino - #9 - ... Kurs STM32 - #5 - Ko...
lub przeszukaj forum po wybranych tagach: elektronika, komentarze, majsterkowanie, robotyka


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