Skocz do zawartości

mateusz797

Użytkownicy
  • Zawartość

    13
  • Rejestracja

  • Ostatnio

Reputacja

-1 Słaba

O mateusz797

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Widze ze milej nie mozna z Toba pisac. Okey sam tego chciales. Jak masz tak hamsko odpowiadac to daruj sobie. Zglosilem Twoje odpowiedzi do admina tego forum. Dostaniesz bana
  2. Jak podlaczylem ENA pod pin 2 to dalej nie działa. Czemu? Mam arduino UNO. Szczegółowe podłaczenie mostka L298N ENA - 2, IN 1 - 7, IN 2- 6, IN 3 - 4 IN 4 - 5 ENB - 3 Piny : 3,5,6 - PWM, 7,4 nie maja tego znaczka PWM.
  3. Serwomechanizm bardzo dobrze działa. Podlaczylem go pod PIN 10. W tym artykule są komendy serwomechanizmu. A tutaj chodzi o to że jeden silnik się nie obraca. Ena jest do 9 pinu podłączony.
  4. Dzień dobry, W ostatnim czasie postanowiłem zbudować robota inspekcyjnego na bazie platformy arduino. Ma on na celu wykrywanie przeszkód oraz ich omijanie. Pierwszy program jaki napisałem miał na celu wysterowanie silników. Drugi program ma na celu wysterowanie silników w następujący sposób: a) Jesli przeszkoda oddalona jest wiecej niz 15cm robot ma jechac prosto - dwa silniki kreca sie w jednakowa strone b) Jesli przeszkoda oddalona jest o mniej niz 15 cm robot ma zatrzymac sie i skrecic w prawo, czyli lewy silnik ma sie krecic do przodu a prawy do tyłu. 1. Ponizszy program majacy na celu sprawdzenie wysterowania silnikow tylko działa prawidłowo - sterowanie silnikami , kupiłem nowy mostek H, silniki poprawnie sie przełączaja oraz obracaja sie w zaleznosci od wpisanych predkosci do programu (niepoprawnie działa tylko program nr 2 mimo nadania takich samych stanow logicznych oraz pinow dla silnikow) const int IN1 = 7; const int IN2 = 6; const int IN3 = 4; const int IN4 = 5; const int ENA = 9; const int ENB = 3; void setup() { pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); pinMode (ENA, OUTPUT); pinMode (ENB, OUTPUT); } void loop() { delay(4000); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 90); // 90/256 predkosc analogWrite(ENB, 90); // Syt. 1 - Prosto delay(4000); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENA, 90); analogWrite(ENB, 90); delay(4000); } 2. Program koncowy nie dziala poprawnie - obraca sie tylko prawy silnik w jedna strone , robot jak zauwazy przeszkode to obraca czujnik odleglosci na serwomechanizmie, ale nie skręca. Takie same sa ustawione piny i stany na silnikach. Kod : #include <LiquidCrystal_I2C.h> #include <Wire.h> // zalacz biblioteki #include <Servo.h> Servo myservo; const int trigPin = 12; const int echoPin = 11; const int IN1 = 7; const int IN2 = 6; const int IN3 = 4; const int IN4 = 5; const int ENA = 9; const int ENB = 3; LiquidCrystal_I2C lcd(0x27,16,2); float duration, distance; void setup() { lcd.init(); lcd.backlight (); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); myservo.attach(10); Serial.begin(9600); myservo.write(104); delay(500); myservo.write(180); delay(500); myservo.write(0); delay(500); myservo.write(104); delay(500); pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); pinMode (ENA, OUTPUT); pinMode (ENB, OUTPUT); } void loop() { lcd.clear(); lcd.setCursor (0,0); lcd.print ("Odleglosc:"); lcd.setCursor (0,1); lcd.println (distance); lcd.setCursor (5,1); lcd.print ("cm"); digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration*.0343)/2; Serial.print("Distance: "); Serial.println(distance); delay(300); if (distance < 15){ myservo.write(180); delay(500); myservo.write(0); delay(500); myservo.write(104); delay(500); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENA, 120); // skret analogWrite(ENB, 120); } if (distance > 15){ digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 120); // jazda prosto analogWrite(ENB, 120); } } W pliku rar zostaly spakowane 3 filmiki A) jeden pokazuje dzialanie pierwszego programu - poprawne przelaczanie oraz obroty z zadana predkoscia w programie silnikow B) Kiedy robot nie widzi przeszkody porusza jednym silnikiem - kiedy zauwazy takze cofa tylko jednym (Program nie działa poprawnie według zadanych komend w konsoli) C) Kiedy nie ma w instrukcjach programu czujnika odleglosci lcd oraz serwa robot na zadane komendy : jazda do przodu przez x sek potem skret w prawo, jazda do tyłu oraz w lewo radzi sobie świetnie. Pozostaje tylko do rozwiazania problem w punkcie B. Czy mogliby Państwo wyjasnic , moze ktos miał podobna sytuacje dlaczego dla drugiego programu obraca sie tylko prawy silnik a lewy wogole sie nie rusza? Downloads.rar C.rar
  5. Dzień dobry, W ostatnim czasie postanowiłem zbudować robota inspekcyjnego na bazie platformy arduino. Ma on na celu wykrywanie przeszkód oraz ich omijanie. Pierwszy program jaki napisałem miał na celu wysterowanie silników. Drugi program ma na celu wysterowanie silników w następujący sposób: a) Jesli przeszkoda oddalona jest wiecej niz 15cm robot ma jechac prosto - dwa silniki kreca sie w jednakowa strone b) Jesli przeszkoda oddalona jest o mniej niz 15 cm robot ma zatrzymac sie i skrecic w prawo, czyli lewy silnik ma sie krecic do przodu a prawy do tyłu. 1. Ponizszy program tylko nie działa prawidłowo - sterowanie silnikami , wg tych komend silniki powinny reagowac na wpisana w programie zmiane predkosci. Jak wpisalem np. 100 to kreca sie z taka sama predkoscia. Powinny piszczec lub wolno sie krecic. const int IN1 = 7; const int IN2 = 6; const int IN3 = 4; const int IN4 = 5; const int ENA = 9; const int ENB = 3; void setup() { pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); pinMode (ENA, OUTPUT); pinMode (ENB, OUTPUT); } void loop() { delay(4000); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 90); // 90/256 predkosc analogWrite(ENB, 90); // Syt. 1 - Prosto delay(4000); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENA, 90); // 90/256 predkosc analogWrite(ENB, 90); delay(4000); } 2. Program koncowy nie dziala poprawnie - obraca sie tylko prawy silnik w jedna strone , robot jak zauwazy przeszkode to obraca czujnik odleglosci na serwomechanizmie, ale nie skręca. Takie same sa ustawione piny i stany na silnikach. Kod : #include <LiquidCrystal_I2C.h> #include <Wire.h> // zalacz biblioteki #include <Servo.h> Servo myservo; const int trigPin = 12; const int echoPin = 11; const int IN1 = 7; const int IN2 = 6; const int IN3 = 4; const int IN4 = 5; const int ENA = 9; const int ENB = 3; LiquidCrystal_I2C lcd(0x27,16,2); float duration, distance; void setup() { lcd.init(); lcd.backlight (); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); myservo.attach(10); Serial.begin(9600); myservo.write(104); delay(500); myservo.write(180); delay(500); myservo.write(0); delay(500); myservo.write(104); delay(500); pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); pinMode (ENA, OUTPUT); pinMode (ENB, OUTPUT); } void loop() { lcd.clear(); lcd.setCursor (0,0); lcd.print ("Odleglosc:"); lcd.setCursor (0,1); lcd.println (distance); lcd.setCursor (5,1); lcd.print ("cm"); digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration*.0343)/2; Serial.print("Distance: "); Serial.println(distance); delay(300); if (distance < 15){ myservo.write(180); delay(500); myservo.write(0); delay(500); myservo.write(104); delay(500); digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENA, 120); // skręt analogWrite(ENB, 120); } if (distance > 15){ digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 120); // jazda prosto analogWrite(ENB, 120); } }
  6. Dziękuję za przesłanie artykuły. Powiem szczerze że niewiele rozumiem z tego kodu bo to typowy język C jest. Ja programuje w Arduino czysto dla funu. Nie rozumiem języka C bo są trudniejsze instrukcje. Z tego artykułu też niewiele wyciągnąłem. Na if i Else jest proste rozwiązanie. W arduino nie wiedziałbym jak taki program z regulatorem PID napisać.
  7. Robot został już zbudowany. Prezentuje Państwu filmik jego działania. Warunki if oraz Else if się sprawdzają. Pozdrawiam! Mateusz Pomorski
  8. Filmik pokazuje działanie robota. Niestety chyba robót nie wie co ma robić. Krąży w kółko czasami
  9. Zanim załączę silniki będę musiał naładować robota. Zamówiłem ładowarkę. Jeżeli nie podziała już i robót będzie zjeżdżał z trasy po tym to będą możliwe 3 przyczyny : A. Czujniki źle odczytują pomiar B. Czujniki źle przekazują do silników C. Układ się poprostu zacina jak komputer. Test ma trasie zdany. Pomógł Twój program ten co 4 czujniki trzeba było wpisać. Dziękuję!
  10. Dziękuję za podpowiedź. Efekty Czyli wiemy że pomogła wysokość czujników oraz poprawność programu. LCD clear. Czy mogę teraz pisać komendy dla silników? Linia jest gruba bo robót się gubi przy niewielkiej. Mało tego. Robót czasami z opóźnieniem zmienia napisy na wyświetlaczu. Płynnie nie zmienia.
  11. Dobrze napisze po kolei na poszczególne punkty : 1. Listwa jest położona 7mm od ziemi 2. Fotodiody świeca więc punkt spełniony 3. Wysyłam szkic oraz filmik z tego jak reagują czujniki na podłoże. Widać że jest pewien bałagan. Źle odczytują. Na zdjęciach widać że jedynie jak robót widzi czarna Linie to każe skręcać. I wogole dziwi mnie to że napisy się wyświetlają. Wyślę zaraz kod programu. Teraz kod programu, na wyswietlaczu wogole to co sie dzieje nie odpowiada kodowi programu: jakies dodatkowe litery wyskakuja. Dobrze podpisalem to co ma sie wyświetlić. Teraz podstawowe pytania : 1.Co jest przyczyną że wyskakują dodatkowe litery na wyświetlaczu(napisy się łącza ze sobą np.,, Prosto : w prawo,, ? Przecież w programie jest wyraźnie napisane że prosto ma wyświetlać lub w prawo. 2. Źle odczyty czujników. Odległość nad ziemią to 7mm.Diody listwy się podświetlają (np. Czarny kolor dioda czerwona się zapala, biały kolor dioda czerwona gasnie). Czyli listwa działa dobrze. Tylko czujniki coś źle przekazują do LCD. #include <LiquidCrystal_I2C.h> #include <Wire.h> // zalacz biblioteki LiquidCrystal_I2C lcd(0x27,16,2); // adres I2C oraz liczba kolumnt i wierszy LCD int sensor1 = A0; int sensor2 = A1; int sensor3 = A2; int sensor4 = A3; void setup() { lcd.init(); lcd.backlight (); //podswietlenie obrazu } void loop() { if ((digitalRead(sensor1)==1)&&(digitalRead(sensor2)==1)&&(digitalRead(sensor3)==1)&&(digitalRead(sensor4)==1)) // 1,2,3, 4 - czarne { //PWM Speed Control lcd.setCursor (0,0); lcd.print ("Prosto:"); delay(50); } else if ((digitalRead(sensor1)==0)&&(digitalRead(sensor2)==1)&&(digitalRead(sensor3)==1)&&(digitalRead(sensor4)==1)) // // 1 białe 2,3,4 - czarne { lcd.setCursor (0,0); lcd.print ("Minim R"); } else if ((digitalRead(sensor1)==0)&&(digitalRead(sensor2)==0)&&(digitalRead(sensor3)==1)&&(digitalRead(sensor4)==1)) // // 1,2 białę ,3,4 - czarne { lcd.setCursor (0,0); lcd.print ("Skret w prawo"); } else if ((digitalRead(sensor1)==0)&&(digitalRead(sensor2)==0)&&(digitalRead(sensor3)==0)&&(digitalRead(sensor4)==1)) // 1 białe 2,3, 4 - czarne { lcd.setCursor (0,0); lcd.print ("M w prawo"); } else if ((digitalRead(sensor1)==1)&&(digitalRead(sensor2)==1)&&(digitalRead(sensor3)==1)&&(digitalRead(sensor4)==0)) // 1 2,3, czarne 4 - biale { lcd.setCursor (0,0); lcd.print ("Lekko w lewo"); } else if ((digitalRead(sensor1)==1)&&(digitalRead(sensor2)==1)&&(digitalRead(sensor3)==0)&&(digitalRead(sensor4)==0)) // 1,2, czarne 3,4 - biale { lcd.setCursor (0,0); lcd.print ("Skret w lewo"); } else if ((digitalRead(sensor1)==1)&&(digitalRead(sensor2)==0)&&(digitalRead(sensor3)==0)&&(digitalRead(sensor4)==0)) // // 1 czarne 2,3,4 - biale { lcd.setCursor (0,0); lcd.print ("M w lewo"); delay(50); } }
  12. Dziękuję za wysłanie programu. Przydaje się. Na jego podstawie i nie tylko mam następujące wnioski: 1.Czujnik znajduje się na wysokości 2cm od linii 2.Zdjecie diod podczerwonych 3. Na wyświetlaczu LCD wyraźnie się wyświetla że jak robót widzi Linie : wartości są mniejsze od 200. Jeśli jej nie widzi : większe od 800. Myślę że inna jest przyczyną. Wyślę jeszcze plik pdf z danymi jak Twój program widzi na monitorze portu szeregowego w zależności od wskazania moje LCD. Pomiary czujnikow w zalenosci od barwy podloza(1).pdf
  13. Witam, Skonstruowałem ostatnio linefollowera. Zostały przetestowany program z arduino. Część mechaniczna oraz elektryczna, programistyczna została ukończona. Jednak robót nie reaguje poprawnie na czarny i biały kolor. Czy ktoś mógłby mi wyjaśnić co jest tego przyczyną skoro nie ma błędów w programie, część mechaniczna i elektryczna jest poprawnie ukończona. Program ponizej #include <LiquidCrystal_I2C.h> #include <Wire.h> // zalacz biblioteki LiquidCrystal_I2C lcd(0x27,16,2); // adres I2C oraz liczba kolumnt i wierszy LCD int sensor1 = A0; int sensor2 = A1; int sensor3 = A2; int sensor4 = A3; const int IN1 = 7; const int IN2 = 6; const int IN3 = 4; const int IN4 = 5; const int ENA = 9; const int ENB = 3; void setup() { lcd.init(); lcd.backlight (); //podswietlenie obrazu pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); pinMode (ENA, OUTPUT); pinMode (ENB, OUTPUT); } void loop() { if ((analogRead(sensor1)<=300)&&(analogRead(sensor2)<=300)&&(analogRead(sensor3)<=300)&&(analogRead(sensor4)<=300)) // 1,2,3, 4 - czarne { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 85); analogWrite(ENB, 85); // prosto delay(50); //PWM Speed Control lcd.setCursor (0,0); lcd.print ("1:"); sensor1= analogRead(A0); lcd.print(sensor1); lcd.setCursor (6,0); lcd.print ("2:"); sensor2= analogRead(A1); lcd.print(sensor2); lcd.setCursor (0,1); lcd.print ("3:"); sensor3= analogRead(A2); lcd.print(sensor3); lcd.setCursor (6,1); lcd.print ("4:"); sensor4= analogRead(A3); lcd.print(sensor4); delay(50); } else if ((analogRead(sensor1)>=300)&&(analogRead(sensor2)<=300)&&(analogRead(sensor3)<=300)&&(analogRead(sensor4)<=300)) // // 1 białe 2,3,4 - czarne { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENA, 90); analogWrite(ENB, 0); // lekki skret w prawo delay(50); lcd.setCursor (0,0); lcd.print ("1:"); sensor1= analogRead(A0); lcd.print(sensor1); lcd.setCursor (6,0); lcd.print ("2:"); sensor2= analogRead(A1); lcd.print(sensor2); lcd.setCursor (0,1); lcd.print ("3:"); sensor3= analogRead(A2); lcd.print(sensor3); lcd.setCursor (6,1); lcd.print ("4:"); sensor4= analogRead(A3); lcd.print(sensor4); delay(50); } else if ((analogRead(sensor1)>=300)&&(analogRead(sensor2)>=300)&&(analogRead(sensor3)<=300)&&(analogRead(sensor4)<=300)) // // 1,2, białe 3,4 - czarne { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENA, 90); analogWrite(ENB, 0); // lekki skret w prawo delay(50); lcd.setCursor (0,0); lcd.print ("1:"); sensor1= analogRead(A0); lcd.print(sensor1); lcd.setCursor (6,0); lcd.print ("2:"); sensor2= analogRead(A1); lcd.print(sensor2); lcd.setCursor (0,1); lcd.print ("3:"); sensor3= analogRead(A2); lcd.print(sensor3); lcd.setCursor (6,1); lcd.print ("4:"); sensor4= analogRead(A3); lcd.print(sensor4); delay(50); } else if ((analogRead(sensor1)>=300)&&(analogRead(sensor2)>=300)&&(analogRead(sensor3)>=300)&&(analogRead(sensor4)<=300)) // // 1,2,3 białe 4 - czarne { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENA, 100); analogWrite(ENB, 0); // mocny skret w prawo delay(50); lcd.setCursor (0,0); lcd.print ("1:"); sensor1= analogRead(A0); lcd.print(sensor1); lcd.setCursor (6,0); lcd.print ("2:"); sensor2= analogRead(A1); lcd.print(sensor2); lcd.setCursor (0,1); lcd.print ("3:"); sensor3= analogRead(A2); lcd.print(sensor3); lcd.setCursor (6,1); lcd.print ("4:"); sensor4= analogRead(A3); lcd.print(sensor4); delay(50); } else if ((analogRead(sensor1)<=300)&&(analogRead(sensor2)<=300)&&(analogRead(sensor3)<=300)&&(analogRead(sensor4)>=300)) // // 1,2,3, czarne 4 - białe { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 0); analogWrite(ENB, 100); // lekki skret w lewo delay(50); lcd.setCursor (0,0); lcd.print ("1:"); sensor1= analogRead(A0); lcd.print(sensor1); lcd.setCursor (6,0); lcd.print ("2:"); sensor2= analogRead(A1); lcd.print(sensor2); lcd.setCursor (0,1); lcd.print ("3:"); sensor3= analogRead(A2); lcd.print(sensor3); lcd.setCursor (6,1); lcd.print ("4:"); sensor4= analogRead(A3); lcd.print(sensor4); delay(50); } else if ((analogRead(sensor1)<=300)&&(analogRead(sensor2)<=300)&&(analogRead(sensor3)>=300)&&(analogRead(sensor4)>=300)) // // 1,2, białe 3,4 - czarne { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 0); analogWrite(ENB, 90); // lekki skret w lewo delay(50); lcd.setCursor (0,0); lcd.print ("1:"); sensor1= analogRead(A0); lcd.print(sensor1); lcd.setCursor (6,0); lcd.print ("2:"); sensor2= analogRead(A1); lcd.print(sensor2); lcd.setCursor (0,1); lcd.print ("3:"); sensor3= analogRead(A2); lcd.print(sensor3); lcd.setCursor (6,1); lcd.print ("4:"); sensor4= analogRead(A3); lcd.print(sensor4); delay(50); } else if ((analogRead(sensor1)<=300)&&(analogRead(sensor2)>=300)&&(analogRead(sensor3)>=300)&&(analogRead(sensor4)>=300)) // // 1 czarne 2,3,4 - czarne { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENA, 0); analogWrite(ENB, 90); // lekki skret w lewo lcd.setCursor (0,0); lcd.print ("1:"); sensor1= analogRead(A0); lcd.print(sensor1); lcd.setCursor (6,0); lcd.print ("2:"); sensor2= analogRead(A1); lcd.print(sensor2); lcd.setCursor (0,1); lcd.print ("3:"); sensor3= analogRead(A2); lcd.print(sensor3); lcd.setCursor (6,1); lcd.print ("4:"); sensor4= analogRead(A3); lcd.print(sensor4); delay(50); } }
×
×
  • Utwórz nowe...