Styra billyft med Arduino
-
- Inlägg: 4
- Blev medlem: 30 september 2017, 00:33:42
Styra billyft med Arduino
Hej, ny på forumet även om jag vid flera tillfällen hamnat här när jag googlat
Jag har haft en gammal tvåpelarlyft (Zippo) liggande i ett par år och nu när mitt garage är klart har jag äntligen börjat montera den.
Alla kablar måste bytas, men mekaniken och de två motorerna är ok. Tyvärr funkar inte styrkortet, kan vara ett par kondingar som behöver bytas.
Men, jag funderar på att skrota kortet och styra lyften med en Arduino istället.
Då skulle jag slippa dra kablar med nätspänning till gränslägesbrytarna och tryckknapparna, samt få en uppdaterad styrning.
Funktionen är så här:
- Varje pelare har en ca 2m lång trapetsgängad skruv som lyfter armarna.
- En trefasmotor driver vardera skruv
- i nedre änden av vardera skruv sitter en liten växellåda och på den en 500R potentiometer som mäter lyfthöjd
- Det finns gränslägesbrytare uppe som nere
- Vardera motor är kopplad till två kontaktorer (höj/sänk) som inte kan vara tillslagna samtidigt.
- Om armarna skiljer mer än 45mm i höjd så ska ena sidans kontaktor stängas av tills den andra "hunnit ikapp".
Det borde inte vara så avancerat att få till en programmering för Arduino som läser av två tryckknappar, fyra gränslägesbrytare och som läser av skillnaden mellan de två potentiometrarna och beroende på värdet och vilken tryckknapp som är intryckt, aktiverar rätt relä (-er) som i sin tur styr de fyra kontaktorena.
Min fråga är dock; törs man styra en sån pass, ur säkerhetssynvinkel, viktig funktion som en billyft med Arduino?
Jag har haft en gammal tvåpelarlyft (Zippo) liggande i ett par år och nu när mitt garage är klart har jag äntligen börjat montera den.
Alla kablar måste bytas, men mekaniken och de två motorerna är ok. Tyvärr funkar inte styrkortet, kan vara ett par kondingar som behöver bytas.
Men, jag funderar på att skrota kortet och styra lyften med en Arduino istället.
Då skulle jag slippa dra kablar med nätspänning till gränslägesbrytarna och tryckknapparna, samt få en uppdaterad styrning.
Funktionen är så här:
- Varje pelare har en ca 2m lång trapetsgängad skruv som lyfter armarna.
- En trefasmotor driver vardera skruv
- i nedre änden av vardera skruv sitter en liten växellåda och på den en 500R potentiometer som mäter lyfthöjd
- Det finns gränslägesbrytare uppe som nere
- Vardera motor är kopplad till två kontaktorer (höj/sänk) som inte kan vara tillslagna samtidigt.
- Om armarna skiljer mer än 45mm i höjd så ska ena sidans kontaktor stängas av tills den andra "hunnit ikapp".
Det borde inte vara så avancerat att få till en programmering för Arduino som läser av två tryckknappar, fyra gränslägesbrytare och som läser av skillnaden mellan de två potentiometrarna och beroende på värdet och vilken tryckknapp som är intryckt, aktiverar rätt relä (-er) som i sin tur styr de fyra kontaktorena.
Min fråga är dock; törs man styra en sån pass, ur säkerhetssynvinkel, viktig funktion som en billyft med Arduino?
Re: Styra billyft med Arduino
En Arduino är inget mer än en gammal mikroprocessor till ett högt pris. Men den är rikligt "säker" till detta.
Det osäkra ar programmet! Hur data avläsas, behandlas och filtreras, hur programmets flöde är och allt detta, DET är det viktigaste i säkerhet.
I slutändan är det alltså dig och din förmåga som programmör som avgör om den klarar jobbet på ett säkert sätt.
Det finns dock en grej som talar MOT Arduino just i detta fall: monteringen.
Glappkontakt står för 80-90% av fel i elektronikenheter och med tiden KOMMER de stiftlister att glappa.
Det gör programmet ÄN mer viktigt - då med avsikt på dess reaktion om det blir sensorfel eller annat.
Saker att tänka på:
Hur ska det avkännas att det blir sensorfel?
Vilka reaktioner ska komma vid sensorfel?
Hur återställer man?
samt allt annat som kan gå fel ska hanteras.
Alla kan göra ett program som fungerar när solen skiner, det är semester och alla är glade men mycket få kan göra dom så att de klarar säkerheten när precis allt skiter sig.
En billift är potentiellt livsfarlig så mycket omtanke ska till.
Det osäkra ar programmet! Hur data avläsas, behandlas och filtreras, hur programmets flöde är och allt detta, DET är det viktigaste i säkerhet.
I slutändan är det alltså dig och din förmåga som programmör som avgör om den klarar jobbet på ett säkert sätt.
Det finns dock en grej som talar MOT Arduino just i detta fall: monteringen.
Glappkontakt står för 80-90% av fel i elektronikenheter och med tiden KOMMER de stiftlister att glappa.
Det gör programmet ÄN mer viktigt - då med avsikt på dess reaktion om det blir sensorfel eller annat.
Saker att tänka på:
Hur ska det avkännas att det blir sensorfel?
Vilka reaktioner ska komma vid sensorfel?
Hur återställer man?
samt allt annat som kan gå fel ska hanteras.
Alla kan göra ett program som fungerar när solen skiner, det är semester och alla är glade men mycket få kan göra dom så att de klarar säkerheten när precis allt skiter sig.
En billift är potentiellt livsfarlig så mycket omtanke ska till.
-
- Inlägg: 4
- Blev medlem: 30 september 2017, 00:33:42
Re: Styra billyft med Arduino
Tack för svar!
Stiftlisterna har jag också funderat kring, men tanken är nog att i förlängningen ta bort dom och löda anslutningarna, alternativt använda en nano med skruvanslutningar.
Gränslägesbrytarna är brytande och manöverknapparna slutande, vilket borde säkra upp lite mot kabelbrott och glapp.
Potentiometrarna får jag göra nån säkring för i programmeringen mot kabelbrott/felfunktion antar jag och sen kompletterar jag kanske med ett nödstopp som bryter manöverströmmen till en extra huvudkontaktor som stänger av allt, utifall arduinon skulle få "spel".
Inser att mycket hänger på bra programmering, vilket nog tyvärr är min svagaste punkt .
Börjar med att skissa upp ett bra flödesschema så får vi se..
Stiftlisterna har jag också funderat kring, men tanken är nog att i förlängningen ta bort dom och löda anslutningarna, alternativt använda en nano med skruvanslutningar.
Gränslägesbrytarna är brytande och manöverknapparna slutande, vilket borde säkra upp lite mot kabelbrott och glapp.
Potentiometrarna får jag göra nån säkring för i programmeringen mot kabelbrott/felfunktion antar jag och sen kompletterar jag kanske med ett nödstopp som bryter manöverströmmen till en extra huvudkontaktor som stänger av allt, utifall arduinon skulle få "spel".
Inser att mycket hänger på bra programmering, vilket nog tyvärr är min svagaste punkt .
Börjar med att skissa upp ett bra flödesschema så får vi se..
Re: Styra billyft med Arduino
Om det gäller hobbyverkstad så KAN man ju skrota all styrning utom gränslägena och ha knappdosa på kabel och styra manuellt, vilket har fördelen att man då inom vissa gränser naturligtvis, kan snedställa karossen för ev. svetsning av balkars insidor så man ser vad man gör. Hade inte min gamla lyft haft en enda kolv och vajrar (gammal Kone) hade jag utan tvekan gjort så.
Re: Styra billyft med Arduino
Finns arduino utan stiftlister, så man kan löda dit kablar.
Men ändlägesbrytare och tryckknappar behöver väl inte gå via Arduinon?
Räcker väl om den håller reda på höjdskillnaden?
Men ändlägesbrytare och tryckknappar behöver väl inte gå via Arduinon?
Räcker väl om den håller reda på höjdskillnaden?
-
- Inlägg: 4
- Blev medlem: 30 september 2017, 00:33:42
Re: Styra billyft med Arduino
Teknikern: Ja, det kan bli en sån lösning med, men det vore lite roligt att få till det med arduinon .
Skulle vara lite finurligt med en dubbelmomentan som man mekaniskt kunde frånskilja för att köra motorerna enskilt. Nån slags bygel att flippa upp
Skogen: Sant, jag kan förstås sätta gränslägesbrytarna mellan Arduino och reläkort!
Skulle vara lite finurligt med en dubbelmomentan som man mekaniskt kunde frånskilja för att köra motorerna enskilt. Nån slags bygel att flippa upp
Skogen: Sant, jag kan förstås sätta gränslägesbrytarna mellan Arduino och reläkort!
Re: Styra billyft med Arduino
Inga problem att lösa det med en Arduino ...
Dock skulle jag personligen se till att allt som har med säkerhet att göra är utanför. Det brukar exvis sitta skyddsbrytare i taket så att man inte kan hissa upp något för långt - den skulle jag hårdlöda i serie med motorerna så den stoppar lyften oberoende av Arduinoprogrammet ...
Sen såklart en lika hårdlödd nödstoppsknapp, eller fler ...
Dock skulle jag personligen se till att allt som har med säkerhet att göra är utanför. Det brukar exvis sitta skyddsbrytare i taket så att man inte kan hissa upp något för långt - den skulle jag hårdlöda i serie med motorerna så den stoppar lyften oberoende av Arduinoprogrammet ...
Sen såklart en lika hårdlödd nödstoppsknapp, eller fler ...
Re: Styra billyft med Arduino
Som Laban skulle jag ha ändlägergivarna samt alla nödstoppar utanför all programmerad logik, för säkerhets skull.
Re: Styra billyft med Arduino
Törs man komma med en mekanisk lösning?
Blocka en lina mellan slädarna och känn av ev. obalans med en gränsbrytare som
reagerar åt båda hållen. Jag hoppas min fina skiss kom med.
Zippon har inget stöd i golvet mellan pelarna, så linan måste dras under taket.
/ziw
Blocka en lina mellan slädarna och känn av ev. obalans med en gränsbrytare som
reagerar åt båda hållen. Jag hoppas min fina skiss kom med.
Zippon har inget stöd i golvet mellan pelarna, så linan måste dras under taket.
/ziw
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Styra billyft med Arduino
Nu finns ju dock redan en potentiometer under varje skruv, är ju inte alltför invecklat att använda dom istället för att tillföra en ny potentiell felkälla.
-
- Inlägg: 4
- Blev medlem: 30 september 2017, 00:33:42
Re: Styra billyft med Arduino
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): Så här ser orginalkortet ut: 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: 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:
Återkommer med bilder på den färdiga installationen!
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): Så här ser orginalkortet ut: 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: 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);
}
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Styra billyft med Arduino
Kom ihåg att i programmet ställa in nivån på en styrpinne INNAN du väljer riktning på den. Då släpper man detta "hopp" som annars kan komma.
- Jan Almqvist
- Inlägg: 1589
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: Styra billyft med Arduino
Alternativt sätt att skriva programmet utan några if-satser. Varje utgång påverkas bara att ett (1) enda statement.Ozziemannen skrev:Här kommer koden:
Kod: Markera allt
void loop()
{
<utgång för att höja vänster> = <villkor för att höja vänster>;
<utgång för att höja höger> = <villkor för att höja höger>;
<utgång för att sänka vänster> = <villkor för att sänka vänster>;
<utgång för att sänka höger> = <villkor för att sänka höger>;
}