Styra billyft med Arduino

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Ozziemannen
Inlägg: 4
Blev medlem: 30 september 2017, 00:33:42

Styra billyft med Arduino

Inlägg av Ozziemannen »

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?
Användarvisningsbild
Icecap
Inlägg: 26199
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Styra billyft med Arduino

Inlägg av Icecap »

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.
Ozziemannen
Inlägg: 4
Blev medlem: 30 september 2017, 00:33:42

Re: Styra billyft med Arduino

Inlägg av Ozziemannen »

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 :lol:.
Börjar med att skissa upp ett bra flödesschema så får vi se..
Användarvisningsbild
Teknikern
Inlägg: 7091
Blev medlem: 29 juni 2007, 14:09:48
Ort: Sköldinge

Re: Styra billyft med Arduino

Inlägg av Teknikern »

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å.
Skogen
Inlägg: 910
Blev medlem: 5 januari 2013, 22:50:34
Ort: Alingsås

Re: Styra billyft med Arduino

Inlägg av Skogen »

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?
Ozziemannen
Inlägg: 4
Blev medlem: 30 september 2017, 00:33:42

Re: Styra billyft med Arduino

Inlägg av Ozziemannen »

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!
laban12
Inlägg: 1199
Blev medlem: 17 april 2008, 16:01:56
Ort: Stockholm

Re: Styra billyft med Arduino

Inlägg av laban12 »

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 ...
Användarvisningsbild
Sinumerik
Inlägg: 486
Blev medlem: 28 februari 2005, 12:50:24
Ort: Medelpad

Re: Styra billyft med Arduino

Inlägg av Sinumerik »

Som Laban skulle jag ha ändlägergivarna samt alla nödstoppar utanför all programmerad logik, för säkerhets skull.
Användarvisningsbild
tecno
Inlägg: 27051
Blev medlem: 6 september 2004, 17:34:45
Skype: tecnobs
Ort: Sparreholm, Södermanland N 59° 4.134', E 16° 49.743'
Kontakt:

Re: Styra billyft med Arduino

Inlägg av tecno »

ziw
Inlägg: 94
Blev medlem: 15 mars 2014, 19:58:07
Ort: Sundsvall

Re: Styra billyft med Arduino

Inlägg av ziw »

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
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Skogen
Inlägg: 910
Blev medlem: 5 januari 2013, 22:50:34
Ort: Alingsås

Re: Styra billyft med Arduino

Inlägg av Skogen »

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.
Ozziemannen
Inlägg: 4
Blev medlem: 30 september 2017, 00:33:42

Re: Styra billyft med Arduino

Inlägg av Ozziemannen »

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.
Användarvisningsbild
Icecap
Inlägg: 26199
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Styra billyft med Arduino

Inlägg av Icecap »

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.
Användarvisningsbild
Jan Almqvist
Inlägg: 1589
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Styra billyft med Arduino

Inlägg av Jan Almqvist »

Ozziemannen skrev:Här kommer koden:
Alternativt sätt att skriva programmet utan några if-satser. Varje utgång påverkas bara att ett (1) enda statement.

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>;
}
Kan förbättras ytterligare.
Skriv svar