hålla rak kurs på en båt med hjälp av ett rc gyro ?

Planering och tankar kring eventuella framtida projekt.
Användarvisningsbild
Icecap
Inlägg: 26645
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av Icecap »

Största grejen med att låta bli BS är att man kan så mycket mer funktionsmässigt. Man har tillgång till interrupt och all hårdvara, i starten är det kanske inte så viktigt men när man har fått lite choklad på skjortan kommer det att vara essentiellt.

BS kan fint fungera på en långsam båt men den totala kostnad för ett system överstiga vida all förnuft, prestanda suger och det finns så pass med begränsningar att det är ett problem.
radar
Inlägg: 32
Blev medlem: 23 februari 2011, 19:31:20

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av radar »

ja begriper inte allt ni menar...vart ska jag börja ? nån bra litteratur, vad behöver jag för grejor ? verkar finnas en uppsjö av program, labkort och uP.
radar
Inlägg: 32
Blev medlem: 23 februari 2011, 19:31:20

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av radar »

har googlat lite...lägger ner detta med programmeringen, verkar bara för mycket jobb för att få en funktion. Är nog mer intresserad av iden med en magnet och en fotodiod.

Är det någon som har en ritning på en krets med en fotodiod som drar ett relä som skulle kunna fungera om en kompassvisare bröt strålen ?
Användarvisningsbild
DeVille
Inlägg: 2361
Blev medlem: 29 mars 2004, 15:04:22
Ort: Dalsländska skogen.
Kontakt:

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av DeVille »

Intressant projekt du har på gång.
Varför provar du inte med en Ardunio till exempel.

Tröskeln är inte så hög för dem. Det fixar du lätt, bra att kunna inför andra projekt om inte annat!

Lycka Till
/DeVille
radar
Inlägg: 32
Blev medlem: 23 februari 2011, 19:31:20

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av radar »

ok är den lätt att lära sig om man är okunnig ?

skulle Arduino Uno M328P, fungera med kompassmodul, HM55B Compass Module (båda finns på http://www.lawicel-shop.se/shop/ men går inte direktlänka) ?

står i anvisningen att kompassmodulen fungerar bra med basic stamp 2 men då vet jag inte hur dom menar, om det är bara för att bs2 har en 5v eller att den bara kan kommunicera med bs2 ?
Användarvisningsbild
adent
Inlägg: 4245
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av adent »

Arduino är nog en utmärkt väg att gå imho. Behöver du hjälp och inte hittar svaret
någonannanstans eller har generella funderingar finns det många här (inkls mig) som
kan svara. Microprocessorer är kul!
Användarvisningsbild
Icecap
Inlägg: 26645
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av Icecap »

radar: grejen är att med BS kan du uppnå begränsade funktionalitet till en dyr peng.

Tänker du fel när du programmerar kvittar det vilket språk du använder, det blir skit i vilket fall som helst. Tänker du rätt kan du programmera vilket språk som helst och få allt att fungera.

BS påstås ha lägre inlärningströskel, det kan nog passa men det beror i mina ögon på att den helt enkelt kan mindre. Att strypa en Porsche 911 Turbo till att bara gå i 30 knyck kan göra det lättare att köra den men inte fan blir det bra för det eller hur?

Jag vill definitivt råda dig till att ta steget till en riktig mikroprocessor (µC) oavsett om det är AVR eller PIC (personligt föredrar jag PIC men smak o tycke...), startsträckan kan vara lite längre men det finns mycket råd och kunnande här och i stort bara en viss förakt för BS.

Grejen är att när du har kommit över startsträckan och t.ex. lärt dig att läsa datablad kommer du att kunde bygga skitroliga grejer till en billig peng och alla fungerar snabbt som fan! Med BS kan du bygga begränsade grejen som är sega och all logik och sätt att bygga upp programmet är i stort lika fast det finns en del tunga begränsningar i BS när man väl vet vad en µC egentligen kan.

Och en BS kan inget du inte kan med en µC! Men en "riktig" (alltså utan BS-tolken) kan mycket mer än en BS.

En enkel sak är att man inte kan använda interrupt på en BS, när du väl har lärt dig att använda dom kommer du helt enkelt knappast att kunde programmera utan den funktionalitet och om du blir biten kommer du, med vana från en vanlig µC, att kunde migrera till en annan processorfamilj hur enkelt som helst, allt är i stort sig likt. Register, portar osv kanske heter lite annorlunda och ska ha lite andra värden för att komma i rätt läge men allt det står i databladet.

Själva programmeringstekniken är den samma, iaf. om du använder C, och kan omedelbart överföras mellan olika µC familjer.

Så välj C, eller om du är en hårding som faktisk vill veta hur saker o ting fungerar: assembler, välj en µC utan BS-tolken och använd ett antal kvällar på att tugga dig igenom, snart ser du ljuset och sedan kommer du inte att fatta hur du har klarat dig utan mikroprocessorer, man kan ju göra så himla mycket med dom...
Senast redigerad av Icecap 22 augusti 2011, 10:50:30, redigerad totalt 1 gång.
Användarvisningsbild
Walle
Moderator
Inlägg: 7701
Blev medlem: 14 december 2004, 10:32:18
Ort: Stockholm

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av Walle »

Icecap skriver mycket klokt! Jag har visserligen "rekommenderat" BS i ett par trådar, men har då varit mycket tydlig med att BS kan (i vissa enkla fall) vara rätt väg att gå förutsatt att målet är att så snabbt och enkelt som möjligt få en fungerande pryl. I alla andra fall är en "riktig" µCU en bättre väg att gå.

Jag själv började med BS...big mistake! Om man är intresserad av att lära sig ordentligt, vilket jag är, så blir en BS en stor omväg. Först ska man lära sig att programmera skiten, vilket dock inte är så svårt. Sen inser man begränsningarna, vilka är stora, sen ska man börja lära om från början. Och när man då har "BS-tänket" så blir hela inlärningsproceduren betydligt svårare, eftersom man har så mycket "rester" från BS som inte alls på något sätt stämmer med "tänket" när man programmerar en ren µCU.
radar
Inlägg: 32
Blev medlem: 23 februari 2011, 19:31:20

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av radar »

har beställt en Arduino Uno M328P nu, så jag lär återkomma med lite frågor :) verkar dock vara en bra hemsida med fina ex och beskrivningar
radar
Inlägg: 32
Blev medlem: 23 februari 2011, 19:31:20

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av radar »

Har nu införskaffat mig ett arduino uno programmeringskort och exprimenterat lite med lysdioder mm. Fick nyligen en HM55B kompassmodul, men jag känner att det är långt från att få några lysdioder att blinka till att få den att göra som jag vill.

hittade en kod på nätet så jag kan få den att visa antalet grader från norr vilket är ett steg framåt.

Men funktionen jag vill åt är att den riktning kompassmodulen står i på när programmet startas, så skall den vid tex 2 grader ur kurs skicka en signal på en utgång och vid 2 grader åt andra hållet skicka en signal på en annan utgång som drar ett relä osv.

tänkte kolla om det finns någon genväg till denna funktion :)

här är koden som visar graderna:

*/
#include <math.h> // (no semicolon)
//// VARS
byte CLK_pin = 8;
byte EN_pin = 9;
byte DIO_pin = 10;

int X_Data = 0;
int Y_Data = 0;
int angle;

//// FUNCTIONS

void ShiftOut(int Value, int BitsCount) {
for(int i = BitsCount; i >= 0; i--) {
digitalWrite(CLK_pin, LOW);
if ((Value & 1 << i) == ( 1 << i)) {
digitalWrite(DIO_pin, HIGH);
//Serial.print("1");
}
else {
digitalWrite(DIO_pin, LOW);
//Serial.print("0");
}
digitalWrite(CLK_pin, HIGH);
delayMicroseconds(1);
}
//Serial.print(" ");
}

int ShiftIn(int BitsCount) {
int ShiftIn_result;
ShiftIn_result = 0;
pinMode(DIO_pin, INPUT);
for(int i = BitsCount; i >= 0; i--) {
digitalWrite(CLK_pin, HIGH);
delayMicroseconds(1);
if (digitalRead(DIO_pin) == HIGH) {
ShiftIn_result = (ShiftIn_result << 1) + 1;
//Serial.print("x");
}
else {
ShiftIn_result = (ShiftIn_result << 1) + 0;
//Serial.print("_");
}
digitalWrite(CLK_pin, LOW);
delayMicroseconds(1);
}
//Serial.print(":");

// below is difficult to understand:
// if bit 11 is Set the value is negative
// the representation of negative values you
// have to add B11111000 in the upper Byte of
// the integer.
// see: http://en.wikipedia.org/wiki/Two%27s_complement
if ((ShiftIn_result & 1 << 11) == 1 << 11) {
ShiftIn_result = (B11111000 << 8) | ShiftIn_result;
}


return ShiftIn_result;
}

void HM55B_Reset() {
pinMode(DIO_pin, OUTPUT);
digitalWrite(EN_pin, LOW);
ShiftOut(B0000, 3);
digitalWrite(EN_pin, HIGH);
}

void HM55B_StartMeasurementCommand() {
pinMode(DIO_pin, OUTPUT);
digitalWrite(EN_pin, LOW);
ShiftOut(B1000, 3);
digitalWrite(EN_pin, HIGH);
}

int HM55B_ReadCommand() {
int result = 0;
pinMode(DIO_pin, OUTPUT);
digitalWrite(EN_pin, LOW);
ShiftOut(B1100, 3);
result = ShiftIn(3);
return result;
}


void setup() {
Serial.begin(115200);
pinMode(EN_pin, OUTPUT);
pinMode(CLK_pin, OUTPUT);
pinMode(DIO_pin, INPUT);

HM55B_Reset();
}

void loop() {
HM55B_StartMeasurementCommand(); // necessary!!
delay(40); // the data is 40ms later ready
Serial.print(HM55B_ReadCommand()); // read data and print Status
Serial.print(" ");
X_Data = ShiftIn(11); // Field strength in X
Y_Data = ShiftIn(11); // and Y direction
Serial.print(X_Data); // print X strength
Serial.print(" ");
Serial.print(Y_Data); // print Y strength
Serial.print(" ");
digitalWrite(EN_pin, HIGH); // ok deselect chip
angle = 180 * (atan2(-1 * Y_Data , X_Data) / M_PI); // angle is atan( -y/x) !!!
Serial.print(angle); // print angle
Serial.println("");

}
Användarvisningsbild
adent
Inlägg: 4245
Blev medlem: 27 november 2008, 22:56:23
Ort: Utanför Jönköping
Kontakt:

Re: hålla rak kurs på en båt med hjälp av ett rc gyro ?

Inlägg av adent »

Fick du ordning på det?

Grundprincipen är att vid uppstart kolla hur kompassen är riktad, spara det värdet och sedan jämföra kommande värden mot det. Men man måste nog ha tungan rätt i mun när kompassen ligger och pendlar mellan säg 3 grader och 357 grader. Ett löpande medelvärde kan nog vara bra för att mjuka ut reaktionerna lite.
Skriv svar