Hallo Gemeinde,
zuerst eine kurze Beschreibung
ich betreibe einen 12V Spindelantrieb über eine Motorsteuerung mit dem L289. Die Stromaufnahme des Motors messe ich über einen 0,5 Ohm /20W Wiederstand am analog Eingang, auf der Achse des Motors sitzt ein Drehgeber den ich an einem weiteren analog Eingang angeschlossen habe um die Stellung zu erfassen.
Der Antrieb steuert in mehreren Umdrehungen eine Klappe um jeweils 20cm auf/zu.
Damit ich die Klappe ordentlich ansprechen kann benötige ich die beiden Endwerte der Klappe, hierzu wird die Klappe auf eine definierte Stellung gefahren bis der Motorstrom zu hoch wird und der Drehgeberwert wird gespeichert. Am Ende sollen die beiden Drehgeber Werte in den Variablen stehen und die Klappe geöffnet sein.
Die Hardware funktioniert soweit. Motor lässt sich hin und her fahren mit dem entsprechenden H/L wechsel, der Strom wird richtig gemessen und auch der Drehgeber liefert seine Werte.
leider funktioniert es nicht, der Motor läuft nicht los und in den Variablen werden jeweils die Werte der derzeitigen Stellung gespeichert.
Hier der Sketch, was mach ich falsch?
char versionsText [] = "Version_1.0"; //für Ausgabe auf Display welche Version läuft
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,20,4); // setzen der LCD Adresse auf0x27, 20 Zeichen und 4 Zeilen
int klappenmotorSensor = 1; // Motorstrom an Pin A1
int klappenStellungsensor = 2; // Klappenstellungs Sensor an PIN A2
int klappenSteuerung1 = 11; // Pin 11 H und Pin 12 L dann Motor zu
int klappenSteuerung2 = 12; // Pin 11 L und Pin 12 H dann Motor auf
int sensorStrom; // Stromaufnahme Klappenmotor
int stellungKlappe_auf; //Stellung der Klappe Wert
int stellungKlappe_zu; //Stellung der Klappe Wert
float strom; // max. 3A
void setup()
{
pinMode(klappenSteuerung1, OUTPUT);
pinMode(klappenSteuerung2, OUTPUT);
// Motor steht
digitalWrite (klappenSteuerung1, LOW); // beide je L Motor steht
digitalWrite (klappenSteuerung2, LOW); // beide je L Motor steht
// Variablen auf 0 setzen
strom = 0;
stellungKlappe_auf = 0;
stellungKlappe_zu = 0;
// Klappe zu fahren um den Start zu definieren, wenn schon zu dann Abschaltung ohne fahrt
while (strom == 2.5)
{
digitalWrite (klappenSteuerung1, LOW);
digitalWrite (klappenSteuerung2, HIGH);
sensorStrom = analogRead(klappenmotorSensor); //lesen den Sensorwert in Pin A1 ein
strom =(sensorStrom / 100);
}
digitalWrite (klappenSteuerung2, LOW); // Motor stopp
digitalWrite (klappenSteuerung1, LOW);// Motor stopp
// Klappe auf und Wert für Klappensensor abfragen
while (strom == 2.5)
{
digitalWrite (klappenSteuerung1, HIGH);
digitalWrite (klappenSteuerung2, LOW);
sensorStrom = analogRead(klappenmotorSensor); //lesen den Sensorwert in Pin A1 ein
strom =(sensorStrom / 100);
}
digitalWrite (klappenSteuerung2, LOW); // Motor stopp
digitalWrite (klappenSteuerung1, LOW);// Motor stopp
stellungKlappe_auf = analogRead(klappenStellungsensor); // einlesen Klappensensor Stellung auf
// Klappe zu und Wert für Klappensensor abfragen
while (strom == 2.5)
{
digitalWrite (klappenSteuerung1, LOW);
digitalWrite (klappenSteuerung2, HIGH);
sensorStrom = analogRead(klappenmotorSensor); //lesen den Sensorwert in Pin A1 ein
strom =(sensorStrom / 100);
}
digitalWrite (klappenSteuerung2, LOW); // Motor stopp
digitalWrite (klappenSteuerung1, LOW);// Motor stopp
stellungKlappe_zu = analogRead(klappenStellungsensor); // einlesen Klappensensor Stellung zu
// Klappe wieder auf zum starten der Steuerung im Loop
while (stellungKlappe_auf == klappenStellungsensor)
{
digitalWrite (klappenSteuerung1, HIGH);
digitalWrite (klappenSteuerung2, LOW);
analogRead(klappenStellungsensor); // einlesen Klappensensor Stellung auf
sensorStrom = analogRead(klappenmotorSensor); //lesen den Sensorwert in Pin A1 ein
strom =(sensorStrom / 100);
//Schutz falls der Geberwert nicht funktioniert erolgt hier eine Abschaltung
if (strom > 3.0)
{
digitalWrite (klappenSteuerung1, LOW); // beide je L Motor steht
digitalWrite (klappenSteuerung2, LOW); // beide je L Motor steht
break; // Schleife verlassen
}
}
///////////////// initialisieren serielle Schnittstelle auf 9600 Baud /////////////////
Serial.begin(9600);
Serial.println(versionsText);
///////////////// initialisiere lcd /////////////////
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(versionsText);
lcd.setCursor(0, 2);
lcd.print("Klappe auf ");
lcd.setCursor(11,2);
lcd.print(stellungKlappe_auf);
lcd.setCursor(0, 3);
lcd.print("Klappe zu ");
lcd.setCursor(11,3);
lcd.print(stellungKlappe_zu);
} //Setup Ende
void loop()
{
}