Eindwerk Rolbrug arduino gestuurd

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 1
Geregistreerd: 24 Apr 2014, 20:22

Eindwerk Rolbrug arduino gestuurd

Berichtdoor ToonVangrunderbeek » 24 Apr 2014, 20:41

Hallo,
Ik ben een leerling in Don Bosco Haacht en heb een eindwerk af te maken...
Mijn onderwerp is een scriptie over een rolbrug hoe deze in het echt werkt, maar anderzijds ook hoe ik het zelf heb uitgewerkt.
Ik heb op een rolbrug van meccano (reeds bestaand) gekocht maar aangezien deze maar twee bewegingen heeft heb ik geprobeerd er een derde aan toe te voegen door middel van motoren ( http://iprototype.be/products/robotics/ ... r-hp-100:1 ) 2 langs beide kanten.
De afstandsbediening van de bestaande rolbrug heb ik aangepast, zodanig dat wanneer ik de knop naar voor of naar achter verplaats, de brug ook naar voor of achteruit zou moeten rijden,... Op de brug heb ik ook 2 ultrasone sensoren geplaatst. Wat de brug zou moeten doen : Wanneer ik de knop vooruit in duw zou de brug vooruit moeten gaan zolang ik deze ingedrukt houd. Hij moet wel stoppen indien de ultrasone sensor iets registreert op bv 3cm afstand (waarde niet echt belangrijk). Wanneer ik deze knop dan nog steeds vooruit activeer mag de brug dus niet rijden. Deze kan enkel nog in tegenover gestelde richting rijden indien ik de knop achteruit beweeg. Voor hetzelfde geld dus in de andere richting.
Het probleem is dat de ultrasone sensoren wel een signaal registreren, maar dat de brug hier totaal niet op reageert...
De motoren bewegen gewoon hele tijd heen en weer. Wat er wel gebeurd is dat wanneer ik mijn hand voor een van de sensors hou, dat de motoren stoppen met draaien...
Dat is het dan ook :)
Iemand een oplossing?

Programma :

#include<Ultrasonic.h>

int enableA = 9;
int pinA1 = 2;
int pinA2 = 3;
int enableB = 10;
int pinB1 = 4;
int pinB2 = 5;
const int pingPin = 7;
const int pingPin2 = 8;
long duration,duration2,cm,cm2;
const int pingPin3 = 12;
const int pingPin4 = 13;
const int knopvooruit = 6;
const int knopachteruit = 11;
int buttonState1 = 0;
int buttonState2 = 0;

void setup()
{
pinMode(enableA,OUTPUT);
pinMode(pinA1, OUTPUT);
pinMode(pinA2,OUTPUT);
pinMode(enableB,OUTPUT);
pinMode(pinB1, OUTPUT);
pinMode(pinB2,OUTPUT);
pinMode(knopvooruit, INPUT);
pinMode(knopachteruit,INPUT);
Serial.begin(9600); //initialisering van de seriele communicatie
}



void loop() {
//Definieer Ultrasone opdrachten:
// Eerst gaan we de pingPin als output gebruiken. We zette deze eerst op LOW zodat we een mooi en zuiver signaal kunnen sturen. Na 2ms een LOW signaal, zetten we een HIGH signaal op de pingPin gedurende 5microseconden.
pinMode(7, OUTPUT);
digitalWrite(7, HIGH);
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(4);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
buttonState1 = digitalRead(knopvooruit);
buttonState2 = digitalRead(knopachteruit);

//Om de tijd te weten tussen het versturen en ontvangen, zetten we de pingPin als input en luisteren we naar een signaal. Het aantal microseconden dat het signaal nodig heeft wordt opgeslagen in duration.
pinMode(pingPin2, INPUT);
duration = pulseIn(pingPin2, HIGH);
//Omdat duration een tijd is en geen afstand, wordt hier de conversie gemaakt.
cm = microsecondsToCentimeters(duration);

// Eerst gaan we de pingPin als output gebruiken. We zette deze eerst op LOW zodat we een mooi en zuiver signaal kunnen sturen. Na 2ms een LOW signaal, zetten we een HIGH signaal op de pingPin gedurende 5microseconden.
pinMode(12, OUTPUT);
digitalWrite(12, HIGH);
pinMode(pingPin3, OUTPUT);
digitalWrite(pingPin3, LOW);
delayMicroseconds(4);
digitalWrite(pingPin3, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin3, LOW);

//Om de tijd te weten tussen het versturen en ontvangen, zetten we de pingPin als input en luisteren we naar een signaal. Het aantal microseconden dat het signaal nodig heeft wordt opgeslagen in duration.
pinMode(pingPin4, INPUT);
duration2 = pulseIn(pingPin4, HIGH);

//Omdat duration een tijd is en geen afstand, wordt hier de conversie gemaakt.
cm2 = microsecondsToCentimeters(duration2);

Serial.print(cm);
Serial.print("cm");
Serial.println();
delay (200);

Serial.print(cm2);
Serial.print("cm2");
Serial.println();
delay (200);
boolean run ;

if (buttonState1 == HIGH)
{
Serial.print("vooruit");
if (cm < 10)
{
motorAstop ();
motorBstop ();
motorAoff ();
motorBoff ();
}

else
{
motorAvooruit ();
motorBvooruit ();
motorAOn ();
motorBOn ();

}
}

if (buttonState2 == HIGH)
{
Serial.print("achteruit");
if (cm2 > 10)
{
motorAachteruit ();
motorBachteruit ();
motorAOn ();
motorBOn ();
}
else
{
motorAstop ();
motorBstop ();
}
}

delay (100);
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds/29/2;
}

//motor sturingen (vooruit, achteruit, links, rechts)
void motorAvooruit()
{
digitalWrite(pinA1, HIGH);
digitalWrite(pinA2, LOW);
}

void motorAachteruit()
{
digitalWrite(pinA1, LOW);
digitalWrite(pinA2, HIGH);
}

void motorBvooruit()
{
digitalWrite(pinB1, HIGH);
digitalWrite(pinB2, LOW);
}

void motorBachteruit()
{
digitalWrite(pinB1, LOW);
digitalWrite(pinB2, HIGH);
}

void motorAstop()
{
digitalWrite (pinA1, LOW);
digitalWrite (pinA2, LOW);
}

void motorBstop()
{
digitalWrite (pinB1, LOW);
digitalWrite (pinB2, LOW);
}

//Definieer H-Brug opdrachten

//start motors
void motorAOn()
{
digitalWrite(enableA, HIGH);
}
void motorBOn()
{
digitalWrite(enableB, HIGH);
}
//stop motors
void motorAoff()
{
digitalWrite(enableA,LOW);
}
void motorBoff()
{
digitalWrite(enableB,LOW);
}

Advertisement

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

Re: Eindwerk Rolbrug arduino gestuurd

Berichtdoor shooter » 24 Apr 2014, 22:34

in de loop staan veel pinmode, die horen of boven setup, of in setup
nu wordt telkens gereset.
pingpin =7 dus dat is hetzelfde.
voor pingpin3 hetzelfde
je tijden kloppen niet
de comment is anders dan je programma,
in programma staat een uitgang en een aparte ingang voor elke ultra(das makkelijker,
// bereken afstand1 en 2
if cm1 < minimum (in setup instellen op 10) then afstand1 = true else false
nog een keer voor 2

als button1 and afstand1 dan beweging1 else beweging0
als button2 and afstand2 dan beweging2 else beweging0

beweging1
richtingmotor1 links
richtingmotor2 links
motor1 aan
motor2 aan

beweging2
richtingmotor1 rechts
richtingmotor2 rechts
motor1 aan
motor2 aan

beweging0
motor1 uit
motor2 uit

als dit werkt, maak dan de motoren met pwm dan kun je de snelheid instellen
volgende stap is optrekken en afremmen (met een timer en counter)
een delay stopt je programma dus je moet wachten tot je het resultaat van de ultra hebt, dan pas verder
paul deelen
shooter@home.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 7 gasten