Skocz do zawartości
mateusz797

Niepoprawne działanie programu robota inspekcyjnego

Pomocna odpowiedź

Napisano (edytowany)

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);   
               


    
  }
  

}

 

 

 

IMG_20200625_182429.jpg

IMG_20200625_182453.jpg

Edytowano przez mateusz797
Wykryto cos nowego

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ść
Dołącz do dyskusji! Kliknij i zacznij pisać...

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