Sida 2 av 6

Re: Lådbil YLV065

Postat: 19 augusti 2018, 23:53:19
av papabear
Nu har jag just layoutat servoräddaren för lasern, men klockan är för sent, så det blir att skära en annan kväll.

Slänger in ett par bilder på ett delprojekt som är klart sedan tidigare.
Eftersom jag tänkt kunna köra bilen via rc (och kanske FPV?), så behöver (vill) jag kunna kontrollera brytare för tex hel/halv-ljus, tuta och back.
Så parallellt med de fysiska kontrollerna i bilen tänkte jag sätta ett reläkort. Till denna har jag byggt en liten adapter som tar pulserna från mottagaren och konverterar dem till av/på.
Kortet fungerar, men är lite fult och, skrymmande är väl kanske fel ord, men - inte så kompakt som jag skulle önska. Dock får det vara som det är tills det visar sig att det måste ändras, eller allt annat är färdigt.

Re: Lådbil YLV065

Postat: 21 augusti 2018, 10:05:33
av papabear
Igår skar det sig, eller, det var lasern som skar MDF :D.
Skulle skära av 6mm, men det visade sig att det var ont om det på lagret, så det blev dubbel uppsättning i 3mm istället.

Återstår att limma och skruva.

Re: Lådbil YLV065

Postat: 21 augusti 2018, 10:46:51
av Gimbal
Snyggt!

Re: Lådbil YLV065

Postat: 21 augusti 2018, 12:04:37
av Henke_83
Wow, vilket bygge och så intressant att följa :tumupp: :)

Re: Lådbil YLV065

Postat: 23 augusti 2018, 23:21:11
av papabear
Då var servoräddarn klar. Dock tror jag fjädrarna är lite klena.
De fjädrar jag har nu heter 8x35 och kommer från en sortimentlåda från Classe, kanske får jag beställa några bättre anpassade.
Facken de vilar i kan nog husera 10x40 utan att det blir problem, och med tjockare gods bör det kunna finnas betydligt hårdare fjädrar att få tag på.
Vi får se hur det beter sig. Worst case är väl att fjädrarna är så svaga att det typ inte går att vrida hjulen alls.
Men en fullösning skulle ju kunna vara att dra åt centrummuttern vilket skulle göra mekaniken väldigt tjärv, men det innebär ju också manuell återställning.

Jag tänker att jag går in i första inlägget och uppdaterar to-do-listan allt eftersom.

Nästa punkt blir väl som sagt styrelektroniken.

Re: Lådbil YLV065

Postat: 24 augusti 2018, 00:38:24
av papabear
Jag har tänkt lite på ratt och pedal.
Skulle det vara fördelaktigt att ta tex en PC/konsoll-ratt och "bara" bygga fäste till? Inkl tillhörande pedal.
Har ju skrivit ut en liten ratt, men allt det övriga i mekanisk väg återstår ju.
Kanske kan det bli för stort med en spelratt? Tänkte att man kan ju kika på de lokala secondhand-butikerna, om det kan finnas nåt billigt att labba med.
Bilen är 455mm bred, exkl skärmar, som referens. Ratten jag har, 180mm dia max, kanske? Minns inte, men borde kanske ha modellen kvar... Den känns dock lite liten.

Re: Lådbil YLV065

Postat: 24 augusti 2018, 10:19:27
av limpan4all
Mekaniskt verkande ratt/mekanik eller "drive by wire"?
Hur skall du göra bromsarna - mekanik eller "drive by wire"?

Re: Lådbil YLV065

Postat: 24 augusti 2018, 11:09:58
av papabear
Drive by wire, tänkte mest själva mekaniken med upphängning för ratten/pedalen, om man skulle ta en spelratt.

Brom har jag bara tänkt använda den som finns i motorstyrningen.
Visar det sig att det blir dåligt, så tänker jag att man kan ta en skivbroms från en cykel.
Den skulle man ju kunna ha så man aktiverar den med wire om man sitter i, och ha ett servo kopplat parallellt som kan dras via rc.

Så, bara planerat för broms på bakhjulen, men man skulle ju också kunna bygga om hjulnaven så att man kan ha skivbroms fram också.

Plan för styrelektronik:
Per kanal, tre pottar för input: användarinput (ratt/pedal), utslagsbegränsning, och centrumjustering.
Samt en servosignal ut, puls om 1-2ms @50Hz - eller vad det nu är. Vill minnas att det inte är så jäkla kritiskt. Kanske även möjlighet att utöka utslaget, beroende på vad servot gillar.
Tanken med utslagsbegränsning och centrumjustering, är att man ska kunna ställa ner tex hur mycket trottel man ska kunna ge, och justera in styrningen rakt.

Re: Lådbil YLV065

Postat: 28 augusti 2018, 09:53:50
av papabear
Hade medbringaren för drevet till bakaxeln ute på entreprenad och fick den i helgen.
Lite strul med DROn gjorde att det blev en extra uppsättning hål, men det gör mig inget.
Kunde inte klämma på den på axeln när jag provade lite snabbt, men det är rätt tjockt med färg på den iaf som ska bort då jag tänker svetsa dem.
Sen måste jag också slipa drevet lite då bulthålen deformerat centrumhålet lite, vilket hindrar montering.

Koden för styrelektroniken är redo för test, men jag har ingen ledig breadboard :humm:.

Re: Lådbil YLV065

Postat: 28 augusti 2018, 10:57:11
av Bosen
fan vilket underbart projekt :tumupp: :tumupp: :tumupp: :tumupp: :tumupp:

Re: Lådbil YLV065

Postat: 28 augusti 2018, 12:20:29
av Glenn
Svårt att få till nån styrkänsla om man kör helt "elektroniskt", men det kanske inte gör så mycket ?

Vore kul att bygga nåt sånt där till barnen, men som nån sa, dom lär väl hinna ta körkort innan man är klar..

Re: Lådbil YLV065

Postat: 28 augusti 2018, 14:05:04
av bearing
Ni får väl se till att engagera barnen i det tekniska istället för att göra allt själva =) Då går det nog fortare, både tack vare motivationen av att göra något tillsammans, och av ev. hjälp.
Först en helt vanlig enkel lådbil direkt från någon ritning utan att göra det för komplicerat, och sen efter att barnen åkt med den ett tag och tröttnat lite, se vad de får för intresse när ni håller upp en elmotor och så vidare.

Re: Lådbil YLV065

Postat: 28 augusti 2018, 16:13:05
av MadModder
Jag vet att Citroën har/hade nån modell med helt elektronisk styrning. TomasL berättade i nån tråd för ett tag sen hur det är att köra en sån.

Re: Lådbil YLV065

Postat: 28 augusti 2018, 16:32:38
av papabear
När bilen väl rullar så kan man ju fundera på force feedback :).
Kanske ett skäl att köra med en spelratt...

Re: Lådbil YLV065

Postat: 30 augusti 2018, 20:48:21
av papabear
It werks! Som, hmm, är det AvE som säger så? Tror det.
Nu skulle man bara haft ett snyggt kort till den också...

Varför jag tog prescaler 128 till ADCn? Vet ej. Det var så i koden jag hade skrivit för ett par år sedan. Har inte testat att trimma ner den ännu.

Kod: Markera allt

//2ch Servo Controller for Attiny84
#define F_CPU 8000000L

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define THROW_MOD 4
#define THROW_DIVISOR 215
#define MID_INPUT_CORR 128
#define INPUT_MIN 0
#define INPUT_MAX 255
#define PULSE_INVERT_OFFSET 1000
#define PULSE_MIN 1000
#define PULSE_MAX 2000

struct ChannelConfig
{
	uint8_t InputIndex;
	uint8_t ThrowIndex;
	uint8_t CenterIndex;
	uint8_t InvertedPin;
};

static struct ChannelConfig _channelConfig[2] = {
	{0,1,2,PB0},
	{3,4,7,PB1},
};
static uint8_t _adcNext[8] = {1,2,3,4,7,0,0,0}; //Indexed by ADMUX to select next adc channel. Index 5 and 6 are not used.
volatile int32_t _adcValue[8] = {0,0,0,0,0,0,0,0}; //Indexed by ADMUX to store adc values.     --||--

int32_t Map(int32_t x, int32_t in_min, int32_t in_max, int32_t out_min, int32_t out_max)
{
	return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

void SetupADC()
{
	//setup adc, prescaler @ 128, interrupt enable, adc enable
	ADCSRA |= 1<<ADPS2 | 1<<ADPS1 | 1<<ADPS0 | 1<<ADIE | 1<<ADEN;
	ADCSRB |= 1<<ADLAR; //left adjust result => ADCH 0-255
}

void StartADC()
{
	ADCSRA |= 1<<ADSC;
}

void SetupPWM()
{
	TCCR1B |= 1<<WGM13 | 1<<WGM12;	// WGM mode 14, Fast pwm, top=ICR1
	TCCR1A |= 1<<WGM11;	
	TCCR1B |= 1<<CS11; // prescaler: 8
	ICR1 = 19999; //8MHz w ps8, 20k = 20ms

	TCCR1A |= 1<<COM1A1 // set OC0A/OC0B on Compare Match, clear OC0A/OC0B at BOTTOM
		    | 1<<COM1A0
		    | 1<<COM1B1
		    | 1<<COM1B0; 

	DDRA |= 1<<PA6 | 1<<PA5; //a6 OC1A, a5 OC1B -> output
}

void SetupInvertionSelection()
{
	PORTB |= 1<<PB1 | 1<<PB0; // enable pull-up	
}

int main(void)
{	
	SetupADC();	
	SetupPWM();	
	SetupInvertionSelection();
		
	sei();
	
	StartADC();
	
	uint8_t i=0;
		
    while (1) 
    {
		uint16_t offset = Map(_adcValue[_channelConfig[i].CenterIndex], INPUT_MIN,INPUT_MAX, PULSE_MIN,PULSE_MAX);
		uint16_t pulseLength = offset+(THROW_MOD*_adcValue[_channelConfig[i].ThrowIndex]*(_adcValue[_channelConfig[i].InputIndex]-MID_INPUT_CORR))/THROW_DIVISOR;
		
		if(PINB & (1<<_channelConfig[i].InvertedPin))
			pulseLength = PULSE_MAX - pulseLength + PULSE_INVERT_OFFSET;

		if(i==0)
			OCR1A = ICR1 - pulseLength;
		else
			OCR1B = ICR1 - pulseLength;
				
		if(++i>1)
			i=0;
    }
}

ISR(ADC_vect)
{
	_adcValue[ADMUX] = ADCH;
	ADMUX = _adcNext[ADMUX];

	StartADC();
}