Hulp met ons Profielwerkstuk

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 6
Geregistreerd: 20 Aug 2015, 11:38

Hulp met ons Profielwerkstuk

Berichtdoor Riponsproject » 20 Nov 2015, 17:04

Hallo,

ik en een vriend doen ons profielwerkstuk over zelfrijdende auto's maar zijn tegen een probeem aangelopen tijdens het programmeren. Wij hebben 2 Pingsensors aangesloten op onze Arduino Mega maar als wij onze code erop zetten werkt maar 1 van de 2 sensoren die wij hebben aangesloten. Kan iemand ons helpen hiermee? alvast bedankt
cpp code
// Ping sensor 1
int trigPinR = 13; // rechts
int echoPinR = 12; // rechts

//Ping sensor 2
int trigPinL = 11; // links
int echoPinL = 10; // links

//Motoren
int E1 = 4; // Motor Rechts
int M1 = 5; // Motor Rechts
int E2 = 7; // Motor Links
int M2 = 6; // Motor Links

void setup() {
Serial.begin (9600);
pinMode(trigPinR, OUTPUT);
pinMode(echoPinR, INPUT);
pinMode(trigPinL, OUTPUT);
pinMode(echoPinL, INPUT);
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(E1, OUTPUT);
pinMode(E2, OUTPUT);

}

void loop() {
int value;
int valueL;
long durationR, distanceR;
long durationL, distanceL;


digitalWrite(trigPinR, LOW);
digitalWrite(trigPinL, LOW);

delayMicroseconds(2);
digitalWrite(trigPinR, HIGH);
digitalWrite(trigPinL, HIGH);

delayMicroseconds(10);
digitalWrite(trigPinR, LOW);
digitalWrite(trigPinL, LOW);


durationR = pulseIn(echoPinR, HIGH);
durationL = pulseIn(echoPinL, HIGH);

distanceR = (durationR / 2) / 29.1;
distanceL = (durationL / 2) / 29.1;



if (distanceR >= 60 || distanceR <= 0)
{
for (value = 0 ; value <= 255; value += 5)
{
digitalWrite(E2, HIGH);
analogWrite(M2, value);
}
}
else
{
for (value = 0 ; value <= 255; value+=5)
{
digitalWrite(E2, LOW);
analogWrite(M2, value);
}


}

if (distanceL >= 60 || distanceL <= 0)
{
for (valueL = 0; valueL <= 255; valueL += 5)
{
digitalWrite(E1, HIGH);
analogWrite(M1, valueL);
}
}
else
{
for (valueL = 0 ; valueL <= 255; value+=5)
{
digitalWrite(E1, LOW);
analogWrite(M1, valueL);
}
}

delay(500);
}

Advertisement

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hulp met ons Profielwerkstuk

Berichtdoor shooter » 21 Nov 2015, 11:34

pulseIn is een blocking code, ofwel de processor wacht tot er een puls binnenkomt, voordat het spul verder gaat, dus

cpp code
digitalWrite(trigPinR, LOW);  
delayMicroseconds(2);
digitalWrite(trigPinR, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinR, LOW);
durationR = pulseIn(echoPinR, HIGH);

digitalWrite(trigPinL, LOW);
delayMicroseconds(2);
digitalWrite(trigPinL, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinL, LOW);
durationL = pulseIn(echoPinL, HIGH);

zal wel werken.
een betere oplossing is om Links en Rechts af te wisselen, je programma lijkt dan op een waggeleend, maar omdat je arduino zo snel is merk je dat niet.

het stukje hierboven in een functie zetten en dan dus bijv. durationL = puls(links) in je loop zetten.
ik hou van kleine stukken code, liefst op een bladzijde een stukje.


verder een typefouten controle doen ik zag value staan en dat moet ValueL zijn.

ook de snelheid zul je moeten herschrijven en niet doen met for loops

stel even de afstand is 20 cm voor links
de gewenste afstand is 15 cm, dat betekent dat de motor mag versnellen, dus een stapje erbij.
als de afstand 13 cm is dan motor vertragen dus -= doen.

extra opdracht is om de versnelling afhankelijk te maken van het verschil tussen gemeten en gewenst.

extra bedenken waar die pulseIn eigenlijk moet staan, danwel een tabel maken met afstanden want gewoon delen door 29.1 is niet genoeg.
paul deelen
shooter@home.nl

Berichten: 6
Geregistreerd: 20 Aug 2015, 11:38

Re: Hulp met ons Profielwerkstuk

Berichtdoor Riponsproject » 23 Nov 2015, 15:43

ook de snelheid zul je moeten herschrijven en niet doen met for loops

Wat kunnen wij als vervanging gebruiken voor de motor besturing? Wij hebben op internet gezocht maar kunnen niet vinden voor iets wat bij ons project zou kunnen.

een betere oplossing is om Links en Rechts af te wisselen, je programma lijkt dan op een waggeleend, maar omdat je arduino zo snel is merk je dat niet.

Hoe zouden wij dit moeten doen? Wij zijn niet ervaren met het gebruiken en coderen van een Arduino dus wij weten niet hoe wij dit zouden moeten doen. Dit is ons eerste project :D .

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hulp met ons Profielwerkstuk

Berichtdoor shooter » 24 Nov 2015, 10:46

begin hier eens mee,
de kar zal wel flink springen, maar dit is een begin.
zoek eens op Rover dan vindt je wat je zoekt.
(ja ik heb een heel mooi uitgebreid programma, maar zoals je weet is het een schoolprojekt en zul je het zelf moeten uitzoeken.
en ja ik heb graag dat je de leraar over mij verteld.



cpp code
// Ping sensor 1
int trigPinR = 13; // rechts
int echoPinR = 12; // rechts

//Ping sensor 2
int trigPinL = 11; // links
int echoPinL = 10; // links

//Motoren
int E1 = 4; // Motor Rechts
int M1 = 5; // Motor Rechts
int E2 = 7; // Motor Links
int M2 = 6; // Motor Links

void setup() {
Serial.begin (9600);
pinMode(trigPinR, OUTPUT);
pinMode(echoPinR, INPUT);
pinMode(trigPinL, OUTPUT);
pinMode(echoPinL, INPUT);
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(E1, OUTPUT);
pinMode(E2, OUTPUT);

}

void loop() {
int valueR=234;
int valueL=243;
long durationR, distanceR;
long durationL, distanceL;


digitalWrite(trigPinR, LOW);
delayMicroseconds(2);
digitalWrite(trigPinR, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinR, LOW);
durationR = pulseIn(echoPinR, HIGH);

digitalWrite(trigPinL, LOW);
delayMicroseconds(2);
digitalWrite(trigPinL, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinL, LOW);
durationL = pulseIn(echoPinL, HIGH);


distanceR = (durationR / 2) / 29.1;
distanceL = (durationL / 2) / 29.1;



if (distanceR >= 60 || distanceR <= 0)
{

digitalWrite(E2, HIGH);
analogWrite(M2, valueR);

}
else
{
digitalWrite(E2, LOW);
analogWrite(M2, valueR);



}

if (distanceL >= 60 || distanceL <= 0)
{
digitalWrite(E1, HIGH);
analogWrite(M1, valueL);
}
}
else
{
digitalWrite(E1, LOW);
analogWrite(M1, valueL);
}

delay(500);
}
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Hulp met ons Profielwerkstuk

Berichtdoor nicoverduin » 24 Nov 2015, 11:59

shooter schreef:en ja ik heb graag dat je de leraar over mij verteld.

Die paul toch :mrgreen:
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 20 Aug 2015, 11:38

Re: Hulp met ons Profielwerkstuk

Berichtdoor Riponsproject » 08 Dec 2015, 13:00

Hallo,
Wij hebben de code die u hebt gegeven geprobeerd, maar ook met deze code werkt dit niet. We hebben geprobeerd om de snelheid van High en Low van te voren gedefineerd te laten zijn met Value1 en Value2 cpp code
// Ping sensor 1
int trigPinR = 13; // rechts
int echoPinR = 12; // rechts

//Ping sensor 2
int trigPinL = 11; // links
int echoPinL = 10; // links

//Motoren
int E1 = 4; // Motor Rechts
int M1 = 5; // Motor Rechts
int E2 = 7; // Motor Links
int M2 = 6; // Motor Links

void setup() {
Serial.begin (9600);
pinMode(trigPinR, OUTPUT);
pinMode(echoPinR, INPUT);
pinMode(trigPinL, OUTPUT);
pinMode(echoPinL, INPUT);
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
pinMode(E1, OUTPUT);
pinMode(E2, OUTPUT);

}

void loop() {
int valueX=255;
int valueY=-255;
long durationR, distanceR;
long durationL, distanceL;


digitalWrite(trigPinR, LOW);
delayMicroseconds(2);
digitalWrite(trigPinR, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinR, LOW);
durationR = pulseIn(echoPinR, HIGH);

digitalWrite(trigPinL, LOW);
delayMicroseconds(2);
digitalWrite(trigPinL, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinL, LOW);
durationL = pulseIn(echoPinL, HIGH);


distanceR = (durationR / 2) / 29.1;
distanceL = (durationL / 2) / 29.1;



if (distanceR >= 30 || distanceR <= 0)
{

digitalWrite(E2, HIGH);
analogWrite(M2, valueX);

}
else
{
digitalWrite(E2, LOW);
analogWrite(M2, valueY);



}

if (distanceL >= 30 || distanceL <= 0)
{
digitalWrite(E1, HIGH);
analogWrite(M1, valueX);

}
else
{
digitalWrite(E1, LOW);
analogWrite(M1, valueY);
}

delay(500);
}


Kunt u ons snel helpen, want wij moeten vanavond deze auto voltooid hebben voor onze profielwerkstuk presentatie

Met voorbaat dank

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Hulp met ons Profielwerkstuk

Berichtdoor nicoverduin » 08 Dec 2015, 13:17

Als je een getal neemt als long en deze deelt door een float, komt er nog steeds een long uit met onverwachte afkappingen.
En wat werkt er niet?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 20 Aug 2015, 11:38

Re: Hulp met ons Profielwerkstuk

Berichtdoor Riponsproject » 08 Dec 2015, 13:19

bedankt voor de reactie, maar omdat we tijd te kort komen en vanavond moeten presenteren hebben we besloten om met 1 sensor verder te gaan.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Hulp met ons Profielwerkstuk

Berichtdoor nicoverduin » 08 Dec 2015, 13:27

Welke sensoren gebruiken jullie eigenlijk?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Hulp met ons Profielwerkstuk

Berichtdoor shooter » 08 Dec 2015, 20:18

succes,
maar ik denk dat jullie werkstuk is afgekeurd,
van 24 nov. tot 8 dec. helemaal niets gedaan.
laat leraar maar even mailen, dan krijg je misschien nog een week erbij.
paul deelen
shooter@home.nl

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 45 gasten