Ich versuche für ein Schulprojekt den Haft- und den Gleitreibungskoeffizienten mithilfe der Simulation einer schiefen Ebene zu berechnen. Ein Schrittmotor zieht eine Rampe über einen Seilzug hoch. Auf der Rampe befindet sich ein Objekt, das ab einem bestimmten Winkel von der Rampe abrutscht. Das Abrutschen soll mit einem Ultraschallabstandssensor (HC-SR04) aufgefangen werden. An dem Punkt an dem das Objekt abrutscht, soll sich der Schrittmotor aufhören zu drehen und mithilfe eines 3-Achsen Beschleunigungssensors soll der aktuelle Winkel der Rampe für die Berechnung des Haftreibungskoeffizienten ausgegeben werden. Für die Berechnung des Gleitreibungskoeffizienten soll der Ultraschallsensor auch den Weg des Objekts auffangen, um die Beschleunigung zu berechnen. Derzeit scheitert es jedoch daran den Schrittmotor den mein Projektpartner programmiert hat mit dem Ultraschallsensor zu verbinden. Der Schrittmotor soll aufhören sich zu drehen wenn das Objekt auf der Rampe sich bewegt.
Code für den Schrittmotor:
#include <Arduino.h>
#include <Stepper.h>
const int stepsPerRevolution = 200;
#define pwmA 3
#define pwmB 11
#define brakeA 9
#define brakeB 8
#define dirA 12
#define dirB 13
#define PIN_TRIGGER 7
#define PIN_ECHO 6
#define PIN_PIEZO 5
int off = 0;
int up = 1;
int down = 2;
int motorState;
// Initialize the stepper library on the motor shield:
Stepper myStepper = Stepper(stepsPerRevolution, dirA, dirB);
char buffer[10];
void setup()
{
// Set the PWM and brake pins so that the direction pins can be used to control the motor:
pinMode(pwmA, OUTPUT);
pinMode(pwmB, OUTPUT);
pinMode(brakeA, OUTPUT);
pinMode(brakeB, OUTPUT);
digitalWrite(pwmA, HIGH);
digitalWrite(pwmB, HIGH);
digitalWrite(brakeA, LOW);
digitalWrite(brakeB, LOW);
Serial.begin(9600);
pinMode(PIN_TRIGGER, OUTPUT);
pinMode(PIN_ECHO, INPUT);
for (byte pin=2; pin<=10; pin++)
{
pinMode(pin, OUTPUT);
}
// Set the motor speed (RPMs):
myStepper.setSpeed(25);
Serial.begin(9600);
}
void loop()
{
byte command;
// check if data has been sent from the computer:
if (Serial.available())
{
//read the most recent byte (which will be from 0 to 255):
command = Serial.read();
sprintf(buffer, "c: %c", command);
Serial.println(buffer);
}
if(command == 'o')
{
motorState = 0;
}
else if(command == 'u')
{
motorState = 1;
}
else if(command == 'd')
{
motorState = 2;
}
if(motorState == 1)
{
Serial.println(motorState);
myStepper.step(-500);
delay(20);
}
else if(motorState == 2)
{
Serial.println(motorState);
myStepper.step(500);
delay(20);
}
}
Code für den Ultraschallabstandssensor (HC-SR04)
#include <Arduino.h>
#define PIN_TRIGGER 12
#define PIN_ECHO 13
const int SENSOR_MAX_RANGE = 3000; // in mm
unsigned long duration;
unsigned int distance;
unsigned int oldDistance = distance;
void setup()
{
Serial.begin(9600);
pinMode(PIN_TRIGGER, OUTPUT);
pinMode(PIN_ECHO, INPUT);
}
void loop()
{
digitalWrite(PIN_TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIGGER, HIGH);
delayMicroseconds(10);
duration = pulseIn(PIN_ECHO, HIGH);
distance = duration/5.8;
if (distance > oldDistance+3)
{
Serial.println("Objekt rutscht!");
}
else
{
Serial.println("Distance to object: " + String(distance) + "mm");
}
oldDistance = distance;
delay(500);
}
Skizze des Prototyps: