Skocz do zawartości

[Line follower] Robot jeżdżący po linii


PrEmO

Pomocna odpowiedź

Jak tu się nie zdenerwować?! Masz tutorial na stronie internetowej, wszystko jest tam opisane, nie rozumiesz? Dobra staram się pomóc, więc odpowiedz na pytanie co robisz po właczeniu płytki? Wciskasz klawisze na płytce, wysyłasz dane przez terminal? Czy terminal zwraca jakiś tekst? Wykaż proszę więcej zaangażowania, postaraj się chociaż spróbować samodzielnie rozwiązywać problemy.

Do testu usuń zawartość pętli loop i wstaw to

 
advance (255,255);   //move forward in max speed
delay(1000);
back_off (255,255);
delay(1000);
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

PrEmO, To teraz spokojnie powinieneś sobie poradzić z pozostałym kodem. Musisz zamienić funkcję z diyhack... tam gdzie jest skręt

right.write(liczba);

na

 turn_R (100,100);

liczby musisz dobrać doświadczalnie, na początek zmniejsz drugie 100 na np. 30

To samo zrób z left. Tam gdzie jest forward wstaw advance.

Została dość prosta część, teraz próbuj sam i eksperymentuj. Za jakieś pół godziny sprawdzę co z tego wyszło, bo teraz nie mam już czasu

Link do komentarza
Share on other sites

Zapewne zrobiłem to źle ale próbowałem

#include <Servo.h> 

Servo left;
Servo right; 

int mid = 0;
int mn = 0;
int mx = 0;

void setup()
{

turn_F (100,100); //left servo motor
turn_R (100,100); //right servo motor

Serial.begin(115200);

digitalWrite(13, LOW);

turn_R(90);//stop signal
turn_F(90);//stop signal

for(int i=0; i<5000; i++)
{
digitalWrite(13, HIGH);

int val = 0;
for(int j=0; j<=5; j++)//Calibrating the sensor, finding max and 
{                      //min reflectance values.
val = analogRead(j);
if(val >= mx)
mx = val;
if(val <= mn)
mn = val;
}
delay(1);
}

mid = ((mx + mn)/2);
digitalWrite(13, LOW);

turn_R (90);
turn_F(90);
}

void loop()
{

int s0 = 0;
int s1 = 0;
int s2 = 0;
int s3 = 0;
int s4 = 0;
int s5 = 0;

s0 = analogRead(0);//Signal pin 1 on the board
s1 = analogRead(1);//Signal pin 2 on the board
s2 = analogRead(2);//Signal pin 3 on the board
s3 = analogRead(3);//Signal pin 4 on the board
s4 = analogRead(4);//Signal pin 5 on the board
s5 = analogRead(5);//Signal pin 6 on the board

Serial.print("Mid: ");
Serial.print(mid); 
Serial.print(" ");
Serial.print(s0); 
Serial.print(" ");
Serial.print(s1); 
Serial.print(" ");
Serial.print(s2); 
Serial.print(" ");
Serial.print(s3); 
Serial.print(" ");
Serial.print(s4); 
Serial.print(" ");
Serial.print(s5); 
Serial.print(" ");
Serial.println();

right.write(180);//Move advance
left.write(0);//Move advance

delay(1);

if((((s0+s1+s2)/3)>(((s3+s4+s5)/3)+240)))//Move right
{
turn_R (130);//180
turn_F (90);//90
Serial.print(" RIGHT");
delay(abs((((s5+s4+s3)/3)-((s0+s1+s2)/3))/2));
}

if((((s0+s1+s2)/3)<(((s3+s4+s5)/3)-240)))//Move left
{
turn_R (40);//90
turn_F (0);//0
Serial.print(" LEFT");
delay(abs((((s5+s4+s3)/3)-((s0+s1+s2)/3))/2));
}

if((s0 > mid)&&(s5 > mid))//Stop if all the sensors give low 
{                         //reflectance values
turn_R (90);
turn_F (90);
Serial.print(" STOP");

for(int k=0; k<50; k++)
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
}
delay(5000);
}


}
Link do komentarza
Share on other sites

PrEmO, Mam kilka pytań:

1.Ile masz lat?

2.Czy to projekt na zaliczenie?

3.Czy masz choć trochę oleju w głowie?

Nie dodałeś nawet deklaracji funkcji do kodu, wpisałeś na ślepo bez zastanowienia nazwy funkcji mimo że we wstawionym przez mnie kodzie jest wszystko objaśnione. Nie mam ochoty być frajerem i pisać ci kodu, bo widzę że nie masz o programowaniu zielonego pojęcia.

Co wogóle oznacza turn_F ? Powinieneś wywalić z kodu wszystko co związane z biblioteką servo.h

Na przyszłość nie podejmuj się czegoś jeśli nie jesteś pewny czy ci się to uda.

Link do komentarza
Share on other sites


//Standard PWM DC control
int E1 = 5;     //M1 Speed Control
int E2 = 6;     //M2 Speed Control
int M1 = 4;    //M1 Direction Control
int M2 = 7;    //M1 Direction Control

int mid = 0;
int mn = 0;
int mx = 0;

void stop(void)                    //Stop
{
 digitalWrite(E1,LOW);   
 digitalWrite(E2,LOW);      
}   
void advance(char a,char b)          //Move forward
{
 analogWrite (E1,a);      //PWM Speed Control
 digitalWrite(M1,HIGH);    
 analogWrite (E2,b);    
 digitalWrite(M2,HIGH);
}  
void back_off (char a,char b)          //Move backward
{
 analogWrite (E1,a);
 digitalWrite(M1,LOW);   
 analogWrite (E2,b);    
 digitalWrite(M2,LOW);
}
void turn_L (char a,char b)             //Turn Left
{
 analogWrite (E1,a);
 digitalWrite(M1,LOW);    
 analogWrite (E2,b);    
 digitalWrite(M2,HIGH);
}
void turn_R (char a,char b)             //Turn Right
{
 analogWrite (E1,a);
 digitalWrite(M1,HIGH);    
 analogWrite (E2,b);    
 digitalWrite(M2,LOW);
}

void setup()
{
int i;
 for(i=4;i<=7;i++)
   pinMode(i, OUTPUT);  

Serial.begin(115200);

digitalWrite(13, LOW);

for(int i=0; i<5000; i++)
{
digitalWrite(13, HIGH);

int val = 0;
for(int j=0; j<=5; j++)//Calibrating the sensor, finding max and 
{                      //min reflectance values.
val = analogRead(j);
if(val >= mx)
mx = val;
if(val <= mn)
mn = val;
}
delay(1);
}

mid = ((mx + mn)/2);
digitalWrite(13, LOW);


}

void loop()
{

int s0 = 0;
int s1 = 0;
int s2 = 0;
int s3 = 0;
int s4 = 0;
int s5 = 0;

s0 = analogRead(0);//Signal pin 1 on the board
s1 = analogRead(1);//Signal pin 2 on the board
s2 = analogRead(2);//Signal pin 3 on the board
s3 = analogRead(3);//Signal pin 4 on the board
s4 = analogRead(4);//Signal pin 5 on the board
s5 = analogRead(5);//Signal pin 6 on the board

Serial.print("Mid: ");
Serial.print(mid); 
Serial.print(" ");
Serial.print(s0); 
Serial.print(" ");
Serial.print(s1); 
Serial.print(" ");
Serial.print(s2); 
Serial.print(" ");
Serial.print(s3); 
Serial.print(" ");
Serial.print(s4); 
Serial.print(" ");
Serial.print(s5); 
Serial.print(" ");
Serial.println();

advance (255,255);//Move forward


delay(1);

if((((s0+s1+s2)/3)>(((s3+s4+s5)/3)+240)))//Move right
{
turn_R (100,100);
Serial.print(" RIGHT");
delay(abs((((s5+s4+s3)/3)-((s0+s1+s2)/3))/2));
}

if((((s0+s1+s2)/3)<(((s3+s4+s5)/3)-240)))//Move left
{
turn_L (100,100);
Serial.print(" LEFT");
delay(abs((((s5+s4+s3)/3)-((s0+s1+s2)/3))/2));
}

if((s0 > mid)&&(s5 > mid))//Stop if all the sensors give low 
{                         //reflectance values
stop();
Serial.print(" STOP");

for(int k=0; k<50; k++)
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
}
delay(5000);
}


}

Próbuj padam na twarz, a kod może być błędny

[ Dodano: 14-06-2015, 22:19 ]

I napisz czy coś z tego wyszło

  • Lubię! 1
Link do komentarza
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!

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

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.