Tack för tips från er alla!
Nu har jag monterat Arduino Uno och reläkort på den stålplatta som originalkortet satt på (till vänster är det ett nätagg till Arduinon):
IMG_3784.jpg
Så här ser orginalkortet ut:
IMG_3783.jpg
Jag har gjort programmet och det funkar bra på testbänken iaf, sen får jag justera för skillnader i resistans mellan pottarna när det väl är monterat.
Tryckknapparna för upp/ned/nödstopp är från biltema, riktigt bra faktiskt:
IMG_3785.jpg
Genom att att använda NC-kontakterna på tryckknapparna kan jag hårdvarumässigt förhindra att bägge tryckknapparna trycks in, även om det blockas mjukvarumässigt med.
Nödstoppet kopplas till en huvudkontaktor som bryter spänningen till samtliga delar. Jag tänker mig att jag trycker in den så fort rätt lyfthöjd är inställd, då bör inget kunna hända.
Gränslägesbrytarna kopplas in mellan Arduino och reläkort och reläerna styr i sin tur 4 st 3-faskontaktorer.
Här kommer koden:
Kod: Markera allt
int buttonRaise = 2; // tryckknapp för att höja på 2
int buttonLower = 3; // tryckknapp för att sänka 3
int leftPot = 1; // vänster potentiometer
int rightPot = 0; // höger potentiometer
int rightRaise = 8; // relä höjning höger
int rightLower = 9; // relä sänkning höger
int leftRaise = 10; // relä höjning vänster
int leftLower = 11; // relä sänkning vänster
int potDiff = 0; // skillnaden mellan pot V och pot H
void setup()
{
pinMode(buttonLower, INPUT_PULLUP);
pinMode(buttonRaise, INPUT_PULLUP);
pinMode(leftPot, INPUT);
pinMode(rightPot, INPUT);
pinMode(rightRaise, OUTPUT);
pinMode(rightLower, OUTPUT);
pinMode(leftRaise, OUTPUT);
pinMode(leftLower, OUTPUT);
// Serial.begin(9600);
}
void loop()
{
int buttonStateRaise = digitalRead(buttonLower);
int buttonStateLower = digitalRead(buttonRaise);
int rightPotValue = analogRead(rightPot);
int leftPotValue = analogRead(leftPot);
potDiff = rightPotValue - leftPotValue; //skillnaden mellan de två pottarna
if(buttonStateRaise == HIGH && buttonStateLower == LOW) // om knappen för höjning trycks in
{
digitalWrite(rightLower, LOW); // inaktivera sänkningsrelä H
digitalWrite(leftLower, LOW); // inaktivera sänkningsrelä V
if(potDiff > 10) // om höger arm är högre än vänster
{
digitalWrite(rightRaise, LOW);
digitalWrite(leftRaise, HIGH);
}
else if(potDiff < -10) // om vänster arm är högre än höger
{
digitalWrite(rightRaise, HIGH);
digitalWrite(leftRaise, LOW);
}
else // lyft bägge armarna
{
digitalWrite(rightRaise, HIGH);
digitalWrite(leftRaise, HIGH);
}
}
else if(buttonStateRaise == LOW && buttonStateLower == HIGH) // om knappen för sänkning trycks in
{
digitalWrite(rightRaise, LOW); // inaktivera höjningsrelä H
digitalWrite(leftRaise, LOW); // inaktivera höjningsrelä V
if(potDiff > 10) // om höger arm är högre än vänster
{
digitalWrite(rightLower, HIGH);
digitalWrite(leftLower, LOW);
}
else if(potDiff < -10) // om vänster arm är högre än höger
{
digitalWrite(rightLower, LOW);
digitalWrite(leftLower, HIGH);
}
else // sänk bägge armarna
{
digitalWrite(rightLower, HIGH);
digitalWrite(leftLower, HIGH);
}
}
else // om ingen eller bägge knapparna trycks in, inaktivera alla utgångar
{
digitalWrite(rightRaise, LOW);
digitalWrite(leftRaise, LOW);
digitalWrite(rightLower, LOW);
digitalWrite(leftLower, LOW);
}
// Serial.print("potDiff: ");
// Serial.println(potDiff);
}
Återkommer med bilder på den färdiga installationen!
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.