Dansk Elektronik Forum

Generel Elektronik => Arduino & Lign. => Emne startet af: stig efter April 29, 2015, 17:09:50

Titel: Indput til Rally Computer
Indlæg af: stig efter April 29, 2015, 17:09:50
Jeg går og overvejer at bygget en rally computer baseret på Arduino og har i den forbindelse brug for noget indput da jeg ikke har arbejdet med Arduino før.

En Rally computer er en trip tælle som man kan nulstille under kørslen og så kan km tallet justeret op eller ned for at det altid passer med ens Roadbook ( noter med km tal hvor sving forhindringer er angiver med Km tal )



Oversigt over funktioner

1 Stk LED display men plads til to km tæller samt baggrund belysning
1 Stk Magnet afbr som hjul sensor (et indpuls pr omgang )
1 Stk Tryk afbr til nulstilling af tæller (kort tryk nulstilling tæller nr 1 lang tryk nulstilling           tæller nr 2
1 stk Tryk afbr til at juster km op for tæller nr 1 ( kort tryk ligger 100m konstant tryk så                    ligger der automatisk 100m løbne til man slipper igen)
1 stk Tryk afbr til at juster km ned for tæller nr 1 ( kort tryk trækkes  der  100m konstant tryk så ligger der automatisk 100m løbne til man slipper igen)

jeg har kikket lidt rundt og har fundet følge komponenter som jeg mener vil kunne klar opgaven.




http://www.dx.com/p/i2c-iic-2-6-lcd-1602-yellow-green-display-module-for-arduino-raspberry-pi-avr-arm-379324#.VUDyYdLtmko

http://www.dx.com/p/new-nano-v3-0-module-atmega328p-au-improved-version-for-arduino-yellow-369070#.VUDy89Ltmko



Er jeg har galt på den eller ser det fornuftig ud
Titel: Sv: Indput til Rally Computer
Indlæg af: Urtapott efter April 29, 2015, 20:08:22
Fint nok, men du burde overveje at installere en Real Time Clock, hvis det er vigtigt at timingen er rigtig og stabil
Titel: Sv: Indput til Rally Computer
Indlæg af: microtec efter April 29, 2015, 21:29:48
Fint nok, men du burde overveje at installere en Real Time Clock, hvis det er vigtigt at timingen er rigtig og stabil

En Real Time Clock giver kun mening, hvis man ønsker at udlæse dato og klokkeslæt.
Som stop-up er krystallet på Arduino mindst lige så stabilt og nøjagtigt, desuden giver det mulighed for større opløsning end en Real Time Clock, som typisk kun timer, minutter og hele sekunder.
Titel: Sv: Indput til Rally Computer
Indlæg af: Urtapott efter April 29, 2015, 22:17:28
Ahh, jeg har haft problemer med en båd motor omdejningstæller, da der er store temperaturændringer. Problemet var at timingen til indsprøjtningen ændrede sig, i antal clock cycler selv om motoren havde en konstant hastighed. Men det var et meget tidskritisk system, en rally computer vil nok ikke have lignende problemer. Jeg løste problemet med en RTC, hvor hvert sekund "kalibrerede" tælleren sig.
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter April 29, 2015, 22:39:26
Jeg har ikke noget at bruge en nøjagtig tids angivelse, det som jeg skal måle er afstand
Titel: Sv: Indput til Rally Computer
Indlæg af: microtec efter April 29, 2015, 23:42:52
Ahh, jeg har haft problemer med en båd motor omdejningstæller, da der er store temperaturændringer. Problemet var at timingen til indsprøjtningen ændrede sig, i antal clock cycler selv om motoren havde en konstant hastighed. Men det var et meget tidskritisk system, en rally computer vil nok ikke have lignende problemer. Jeg løste problemet med en RTC, hvor hvert sekund "kalibrerede" tælleren sig.

Hvis du har behov for at "kalibrere" din Arduino hvert sekund, er der virkelig noget galt. Driften på krystallet er mange-mange-mange gange mindre. For mig lyder det helt klart som om du ikke har styr på din timer-interrupt i programmet.

Jeg har gennem tiden brugt 3-4000 DS1302 RTC´s, som er samme chip som findes på moduler man kan købe til Arduino. DS1302 drives af et 32kHz ur-krystal og er på ingen måde nøjagtig, med mindre man kalibrere den, hvilket også fremgår af databladet.

At tro at en RTC er en nøjagtig timer er en stor misforståelse, det er en chip med ur- og kalender-funktion.

Jeg har ikke noget at bruge en nøjagtig tids angivelse, det som jeg skal måle er afstand

Det er fuldstændig rigtigt at du ikke har brug for tiden, hvis du bare vil lave en trip-tæller. De ting du har fundet frem til opfylder fint dit behov.
Hvis du senere ønsker at udvide med en hastighedsmåling, kan du fint bruge den timer der allerede findes på Arduino-boardet.
Titel: Sv: Indput til Rally Computer
Indlæg af: martinbjerre efter April 30, 2015, 12:48:29
Du kunne måske finde lidt inspiration her:
http://elektronik-forum.dk/index.php?topic=556&asproject
Titel: Sv: Indput til Rally Computer
Indlæg af: Urtapott efter April 30, 2015, 22:39:18
Problemet jeg havde var at ved opstart var en omdrejning omkring 50.000 clokcykler, når motorrummet var koldt. Men efter den havde kørt i et par timer varmede motoren rummet op, sådan at temperaturen kunne komme op på nogle 50 c. Dette medførte at antal clocksykler der skulle til, før en og en halv omdrejning af motoren havde kørt rundt, havde vokset med et par clocksykler. Dette gjorde at motoren kørte ustabilt, fordi at dieselen blev indsprøjtet for sent. Problemet blev løst med at forbinde den samme uroscillator som var på omdrejningstælleren til microkontrolleren, og ændre hvor mange clockcykler der skulle ventes før dieselen blev indsprøjtet.

Anyway urelevant til denne tråd, hvis det eneste du skal måle er afstand, så er du helt sikkert på rette vej. Det kan være interessant at installere nogle ekstra funktioner, fx 0 til 100 tidsmåling, eller middelhastighed.
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Maj 01, 2015, 08:25:22
Her har i det setup jeg køre med lige nu

(https://scontent-ams.xx.fbcdn.net/hphotos-xfp1/t31.0-8/11154784_10204270063419340_9124608961207961808_o.jpg)


Det er de to cykel computer som jeg skal havde skiftet ud men noget DIY .

de funger ude mærket men problemet er at jeg ikke kan juster den målte afstand også er det noget rod når de skal nulstilles under vejs.

Jeg har fået bestilt de stumper jeg skal bruge og er så småt begyndt på at kikke på hvordan man programmere  Arduino.



Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 01, 2015, 16:02:03
Så har jeg modtaget et stk. Nano og et LED display.

Har også været i gang med at lege med det grundlæggende programmering, for lige som at få lidt føling  med sproget.

Jeg har lavet et lille program hvor der det led på pin 13 skal blinke og det bliver skrevet noget tekst på displayet.

De to funktioner forstyrre hinanden så det ikke køre flydende.

Fra linge 19 til 22 har vi koden til den blinkende led

Fra linge 24 til 30 har vi koden til teksten på displayet.

De to koder funger fint særskilt, men når de bække er i programmet så sked der jo det at når vi kommer til linge 31 så bliver der jo læst fra linge 9 og ned så teksten stoppet i 2 sek på grund af det delay der er i linge 20 og 22.


kan man bruge nogle  ( ) eller noget { } eller en helt anden  løsning så det to ”loop” køre uden af forstyrre hinanden.



Kode:
int ledpin = 13;

#include <Wire.h> // indlæser I2C bibloteket
#include <LiquidCrystal_I2C.h> // indlæser er specielt I2C Biblotek
LiquidCrystal_I2C myDisplay(0X3F,16,2); // definere Displayet adr & karekter antal samt linger


void setup()
{
  pinMode (ledpin,OUTPUT);
  myDisplay.init();
  myDisplay.backlight();
  myDisplay.print("ARDUINO 1,2");
  delay(1000);
}

void loop()
{
digitalWrite (ledpin,HIGH);// For onbord LED til at blinke
delay (1000);
digitalWrite (ledpin,LOW);
delay (1000);

myDisplay.clear();
delay(500);
myDisplay.print("TEST");
delay(500);
myDisplay.setCursor(0,8);
myDisplay.print("TEST");
delay(500);
}
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Juni 01, 2015, 16:15:30
Bare lige en tanke.
Ville det være noget værd med en led på hverside, der så lyser i den side det næste sving kommer?
Som sagt bare en tanke :-)
Titel: Sv: Indput til Rally Computer
Indlæg af: gsborn efter Juni 01, 2015, 18:15:59
Det med at programmdele forstyrrer hinanden har jeg også oplevet.
Så en løsning kan være disse, jeg henviser til linkene da det er meget svært at forklare.
Det hænger sammen at en arduino(microcontroller) ikke kan eller har svært med at multitaske.
Se sidste link.
Håber at det hjælper dig videre.

Med venlig hilsen Gsborn
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 01, 2015, 21:01:49
Bare lige en tanke.
Ville det være noget værd med en led på hverside, der så lyser i den side det næste sving kommer?
Som sagt bare en tanke :-)

Det vil ikke være til meget gavn.

Den måde det virker på er at man har en Roadbook (en megen lang papir strimmel på op til 17 m længe) som for tæller en ved hvilke km tal man skal dreje ved hjælp af symboler.

mange gange får man først Roadbook en udleveret lige før start så man vil ikke havde tid til at programmere ind hvor når det forskeldige LED skulle tænde  , og systemet med symboler virker helt fint når man lige har prøvet det en enkel gang
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 01, 2015, 21:02:21
Det med at programmdele forstyrrer hinanden har jeg også oplevet.
Så en løsning kan være disse, jeg henviser til linkene da det er meget svært at forklare.
Det hænger sammen at en arduino(microcontroller) ikke kan eller har svært med at multitaske.
Se sidste link.
Håber at det hjælper dig videre.
  • http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
  • http://www.instructables.com/id/Intermediate-Arduino-Inputs-and-Outputs/?ALLSTEPS (http://www.instructables.com/id/Intermediate-Arduino-Inputs-and-Outputs/?ALLSTEPS)
  • http://www.baldengineer.com/millis-tutorial.html (http://www.baldengineer.com/millis-tutorial.html)

Takker vil jeg fluks kaste mig over
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 01, 2015, 21:42:25
Aller rede i der første link var løsningen der og nu ser koden sådan har ud og bække program bider køre flydende

skal lige havde kikke på de andre link også for at se om der skulle være andre guld korn


Kode:
const int ledPin =  13;
int ledState = LOW;             
long previousMillis = 0;
long interval = 1000;

#include <Wire.h> // indlæser I2C bibloteket
#include <LiquidCrystal_I2C.h> // indlæser er specielt I2C Biblotek
LiquidCrystal_I2C myDisplay(0X3F,16,2); // definere Displayet adr & karekter antal samt linger


void setup()
{
  pinMode(ledPin, OUTPUT);
 
  myDisplay.init();
  myDisplay.backlight();
  myDisplay.print("ARDUINO 1,2");
  delay(1000);
}

void loop()
{
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
   
    previousMillis = currentMillis;   

   
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    digitalWrite(ledPin, ledState);

myDisplay.clear();
delay(500);
myDisplay.print("TEST");
delay(500);
myDisplay.setCursor(0,8);
myDisplay.print("TEST");
delay(500);
}

}
 
Titel: Sv: Indput til Rally Computer
Indlæg af: gsborn efter Juni 02, 2015, 06:41:16
Der findes også en " libary " til arduino som kunne være interresant, så bliver det måske nemmere at skrive programmer med flere ting som skal gøres samtidig.
 https://github.com/thomasfredericks/Metro-Arduino-Wiring/wiki (https://github.com/thomasfredericks/Metro-Arduino-Wiring/wiki)

Med venlig hilsen Gsborn

Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 10, 2015, 10:13:32
Så er jeg kommet en smule hvider.

Der har været et par små problemer under vejs med at få tælleren til at tælle det rigtige antal på grund af at en impuls blev læst som to eller flere impulser, det fik jeg hurtig styr på.

Så har der drillet en del med at hvis der stod konstant signal på indgangen fra taktgiveren så ”løb” tælleren af sted, det gik noget tid før jeg fandt en løsning, men så lærte man jo også noget af det.

Så har der været problemer man at Arduino ikke har kunne fælge med i program kørslen, problemet lå i at jeg brugte Serial kommunikation  også det Delay som jeg havde lavet for at forhindre dobbelt impuls fra taktgiveren, men man lære jo hele tiden.


Men jeg er kommet til et problem som jeg ikke har haft held til at løse.

Den tæller som jeg bruger tæller op til 32767 også begynder den at tælle baglæns med modsate fortegn, hvordan løser jeg det ????



Så kæmper jeg også man nogle små problemer med måden resultatet bliver præsenteret på LCD displayet, men der skal jeg lige lege en smule hvider før jeg kaster håndklædet i ringen



Kode:
#include <Wire.h> // indlæser I2C bibloteket
#include <LiquidCrystal_I2C.h> // indlæser er specielt I2C Biblotek
LiquidCrystal_I2C LCD(0X3F,16,2); // definere Displayet adr & karekter antal samt linger



const int  taktGiver = 2;    // Pin som takt giver er forbundet til


int taktGiverImpulser  = 0;   // Tæller antallet af impulser fra taktgiveren
int taktGiverState = 0;         // Aktuelle status af taktgiver
int lasttaktGiverState = 0;     // Forrige status  af taktgiver

void setup() {
 
   LCD.init();
  LCD.backlight();
  LCD.print("RALLY COMPUTER");
  LCD.setCursor(0,8);
  LCD.print("#BEAT  2:00#");
  delay(2000);
  LCD.clear();
 
  LCD.setCursor(0, 0);
  LCD.print("TOTAL KM:");   
   
 
  LCD.setCursor(0, 1);
  LCD.print("TRIP  KM: ");
 
 
  //  Opsætter  knappen pin som et input:
  pinMode(taktGiver, INPUT);

  // Opsætter serial communication:
 Serial.begin(9600);
}


void loop() {
 
 
  int Total = 0;
 Total = (0.2175*taktGiverImpulser);
  // læset takGiver input:
  taktGiverState = digitalRead(taktGiver);

  // sammenligne taktGiverState til sin tidligere tilstand
  if (taktGiverState != lasttaktGiverState) {
    // hvis staten har ændret sig, forøge tælleren
    if (taktGiverState == HIGH) {
      // Hvis den nuværende tilstand er HIGH så  button
      // venter fra  off til on:
      taktGiverImpulser++;
     
     Serial.print("CNT  :  ");
     Serial.println(taktGiverImpulser);
     
     Serial.print("TOTAL:  ");
     Serial.println(Total);
     
     
     
    } LCD.setCursor(11, 0);
 LCD.print(Total);   
 
 
  LCD.setCursor(11, 1);
  LCD.print(taktGiverImpulser);
 
  }
  // Gemmer den aktuelle status som den sidste status til næste gennem løb og forhindre at taktGiverne kan få tælleren til at løbe
 lasttaktGiverState = taktGiverState;

 
 
 //Forsinkelse som skal forhindre flere taktGiver impulser
  delay(1);
 
}
Titel: Sv: Indput til Rally Computer
Indlæg af: gerd efter Juni 10, 2015, 11:05:11
med long:
Kode:
long taktGiverImpulser  = 0;
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 10, 2015, 11:28:33
med long:
Kode:
long taktGiverImpulser  = 0;

Hold da op skulle der ikke mere til.
Har lige testet det og set hjalp

Takker
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 11, 2015, 23:12:33
Så er jeg kommet en det hvider.

Jeg har fået trip tælleren til at virke ved hastigheder op til 199 km/h  så længe jeg kun har en trip tæller i funktion, hvis bække to er i drift så går det fint til hastigheder op til 180 km/h hvis hastigheden ikke er konstant over flere km.

Så har jeg lavet det sådan at den ene trip tæller som skal bruges til split distangerer automatisk nul stiller for vær 20 km  for hvis km tallet bliver for stort på de to trip tæller så begynder den ene at halte bag efter ved høje hastigheder.

Efter at jeg har lavet det automatisk nul stillingen for vær 20 km så køre det fint, lavet et test hvor der blev kørt 450 km men den hastighed på 150 km/h uden problemer.

Der er høj hastighed over flere km som giver problemer; så i det virkelige liv bliver det ikke noget problem.

Har også roder med at få udlæsning med komme men fandt til sidste kommandoen som løst det problem.

Men en ting som stadigvæk driller  er at når trip tæller starter med at tælle så startet den med !! 0.00  og når den så kommer til 9.99 er det næste tal 10.00 og der får man så et ekstre ciffer, og efter som at positionen på displayet angiver det første ciffer så flytter talle en plads længer til højre ved skift fra 9.99 til 10.00 og et plads yderlige ved 99.99 til 100.00.

jeg har lavet plads nok displayet til de ekstra ciffer men hvis de to trip tæller ikke har sammen antal ciffer så står de to tal ikke over hinanden hvilke ikke er så kønt.

Det man kan gøre er at lave tre placeringer at taller alt efter hvor mange ciffer man har også styre hvilke der bliver brugt med !!   if (trip < 99.99 )

Eller er der en smart måde at løse det på ???


Kode:
/* TRIPMETER  af Stig Hansen

                                                                                                                     Trip 01 & Trip 02 virker med resat funktion & automatisk reset at trip 02 for vær 20 km
                                                                                                                     

D2 = Taktgiver 01 til Trip 01 som er justerbar op  og ned samt reset bar = Takt01          Pull down 10K
D3 = Taktgiver 02 til Trip 02 som er reset bar.                          = Takt02          Pull down 10K
D4 = Trip 01 juster op                                                   = TripOp          Pull down 10K
D5 = Trip 01 juster ned                                                  = TripNed         Pull down 10K
D6 = Trip 01 reset                                                       = TripReset01     Pull down 10K
D7 = Trip 02 reset.                                                      = TripReset02     Pull down 10K
*/
// Opsætning at displayet
   #include <Wire.h>                   // Indlæser I2C biblioteket
   #include <LiquidCrystal_I2C.h>      // Indlæser er specielt I2C Bibliotek
   LiquidCrystal_I2C LCD(0X3F,16,2);   // Definere displayets I2C bus adr og antal karakter samt linje



const int Takt01      = 2;   // Pin som Taktgiver 01 er forbundet til
const int Takt02      = 3;   // Pin som Taktgiver 02 er forbundet til
      int TripOp      = 4;   // Pin som juster op af Trip01 er forbundet til
      int TripNed     = 5;   // Pin som juster ned at  Trip01 er forbundet til
      int TripReset01 = 6;   // Pin som reset af Trip01 er forbundet til
      int TripReset02 = 7;   // Pin som reset at Trip02 er forbundet til
     
 

  //Tæller 01
  long Takt01Impulser  = 0;    // Tæller antallet af impulser fra taktgiveren 01 "long" gør at tælleren ikke går i minus
  int  Takt01State = 0;        // Aktuelle status af taktgiver 01
  int  LastTakt01State = 0;    // Forrige status  af taktgiver 01


  //Tæller 02
  long Takt02Impulser  = 0;    // Tæller antallet af impulser fra taktgiveren 01 "long" gør at tælleren ikke går i minus
  int  Takt02State = 0;        // Aktuelle status af taktgiver 01
  int  LastTakt02State = 0;    // Forrige status  af taktgiver 01





  void setup()
{
  // Definere Pin type
  pinMode(Takt01,INPUT);
  pinMode(Takt02,INPUT);
  pinMode(TripOp,INPUT);
  pinMode(TripNed,INPUT);
  pinMode(TripReset01,INPUT);
  pinMode(TripReset02,INPUT);
 
 
  // Opstart at display
  LCD.init();
  LCD.backlight();                 // Tænder baggrunds lyset
  LCD.print("   TRIPMETER  ");     // Opstarts tekst
  LCD.setCursor(0,1);              // Placering af opstarts teksten
  LCD.print("#  BETA  2:22  #");   // Versions nummer
  delay(5000);                     // Visnings tid 5 sek
  LCD.clear();                     // Sletter alt telst på displayet
 
 
  LCD.setCursor(0, 0);             // Placering af Permanent tekst
  LCD.print("TRIP 1:0.00   KM");   // Permanent tekst
  LCD.setCursor(0, 1);             // Placering af Permanent tekst
  LCD.print("TRIP 2:0.00   KM");   // Permanent tekst
 
 
 
 // Opstart serial communication:
                                                                                        // Serial.begin(9600);

}


void loop()
{
 
  // Tæller 01
     float Trip01 = 0;
     Trip01 = (0.002175*Takt01Impulser);   // Første tal i parentesen er hjul omkredsen skal ændres to steder hvor tripmeters skal kalibreres
     
     Takt01State = digitalRead(Takt01);   //Læser taktgivers impulser
     if (Takt01State != LastTakt01State) // sammenligne taktGiverState til sin tidligere tilstand
{
     if (Takt01State == HIGH) // hvis staten har ændret sig, forøge tælleren
{
  // Hvis den nuværende tilstand er HIGH så  button
  // venter fra  off til on:
     Takt01Impulser++;
}     
  // Skrivet Trip 01 på LCD displayet
     LCD.setCursor(7, 0);
     LCD.print(Trip01); 
     
                                                                                   // Printer Trip 01 via Serial
                                                                                   /* Serial.print("SENSOR 01 :       ");
                                                                                      Serial.println(Takt01Impulser);
                                                                                      Serial.print("TRIP 01   :       ");
                                                                                      Serial.println(Trip01);
                                                                                   */
}
     LastTakt01State = Takt01State;  // Gemmer den aktuelle status som den sidste status til næste gennem løb og forhindre at taktGiverne kan få tælleren til at løbe
   //Forsinkelse som skal forhindre flere taktGiver impulser
     delay(1);
     
     
  // Reset af Trip 01
     if (digitalRead(TripReset01))
{
     Takt01Impulser =0;
 
  // Sletter kørt km
     LCD.setCursor(07, 0);
     LCD.print("0.00   ");
}



 
  // Tæller 02
     float Trip02 = 0;
     Trip02 = (0.002175*Takt02Impulser);   // Første tal i parentesen er hjul omkredsen skal ændres to steder hvor tripmeters skal kalibreres
   
    Takt02State = digitalRead(Takt02);   //Læser taktgivers impulser
    if (Takt02State != LastTakt02State) // sammenligne taktGiverState til sin tidligere tilstand
{
     if (Takt02State == HIGH) // hvis staten har ændret sig, forøge tælleren
{
  // Hvis den nuværende tilstand er HIGH så  button
  // venter fra  off til on:
     Takt02Impulser++;
     
  // skrivet Trip 02 på LCD displayet   
     LCD.setCursor(7, 1);
     LCD.print(Trip02);
     
                                                                                   // Printer Trip 02 via Serial
                                                                                   /* Serial.print("SENSOR 02 :       ");
                                                                                      Serial.println(Takt02Impulser);
                                                                                      Serial.print("Trip 02   :       ");
                                                                                      Serial.println(Trip02);
                                                                                   */ 
     //Forsinkelse som skal forhindre flere taktGiver impulser
     delay(1);
   
}   
   
}
     LastTakt02State = Takt02State;  // Gemmer den aktuelle status som den sidste status til næste gennem løb og forhindre at taktGiverne kan få tælleren til at løbe
   
   // Reset af Trip 02
     if (digitalRead(TripReset02))
 
{
     Takt02Impulser =0;
     
  // Sletter kørt km
     LCD.setCursor(07, 1);
     LCD.print("0.00   ");
}

  // Reseter automatisk Trip 02 for vær 20 Km
  if (Trip02 > 20.00)
  {
      Takt02Impulser =0;
 
     LCD.setCursor(07, 1);
     LCD.print("0.00   ");
  }
     
   
 
}
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 12, 2015, 07:02:15
En anden mulighed  ville være at bruge 5 tæller til vær trip  tæller, en for vær ciffer.

Det skal så virker på den måde at førte tæller aktiver den næste og reserver sig selv når den kommer til 10

Det vil løse problemet med at resultatet skifter positionen.

Spørgsmål er så om arduino vil køre bedre da de tal der skal beregnes ikke bliver så stort ???
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Juni 12, 2015, 09:52:59
Hvad med noget i stil med

If trip < 9.99 then print "space"
if trip < 99.99 then print "space"
if trip < 999.99 then print "space"

PS C er ikke mit speciale :-)
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 12, 2015, 10:45:28
Hvad med noget i stil med

If trip < 9.99 then print "space"
if trip < 99.99 then print "space"
if trip < 999.99 then print "space"

PS C er ikke mit speciale :-)

Lige nøjagtig det jeg tænkte på som en løsning, men det var jo bare det hvis det var en eller smart kommando så kunne få den til at skriver mod venstre eller et eller andet smart
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Juni 12, 2015, 14:04:29
måske der er noget med en format komando noget med %f4 bla bla ved sproget C har noget af den slags men ikke lige hvordan det virker.
Skal selv til at lege med arduino mini pro (Lige modtaget 5 stk) og 2 stk 20x4 display med spi/i2c indgang;
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 12, 2015, 18:55:06
Jeg valte den oprindelige ide

det kom til at se sådan her ud


det virker efter hensigten har dog ikke testet skiften mellen 99.99 100.00 og nul stilingen ved 999.99 km i nu men laver en natte teste sener i dag

Kode:
LCD.setCursor(0, 0);
  LCD.print("TRIP 1:  0.00 KM");

Kode:
    if (Trip01 < 9.99)
  {
     LCD.setCursor(9, 0);
     LCD.print(Trip01);
  }
      if (Trip01 > 10.00 or Trip01 > 99.99 )
  {
     LCD.setCursor(8, 0);
     LCD.print(Trip01);
  }   
   if (Trip01 > 99.99 )
  {
     LCD.setCursor(7, 0);
     LCD.print(Trip01);
  }

Kode:
 if (Trip01 > 999.99)
  {
      Takt01Impulser =0;
 
     LCD.setCursor(07, 0);
     LCD.print("  0.00 ");
  }
Titel: Sv: Indput til Rally Computer
Indlæg af: microtec efter Juni 12, 2015, 19:10:32
Jeg er heller ikke den store hej til C, men jeg mener det kan løses med denne ene linje:

LCD.printf( "%6s\n", Trip01 );

"%6s\n" laver en udskrift der fast er 6 tegn bred (6 fordi decimal-tegnet også er et tegn)
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 13, 2015, 12:13:44
Jeg er heller ikke den store hej til C, men jeg mener det kan løses med denne ene linje:

LCD.printf( "%6s\n", Trip01 );

"%6s\n" laver en udskrift der fast er 6 tegn bred (6 fordi decimal-tegnet også er et tegn)

det kan jeg ikke lige få til at virke

Jeg har fået testet skiftet mellem 99.99 og 100.00 det fungere ikke efter hensigten da den jeg ikke kunne få OR til at stoppe for udskrift at positionen som bliver bruget mellem 10.00 og 99.99 så det sidste ciffer blev skrevet 2 gang så 123,45 blev skrevet som 123.455

gik lidt får jeg luret hvad problemet var men fandt fejlen og en løsning som ser sådan her ud

Kode:
      if(Trip01 < 9.99)
  {
     LCD.setCursor(9, 0);
     LCD.print(Trip01);
  }
      if (Trip01 > 10.00 ) if (Trip01 < 99.99 )
  {
     LCD.setCursor(8, 0);
     LCD.print(Trip01);
  }   
    if (Trip01 > 99.99  )
   
  {
     LCD.setCursor(7, 0);
     LCD.print(Trip01);
  }
Titel: Sv: Indput til Rally Computer
Indlæg af: microtec efter Juni 13, 2015, 13:36:06
Jeg er heller ikke den store hej til C, men jeg mener det kan løses med denne ene linje:

LCD.printf( "%6s\n", Trip01 );

"%6s\n" laver en udskrift der fast er 6 tegn bred (6 fordi decimal-tegnet også er et tegn)

det kan jeg ikke lige få til at virke


Hm, det skal kunne laves med en enkelt en simpel formaterings kommando i printf.
Som nævnt er jeg ikke så stærk i C, så prøv selv at kik på formateringsmulighederne her:

http://alvinalexander.com/programming/printf-format-cheat-sheet

Du må skulle ned i afsnittet printf - floating point numbers, så det burde nok være:

   LCD.printf("'%6.2f'", Trip01);


Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 13, 2015, 15:19:24
Jeg er heller ikke den store hej til C, men jeg mener det kan løses med denne ene linje:

LCD.printf( "%6s\n", Trip01 );

"%6s\n" laver en udskrift der fast er 6 tegn bred (6 fordi decimal-tegnet også er et tegn)

det kan jeg ikke lige få til at virke


Hm, det skal kunne laves med en enkelt en simpel formaterings kommando i printf.
Som nævnt er jeg ikke så stærk i C, så prøv selv at kik på formateringsmulighederne her:

http://alvinalexander.com/programming/printf-format-cheat-sheet

Du må skulle ned i afsnittet printf - floating point numbers, så det burde nok være:

   LCD.printf("'%6.2f'", Trip01);


Ja der ser fornuftig ud når man kikke det i gemmen som du linker til men hvis men prøver får jeg denne her fejl meldinge

Arduino: 1.6.4 (Windows Vista), Board: "Arduino Nano, ATmega328"

RC_2_23.ino: In function 'void loop()':
RC_2_23:178: error: 'class LiquidCrystal_I2C' has no member named 'printf'
'class LiquidCrystal_I2C' has no member named 'printf'

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.



som jeg forstår det så er det displayet som ikke kan håndtere det
Titel: Sv: Indput til Rally Computer
Indlæg af: microtec efter Juni 13, 2015, 18:24:35
Ja der ser fornuftig ud når man kikke det i gemmen som du linker til men hvis men prøver får jeg denne her fejl meldinge

Arduino: 1.6.4 (Windows Vista), Board: "Arduino Nano, ATmega328"

RC_2_23.ino: In function 'void loop()':
RC_2_23:178: error: 'class LiquidCrystal_I2C' has no member named 'printf'
'class LiquidCrystal_I2C' has no member named 'printf'

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.



som jeg forstår det så er det displayet som ikke kan håndtere det

Tja, det er ellers standard C, men efter lidt research har jeg fundet ud af at for at spare kodeplads har man lavet en skrabet version til Arduino, som "does not include the functionality to output floating point values".

Beklager forvirringen  :)
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 14, 2015, 00:46:36
Ja der ser fornuftig ud når man kikke det i gemmen som du linker til men hvis men prøver får jeg denne her fejl meldinge

Arduino: 1.6.4 (Windows Vista), Board: "Arduino Nano, ATmega328"

RC_2_23.ino: In function 'void loop()':
RC_2_23:178: error: 'class LiquidCrystal_I2C' has no member named 'printf'
'class LiquidCrystal_I2C' has no member named 'printf'

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.



som jeg forstår det så er det displayet som ikke kan håndtere det

Tja, det er ellers standard C, men efter lidt research har jeg fundet ud af at for at spare kodeplads har man lavet en skrabet version til Arduino, som "does not include the functionality to output floating point values".

Beklager forvirringen  :)

Helt ok men på den anden side så lære men jo noget under vejs

Har  også Google lidt på emnet og der er et par løsninger som vil kunne bruge ser det ud til, men det er ikke så lige til som med C printf så ind til hvider så beholder jeg den løsning som jeg har lavet, så kan det godt være jeg kikke på der en gang til på et sener tids punkt
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 18, 2015, 17:42:23
Så er jeg kommet så langt at det hele virker og kan bruges , men der er nogle små ting som der skal finpudsets.

Der er to tæller som måler distange

Den ene til at måle Total km og så en til split km,  men ved hastigheder på over 160 km/h begynder split distange at flade bag efter, der er ikke noget som der vil give problemer i det virker verden, for hvis jeg kommer op på så høje hastigheder så bliver det over så kort distange at forskellen på det to tæller vil være minimal, men vil prøve og se om jeg kikke man minimeret problemet ved at bruge
interrupt funktionen til de to tæller så de hele tiden er opdateret, det betyder jo ikke så meget at displayet er en smule bag efter da det så vil vise den rigtige distange så snart Arduinoen får lidt luft.

Jeg har lavet det sådan at jeg kan juster de totale km op og ned under vejs hvis man får kørt forkert så kan man juster totalen så den passer med Roadbooken igen.

Når man køre og skal juster km ned så skal justeringen jo over vinde den km som man tilbage lækken samtidig med man justere, det virker fint, men når man så holder stille så vil justeringen gå noget hurtigere da der jo ikke kommer pulser fra hjulet.

Vil prøve at lave noget justeringen som er hastigheds afhærdning, ved ikke lige om der bliver noget med nogle step men eksempel t  justeringen hastigheder alt efter hvor hurtig man køre.

Så har jeg været ved at overveje om jeg skulle gemme de kørte km så at Arduino husker hvor langt man er kommet når den starter op, det var meningen at jeg vil brugen Eeprom en til det men den kan man jo kun skrive til ca 100000 gange så det går ikke lang tid for det er slut hvis der bliver skrevet for vær loop gennem gang, man kunne måske lavet et efter andet med hvis hastigheden er 0 km/h i X sek så gennem man en gang.

En anden løsning var at udvige med et SD kort, eller bare lade vær med at skulle den overhovedet når man er af sted, så meget strøm bruger det tros alt heller ikke
Titel: Sv: Indput til Rally Computer
Indlæg af: gsborn efter Juni 18, 2015, 18:13:30
Bruge sd kort, som nok er det nemmeste at sætte op og så meget kan selve arduino heller ikke huske  :) ,  det kan ja også være at problemet med  de to tællere bliver løst dermed, kun en gæt.
Måske kan den ikke komme af med data ved forhøj hastighed.

En anden tinger er dine fejlmeddelser :
-----
RC_2_23.ino: In function 'void loop()':
RC_2_23:178: error: 'class LiquidCrystal_I2C' has no member named 'printf'
'class LiquidCrystal_I2C' has no member named 'printf'
--------
Det er fordi i biblioteket for " LiquidCrystal_I2C " ikke er en funktion/egenskab som hedder 'printf'
Det kan man efter prøve ved at søge i  *.cpp og i  *. h filen af  " LiquidCrystal_I2C " biblioteket.

Med venlig hilsen
Gregor
Titel: Sv: Indput til Rally Computer
Indlæg af: microtec efter Juni 18, 2015, 19:16:21
Bruge sd kort, som nok er det nemmeste at sætte op og så meget kan selve arduino heller ikke huske  :) ,  det kan ja også være at problemet med  de to tællere bliver løst dermed, kun en gæt.
Måske kan den ikke komme af med data ved forhøj hastighed.

Husk at SD-Card er baseret på flash-teknologi og også har et begrænset antal write cycles.
Jeg har set at det typisk ligger på 10k-100k writes, så det er ikke bedre end EEPROMen.

Overvej om det overhovedet er nødvendigt at gemme alle ændringer på tællerne. Måske kunne man nøjes med at gemme data hvert 10 sekund og kun hvis der er sket ændringer.
Man kunne også overveje at skifte til en ny lokation i EEPROMen når der er skrevet f.eks. 90.000 gange til samme lokation.
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 18, 2015, 21:40:19
Ja så er SD heller ikke vejen frem

Det jeg havde overvejet at gøre et der kun bliver gemt data hvis jeg holder stille i eksempel 1 min også bliver der gemt en værdig.

En anden mulighed er at jeg altid har strøm til Ardiunoen og så slukker for baggrundslyset og displayet når motorcyklen bliver slukket og når jeg så tænder motorcyklen igen tænder for displayet og baggrunds lyset og så køre en velkommen tilbage tekst.
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Juni 19, 2015, 00:41:57
Eller
http://www.microchip.com/pagehandler/en-us/products/memory/serialSRAM/home.html
Bare en ide, evt med bat backup :-)
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 22, 2015, 11:54:03
Så er jeg kommet en smule hvider med projektet.

Der er blevet lavet en den små ændringer, ikke noget som forbedre selv programmen men nogle ting som gør det nemmer at fejl finde og lave ændringer i, blad andet så er nogle af tal så som hjul omkredsen og versions nu blevet lavet som variabler så det er nemmer at finde i starten af programmen.

Men sådan vil det jo være at når man starter fra bunden af og ikke har rodet med programmet før så finder man nogle ting undersenvej det skulle havde været lavet anderledes fra starten af, men man  læger noget undrer vejs.

Jeg har fået lavet sensor indgange lavet om til interrupts det skulle jeg havde haft gjort fra starten af kan jeg godt se nu det løser rigtig mange problemer med at få trip til at måle rigtig.

Når Arduionen kommer på overarbejde når der bliver kørt stærkt så stopper displayet med at opdatere men så snart hastigheden kommer ned igen og den kan følge med og får over skud til at skrive til displayet og lave det beregninger som der skal til så passer afstanden stadigvæk da den counter som holder styr på impulser fra hjul sensoren er lavet som interrupts og den har helle tiden talt rigtig.

Grunden til at jeg havde fra valgt interrupts til at starte  ned var på grund af problemet med debounce, men som jeg heller ville løse med en software løsning frem for en hartware løsning, men nu er der bestilt komponenter til en hartware løsning.


Probletikken omkring at gemme ned kørte km har jeg fundet en løsning på.

Det bliver sådan at Arduion ikke bliver slukket og det så kun er Displayet som bliver tænd og slukket når motor cyklen bliver slukket, då den måde forsvinder den kørte distage ikke når der bliver holdt pause.
Så har jeg lavet det sådan at når displayet er slukket så kan man ikke nulstille eller justeret op eller ned, så risikere jeg ikke at nogle pilfinger for laver rod i systemet.

Signalet bliver lavet med et relæ som bliver trukket at tændingen fra motorcyklen som så sidder en indgang HIGH elle LOW i Arduionen.

Det virker rigtig fint men jeg kunne godt tænke mig at når signalet går fra LOW til HIGH at få skrevet en tekst i displayet en gang, har rodet noget med det og kan ikke finde en løsning hvor teksten KUN bliver skrevet en gang.

Hvordan løser man lige det problem ???
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Juni 22, 2015, 13:50:00
Kan du ikke teste på en indgang og så lade den sætte en variabel til true f.eks. når så du har skrevet teksten sætter du den til falsk.

Læser indgangben og tjekker variablen hvis de to tilstande begge er tilstæde skriver du til displayet, og sætter variablen til falsk, så når du checker indgangs benet og variablen, er begge tilstande ikke til stede og der skrives ikke til displayet.

Håber du forstår hvad jeg mener, ellers forklar jeg det gerne igen :-)
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 22, 2015, 22:42:25
Efter jeg havde skivet mit indlæg kom jeg til at tænke på at det måtte kunne lade sig gøre et lave det en counter også nogle if og lidt andet kram, i stil med det som du beskriver så er helt med på hvad du mener.
Så det kikker jeg hvider på
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juni 25, 2015, 10:08:56
Har ikke lige fået kikke mere på selve programmet omkring TRUE & FALSE i nu, da der er kommet stumpet til hardware løsningen på Debouncs proplemet i forbindelsen med  interrupt, så tiden er gået med at rode med Schmitt Trigger og RC led.

Efter lidt roden rundt frem tilbage kom jeg frem til at 10K & 3,3uF er en brugbar løsning hvor RC ledet kan følge med helt op til hastigheder på ca 250 km/h, det 250 km/h er ”målt” ved hjælp af en omdrejnings tæller og så beregnet da det speedometer som jeg bruget til at tjekke alle målinger kun går op til 199.9 km/h.

Ved 250km/h ”fryser ” RC ledet da kondensatoren ikke kan følge med længer, så intrerupt i Arduino er et super god løsning til en sikker registrering af talte impulser.

Prøvet også med 10K & 2uF og der ”fryser” RC ledet først ved omkring 500 km/h.

Det næste som står på programmet er at få kikket på   TRUE & FALSE så vil jeg havde lavet en hastigheds målings funktion, som skal bruget stil at justere hastigheden på justeringen op & ned af kørte km 
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Juli 23, 2015, 17:10:32
Jeg har nu modtaget et par ekstra Nanoer og et par display, så jeg kan få bygget en udgave til selve motorcykelen til test og så vil jeg havde en udgave til test i værkstedet til at teste evt program ændringer


Efter som at spændingen på motorcyklen kommer op på over 12 V var planen at bruge en 5 V spændingsregulator sammen med et par kondensator til at lave en  stabil spændings forsyning.

Jeg vil forsyne Nanoen med konstant spænding fra batteriet også vil jeg tage et spændingen fra tændingen til signal til at tænde og slukke for displayet.
Det signalet er jo 12V og indgangen på Nanoen må ikke få mere end 5 V så planen var at bruge et relæ, men så var det jeg tænkte at det måtte kunne lade sig gøre at bruge Schmitt triggeren som der er der i forvejen da den er med 4 trigger og det kun er den ene som p.t, er i brug.

Men kan ikke lige luger om det er en dårlig ide og løsningen med relæet ikke er det aller bedste løsning.

Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter August 09, 2015, 15:51:33
Nu er jeg kommet så langt at jeg har en prototype så jeg kan gå bygget ind i en kasse og fået lavet nogle test men rally computer monteret på motorcyklen

https://www.youtube.com/watch?v=FH7d0mON2yo&feature=youtu.be (https://www.youtube.com/watch?v=FH7d0mON2yo&feature=youtu.be)
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Oktober 27, 2015, 10:39:06
Her kommer lige en lille update på projektet.

Selv proto typen  har nu kørt omkring 1600 km på selv motorcyklen og jeg har deltaget i 2 Roadbook rally hvor den er blevet teste unde de forhold hvor den normal ville skulle bruges.

Både selv elektronikken og software vikker over alt forventning og det har ikke været nogle problemer

De forsætninger som jeg havde sat op for projektet er blevet justeret en smule under vejs.
Det tryk jeg har til betjening er skrumpet ind til 3 stk hvor nulstilling  at hovedtælleren foregår ved at man skal trykke på flere tryk samtidig, det spare et tryk også kommer man ikke til ved et uheld at nulstille det undervejs hvilke ville være katastrofalt under et løb.

Hen over vinteren skal jeg havde lavet den enlige udgang hvor der skal nørdes noget med selve kode også skal jeg havde skrumpet den færdige enhed ned.

Overlidt om jeg skulle vælge et andet display for at få noget mere plads til informationer.

 
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Oktober 27, 2015, 11:18:47
Tillykke med dit projekt. Dejligt når noget flasker sig :-)
Det næste kunne jo så være at fjerne nano og selv putte en chippå et hjemmelavet board med resten på.
Det er ikke så svært og kan gøres for rimlige penge, selv får jeg lavet print til ca $10 for max 5x5cm printkort :-)

Evt kikke eps8266 meget kraftiger, masse af ram, flash osv. og Wifi :-) Hvis det evt kunne bruges til at "udlæse" turen med / statistik Bare en ide.
Og kan stadig programmeres via Arduino IDE.
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Oktober 27, 2015, 11:45:14
Ja det er fedt når det lykkes, men der er også gået mange timer man at få det hele til at spilde, så man skal kunne lide at rode med det for eller så løber man hurtig tør for energi

Har været ved at lave sir eget boord har jeg været ved at kikke på og det giver ingen mening som jeg ser det.
Det vil både komme til at fylde mere og blive dyre og ikke mindst tage længer tid så det, men der skal helt sikke lavet et ”rigtig” print i stedet for det huld print jeg har lige nu.

Nano en gør det helt fint til mit brug og det med at logge data under vejs får jeg ikke brug for og til nogle af det løb jeg køre der det heller ikke lovligt at opsamle data under vejs så det giver sig selv.
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Oktober 27, 2015, 12:51:37
Det med at lave sin egen processor print, er nu ikke så svært, i bund og grund kræver det µPU to kontensator og et xtal, så er den oppe at køre, men meget nemmer at google det :-)
Og det kan laves rigtigt lille, hvis man har mod på at bruge SMD.
Modulerne bruger man normalt kun til prototyper, men igen så er det hele samlet på et megt lille sted, og tja nemmere at smide et i et print også skal man ikke tænke mere på µPU kortet.
Men skal det være småt så må man selv i gang :-) Fra bunden af. :-)

Her er et link til et diy http://301o583r8shhildde3s0vcnh.wpengine.netdna-cdn.com/wp-content/uploads/2014/05/arduinosch.png
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Oktober 27, 2015, 20:30:59
SMD har jeg ikke rodet med før og det bliver nok en kende overkill.

Men kunne da godt være jeg skulle give et boord en chance  mere, har eller været ved at kikke på det men syndes ikke det blev småt nok , men har efter følgende valt en større display og men den IP 67 kasse jeg har valt at bruge har jeg enlig en del plads i overskud som ikke bliver brugt.

Der er jo også det ved at jeg kan spare hele usb delen væk også bruge en usb/ Rs232 conveter som man strikker op til RX & TX når det skal ligger program i

Så er vi der hende at et krustal og nogle kondensator samt en 7805 så er vi ved at være i mål da forsynings spændingen ligger op 14,5 V.

en ting jeg skal være sikker på er den mekaniske styrke da enheden vil få en del knups når der bliver kørt løb
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Oktober 27, 2015, 23:59:04
I stedet for 7805 kunne du kikke på sådan en fætter her
http://www.aliexpress.com/item/Mini-DC-DC-Step-Down-Power-supply-Module-3A-adjustable-Converter-4-5V-28V-to-0/32403600181.html

Den er ca. 17 x 18 mm :-)
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Oktober 28, 2015, 00:20:59
Så kan jeg jo lige så godt tage et færdig nano boord hvis jeg alligevel bruger en færdig strømforsynings print og det fylder nu også en del i forhold til en 7805
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Oktober 28, 2015, 12:41:19
Ja eller sætte det lille print på indgangen fra din forsyning, juster det til 5v og så har du op til 3 amp ud. og er på størrelse med en 7805 uden kondensator osv. :-)
Titel: Sv: Indput til Rally Computer
Indlæg af: stig efter Oktober 28, 2015, 17:04:31
nu har jeg jo slet ikke behov for at kun trække 3A til den her konstruktion, og kan heller ikke se fidusen i at man ville bygge sig eget boord og så starter med at bruge færdige boord som en det af konstruktionen så kan jeg jo lige så godt bare bygge videre på et Nano
Titel: Sv: Indput til Rally Computer
Indlæg af: asm7100 efter Oktober 28, 2015, 18:32:26
Nej det bestemmer man jo helt selv :-)