HC-SR04 sensor

algemene C code
Berichten: 3
Geregistreerd: 27 Mei 2014, 19:13

HC-SR04 sensor

Berichtdoor SeVack » 27 Mei 2014, 19:52

Hallo iedereen,

Ik ben nieuw op dit forum en heb meteen een vraag. Ik ben bezig met het programmeren van een robotarm (met stappenmotoren) waarbij ik als microcontroller de Arduino Uno gebruik. Nu wil ik met deze robotarm een object volgen. De X- en Y-as bewegen via Gcode die ik gegenereerd heb met MATLAB. De Z-as, daarentegen, zou ik willen gebruiken om steeds op een zelfde afstand (bijvoorbeeld 2 cm) van het object te blijven. Hiervoor gebruik ik dan een afstandssensor, de HC-SR04 ultrasoon sensor.
Programma's zoals Matlab zijn geen probleem voor me, maar Arduino is toch nieuw voor me :) .

Hetgeen ik reeds heb (in grote lijnen):

// steeds op zelfde afstand van het object blijven


#include <Stepper.h>
#include <AFmotor.h>
#include <AccelStepper.h>

#define TrigPin 2
#define EchoPin 3

#define stepPin A4
#define dirPin A3
#define motorSteps 400

Stepper motor(motorSteps, dirPin, stepPin);

//dit is de afstand die men ingeeft, dit is in centimeters
int desiredDistance = 2;
const int STOP = 0;

long duration, distance;


void setup (){

Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(dirPin, OUTPUT);
pinMode(stepPin, OUTPUT);

motor.setSpeed(100);
}

int CheckDistance()
{
long duration, distance;
digitalWrite(TrigPin, LOW); // Added this line
delayMicroseconds(2); // Added this line

digitalWrite(TrigPin, HIGH);
// delayMicroseconds(1000); - Removed this line
delayMicroseconds(10); // Added this line
digitalWrite(TrigPin, LOW);
duration = pulseIn(EchoPin, HIGH);
distance = (duration/2) / 29.1;

return distance;
}
void loop (){

int testDistance = CheckDistance();
Serial.println(testDistance);

if(testDistance >desiredDistance)
{
Serial.println("Out of range, Moving forward");
motorBackward();
}
else if(testDistance <desiredDistance);
{
Serial.println("Out of range, moving backward");
motorForward();
}
else{
(testDistance ==desiredDistance);
Serial.println(testDistance);

}

delay(50);
}

void motorForward()
{
......
}

void motorBackward()
{
.......
}

}

Ik zou de stappenmotor dus voorwaarts of achterwaarts willen laten bewegen totdat de z-as weer 2cm verwijderd is van het object. Dit moet dan om de zoveel tijd (een halve seconde) opnieuw bekeken worden om te zien of de as nog op de juiste afstand staat.

Hoe zou ik dit kunnen doen?

Alvast bedankt

Groeten,

Sepp

Advertisement

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

Re: HC-SR04 sensor

Berichtdoor shooter » 27 Mei 2014, 22:02

uiteraard eerst welkom, arduino is gewoon een programmeertaal, met een paar typische dingen.

dan je robotarm:
vraag van je matlab simpele posities, want deze moet je toch vertalen van cartesisch (x.y.z) naar polair(hoeken van armen)
dat betekent dus nogal wat rekenwerk in je arduino, maar daar bestaan nogal wat bibliotheken voor. dus geen probleem.

ik zag 3 stepper libraries, hou het bij 1.
in de loop een timer zetten die elke 100 ms naar een subroutine springt die even naar de hoogte kijkt.
als de hoogte gecorrigeerd moet worden dan verander je de z correctie,

hou ons op de hoogte
paul deelen
shooter@home.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 32 gasten