Långtrailer med Arduino

Startat av Lumbago, 6 juli 2014 kl. 21:34:32

0 Medlemmar och 2 gäster tittar på detta ämne.

Lumbago

Jag har just börjat bygga på en långtrailer, tänkt att dras av min Volvo FH dragbil. Den ska få en maskintrailer också, men det här bygget, med Arduino, känns roligare just nu.

Trailern är hittills byggd av två standardtrailers, som jag kapat och limmat ihop, och längden motsvarar ca 18 meter, med styrning på de två bakersta axlarna. Kingpin sitter monterad på en potentiometer som känner av vinkeln mot bilen, och är kopplad till en Arduino Pro Mini som via lite räknande ger rätt signal till styrservot. Trailern svänger alltså med i kurvorna,  helt automatiskt precis som i verkligheten!







http://youtu.be/eQ_IEAt7rl0

http://youtu.be/8yNM4fGza5w

Styrningen fungerar helt enligt förväntan, men mycket byggande återstår. Trailern ska få en egen mottagare, som även den ska kopplas till Arduinon, och kunna "ta över" styrningen, om man vill låsa eller styra manuellt vid t ex backning. All elektronik ska även flyttas till ramen/undersidan av trailern, och den ska få en framstam, snyggare flak och kanske sidolämmar. Och såklart, väldigt många lysdioder.

Mest tid hittills har jag lagt på programmet i Arduinon. Många timmars googlade, funderande och testade har det blivit. Potentiometern läses av med analogRead, och ger ett värde mellan 100 och 900. Detta värde behandlas i ett antal if-satser, och mappas om till ett gradantal til servot. När mottagaren är på plats kommer jag att läsa av tre kanaler med PulseIn, som visserligen inte är helt perfekt med det får duga. Det blir en sorts delay när den väntar på signalen, men maxtiden för tre kanaler är 0,06 sekunder och det kan jag nog leva med. Det blir ytterligare ganska många if innan det är färdigt, men jag ska nog få ordning på det.

nalle

Fy fanken vad sexigt, en trailer som svänger på rumpan.. med arduino också..  <evilgrin> [nyam]

Lumbago

Vänta bara tills jag fått dit radiostyrningen, då kommer den kunna dansa riktigt snyggt med baken!  [dance1] <evilgrin>

Men just nu går bygget mer bakåt än framåt. Jag är inte nöjd med linjärservot, ska testa med ett vanligt istället...eller kanske två.

Lumbago



Nya styrservon på plats! Det linjära servot som satt där innan var nog lite för svagt, för ibland fastnade det i ytterläge och orkade inte svänga tillbaka. Den här lösningen med två servon blir bättre, och dessutom kan jag laborera med olika styrutslag. Efter lite provkörande har jag konstaterat att det går bäst med plastdäck (=dåligt fäste) på de styrande hjulen och gummihjul (=bra fäste) på de fasta hjulen.

Axelavstånden blev lite annorlunda nu, men det gör inget. Lite googlande visar att det verkar finnas alla tänkbara olika axelplaceringar på långtrailers. Helst hade jag satt fyra axlar på den, men då hade det blivit väldigt ont om plats för Arduinon, mottagaren och lipot. Det blir det kanske ändå...

Lumbago

Liten uppdatering.



Det går lite segt med bygget, det är ju sommar och det finns bättre saker att göra än att sitta inne och löda. Några regniga dagar var det iaf på semestern, så att jag hann måla trailern grå och montera dit positionsljus. 20 st per sida kändes lagom överdrivet.  8) <evilgrin>
Det ska dit 10-20 röda bakljus också innan det är färdigt.


Nytt för denna gång är att jag köpt lösa dioder i 500-pack direkt från Kina, istället för färdiglödda från Tyskland. Lite mer jobb, men kul att ha gjort så mycket som möjligt själv. Dessutom mycket billigare och mina egna lödningar håller faktiskt bättre än tyskens.

Ellis

Skulle man kunna få kika på "C-kodningen" för Arduinon? Lite nyfiken hur du fått till det  <poke>
MvH/ Kristoffer
-Scania R470
-McCormic XTX
-Liebherr 574
-Volvo FH16 lastväxlare

Lumbago

Absolut!

Men du får vänta till efter helgen,  har nämligen åkt till sommarstugan utan dator.

e21242

Citat från: Lumbago skrivet  8 augusti 2014 kl. 18:25:07
Absolut!

Men du får vänta till efter helgen,  har nämligen åkt till sommarstugan utan dator.

Lite dålig planering att åka utan dator.  :P
[laugh] [laugh] [laugh] [laugh] [laugh] [laugh]

Lumbago

Har ju telefonen med mig och den duger att kolla Rclastbilar med. Tänkte ändå inte programmera någon Arduino i helgen.  :P

Lumbago

Här kommer koden. Det är alltså bara styrning av ett servo via poten. Jag kommer att göra en ny kod senare, med två servon och radiostyrning.



#include <Servo.h>

Servo myservo; 

int potpin = A3; 
int pot;   
int styr;   


void setup()
{  Serial.begin(9600);
  myservo.attach(9);
}

void loop()
{
 
  pot = analogRead(potpin);       
             
  if(pot > 450 && pot < 550)           
  {
  styr=80;
  }

else if(pot < 450 && pot > 350)
{
  styr=map(pot, 350, 450, 115, 80);
}

else if(pot < 650 && pot > 550)
{
  styr=map(pot, 550, 650, 80, 45);
}


else if(pot > 650)
{
  styr=45;
}


else if(pot < 350)
{
styr=115;   
}
myservo.write(styr);
  delay(15);
  Serial.print("pot = " );                       
  Serial.println(pot);     

}



Värdet från poten är 100-900 (vet inte varför det inte är 0-1000 men skitsamma). Servot går egentligen att ställa mellan 0 och 180, men 45 och 115 är max styrutslag. 80 är rakt fram (borde kanske varit 90).

Potvärde 450 - 550 är rakt fram.

Mellan 550 - 650 (och 450 - 350) svänger servot proportionellt mot potvärdet.

Över 650 och under 350 fortsätter den att hålla fullt styrutslag.

Serialprint i slutet behövdes under utprovningen men kan ju tas bort sedan.

Jag är bara nybörjare på det här och det går säkert att göra allt annorlunda och mycket bättre om man är kunnig...

Lumbago

Nu har jag kopplat in två servon och en mottagare till Arduinon. Nya koden blir så här:


#include <Servo.h>

Servo servo1; 
Servo servo2;

int potpin = A3; 
int pot;   
int styr1;   
int styr2;

int lyse1 = 8;
int lyse2 = 9;

int kanal3;
int kanal4;



void setup()
{
  servo1.attach(2);
  servo2.attach(3);
 
pinMode(lyse1, OUTPUT);
pinMode(lyse2, OUTPUT);

  Serial.begin(9600);

}

void loop()
{
 
  kanal3 = pulseIn(5
  , HIGH, 25000); 


kanal4 = pulseIn(4
  , HIGH, 25000);
 
  pot = analogRead(potpin);       
             
  if(kanal4 > 1600)
{
digitalWrite(lyse1, HIGH); 
digitalWrite(lyse2, HIGH);
}

if(kanal4 < 1400)
{
digitalWrite(lyse1, LOW); 
digitalWrite(lyse2, LOW);
}

if(kanal3 < 1000)
  {
   
  if(pot > 480 && pot < 520)           
  {
  styr1=95;
  styr2=90;
  }

else if(pot < 480 && pot > 400)
{
  styr1=map(pot, 400, 480, 60, 95);
  styr2=map(pot, 400, 480, 70, 90);
}

else if(pot < 600 && pot > 520)
{
  styr1=map(pot, 520, 600, 95, 120);
  styr2=map(pot, 520, 600, 90, 110);
}


else if(pot > 600)
{

styr1=120;
styr2=110;
}
else if(pot < 400)
{
  styr1=60;
  styr2=70;
}

}


if(kanal3 > 1200 && kanal3 < 1800)

{

  styr1=map(kanal3, 1200, 1800, 60, 120);
  styr2=map(kanal3, 1200, 1800, 70, 110);

}

{
if(kanal3 > 1800)
{
styr1=120;
styr2=110;
}

}

servo1.write(styr1);
servo2.write(styr2);

   
  Serial.print("Kanal3:");
  Serial.println(kanal3);
 
  Serial.print("Kanal4:");
  Serial.println(kanal4);
}

Kanal 4 styr alltså lyse av/på. Kanal 3 styr styrningen, men om man lämnar den på fullt vänster (<1000) följer styrningen potentiometern istället. Jag har lagt kanal 3 på en trimratt på sändaren och det fungerar bra.

Nu är det bara lite justering kvar av hur den styr i förhållande till pot-värdet. Fixa några bakljus och meka ihop allt så att det inte hänger sladdar överallt...

nalle

Vad kul med lite arduino, det börjar klia i fingrarna.. och nu är min radio i EU, så nästa vecka kanske jag kan börja programmera lite också :D

Lumbago

Tackar. :)
Riktigt kul med Arduino. Och allt är 802:s "fel": innan han visade sitt Arduino-trafikljus på Aeroseum visste jag inte ens vad Arduino var. Nu är man fast... :)



Så här ser den ut nu. Klädnyporna ska väl bytas ut mot en strömbrytare och tejpen som håller elektronik lådan ska bytas mot något snyggare. :)

RCemil

Grymt blir de  <happy> ser lite tomt ut bak bara;)

Lumbago

Om du menar bakom sista axeln håller jag med. Axeln skulle egentligen suttit lite längre bak, men servot var tvunget att få plats någonstans också. Tror det kommer se bättre ut när jag får dit skärmar, lådor och underkörningsskydd som fyller upp tomrummet.  :)