Sida 1 av 2

Lustgas styrning.

Postat: mån jan 25, 2021 2:19 pm
av Kadett4wd
Vet nån om nån liten lådda som man kan exempelvis koppla mot en roterande axel, i detta fall ett framhjul.
Och sedan ställa in en önskad hastighet det jordar en signal vid?

Det måste mao inte vara nån dedikerad lustgas lådda, den ska bara göra det jag beskrev ovan.

Mvh

Re: Lustgas styrning.

Postat: mån jan 25, 2021 4:06 pm
av super7
Det skulle väl funka med en Vems box men det kanske är lite väl lyxigt för att bara
styra en hastighets utgång.

Re: Lustgas styrning.

Postat: mån jan 25, 2021 4:59 pm
av JoBy
Arduino NANO löser det nästan gratis, om man skriver några rader kod.

Det finns bra exempel. Utvecklingsniljön för windows laddar man ner gratis. Den programmeras via en USB-kabel.

Man kan mäta frekvens på digital in och sätta en digital ut.

Det bör alltså vara en aktiv pulsgivade, inte bara en VR-givare.

Den kan matas direkt med 12V.
nano.PNG
nano.PNG (327.87 KiB) Visad 1650 gånger

Re: Lustgas styrning.

Postat: mån jan 25, 2021 7:20 pm
av Kadett4wd
Svar till båda:

uj uj,, jag är ju ingen programmerare direkt ;)

Ja en vemsbox blir lite kaka på kaka, jag har ju ett digitalt justerbart tändsystem redan(Ignitech,det är på en motorcykel/moped)
Och det har ganska bra utgångar att styra lustgas solenoider, saknar bara att kunna justera bort gasen i låga hastigheter.

Re: Lustgas styrning.

Postat: mån jan 25, 2021 8:37 pm
av JoBy
Får se om jag kan övertala dig att bli en programmerare då :) Det är ju nästan gratis att testa.

Här är en lämplig Hall-givare som känner av om en magnet är i närheten.
https://www.conrad.se/p/iduino-1485327- ... no-1485327

Här är ett program som troligtvis löser ditt problem. ( har ej testat )

Kod: Markera allt

#define pin_in  7
#define pin_out 8

int ontime, offtime, duty;
float freq, period;
   
void setup()
{
  pinMode( pin_in, INPUT );
  pinMode( pin_out, OUTPUT );
}

void loop()
{
   ontime = pulseIn( pin_in, HIGH );
   offtime = pulseIn( pin_in, LOW );
   period = ontime + offtime;
   freq = 1000000.0 / period;

   if ( freq > 1000 )
   {
      digitalWrite( pin_out, HIGH );
   }
   else
   {
      digitalWrite( pin_out, LOW );
   }
}
För början namnges två pinnar för att göra det mer lättläst samt att det blir enklare om man vill flytta in eller utgång till något annat ben.
Därfter deklareras några variabler. int är heltal och float är decimaltal.

Funktionen setup() anropas en gång när programmet startar. Här konfigureras pinnarna som ingång respektive utgång.

Funktionen loop() anropas därefter gång på gång så ofta den hinner.
Först mäts hur många millisekunder ingången är hög.
Sedan mäts hur många millisekunder ingången är låg.
Från dessa beräknas först perioden på signalen och sedan frekvensen.
Om frekvensen är över 1000 så skriver så sätts utgången hög = 5V, annars sätts den låg = 0V.

Det verkar väl enkelt :)

Vill man få det mer konfigurerbart kan man konfigurera en annan pinne som analog in och koppla den till en potentiometer. Sedan jämför man mätta frekvensen mot det analoga värdet från potentiometern. Då blir det lätt att justera hastigheten när signalen slår till.

exempel på hjälptexter:
https://www.arduino.cc/reference/en/lan ... setlang=it

Re: Lustgas styrning.

Postat: tis jan 26, 2021 12:11 pm
av Kadett4wd
Oj oj,,, det där måste jag sätta mig in i, jag programmerade lite basic en gång i tiden på min vic20, typ 37år sen eller nåt :)

Re: Lustgas styrning.

Postat: tis jan 26, 2021 4:34 pm
av Steve
Kadett4wd skrev: tis jan 26, 2021 12:11 pm Oj oj,,, det där måste jag sätta mig in i, jag programmerade lite basic en gång i tiden på min vic20, typ 37år sen eller nåt :)
10 PRINT "TURBO"
20 GOTO 10
RUN

Eller hur det nu var :D

Re: Lustgas styrning.

Postat: tis jan 26, 2021 7:35 pm
av JoBy
Kadett4wd skrev: tis jan 26, 2021 12:11 pm Oj oj,,, det där måste jag sätta mig in i, jag programmerade lite basic en gång i tiden på min vic20, typ 37år sen eller nåt :)
Jag har faktiskt kvar min gamla VIC20 i källaren.

Re: Lustgas styrning.

Postat: ons jan 27, 2021 6:33 am
av Kadett4wd
Steve skrev: tis jan 26, 2021 4:34 pm
Kadett4wd skrev: tis jan 26, 2021 12:11 pm Oj oj,,, det där måste jag sätta mig in i, jag programmerade lite basic en gång i tiden på min vic20, typ 37år sen eller nåt :)
10 PRINT "TURBO"
20 GOTO 10
RUN

Eller hur det nu var :D
Yes...
Men detta blev fränare:
10 PRINT "TURBO";
20 GOTO 10
RUN

Då blev det inte radbyte efter varje 'print' ;)
Så det fyllde skärmen jussom.

Jag skrev ett helt jäkla sånt där text äventyrsspel(hade minnes expanderkort) åt syrran, det var nån skatt hon skulle hitta, belöningen vart att skärmen blinkade gult och det stod 'GULD' med den där lilla koden ovan :)

Re: Lustgas styrning.

Postat: ons jan 27, 2021 6:34 am
av Kadett4wd
JoBy skrev: tis jan 26, 2021 7:35 pm
Kadett4wd skrev: tis jan 26, 2021 12:11 pm Oj oj,,, det där måste jag sätta mig in i, jag programmerade lite basic en gång i tiden på min vic20, typ 37år sen eller nåt :)
Jag har faktiskt kvar min gamla VIC20 i källaren.
Min låg en massa år tills kondensatordöden tog den, då gav jag bort den till en kille som samlade på gamla datorer :)

Re: Lustgas styrning.

Postat: fre jan 29, 2021 2:13 am
av JoBy
Jag tänkte att det är lika bra att knåpa ihop ett bättre program, och detta har jag även provkört.
Det är lite mer komplicerat men mycket bättre om man vill bygga vidare.

Den stora skillnaden är att denna variant använder en interrupt-rutin för att mäta tiden mellan två fallande flanker.
Huvuddelen av programmet ( loop() ) behöver då inte mäta periodtiden utan kan göra andra saker i godan ro. T.ex. mäta och styra andra saker om man vill det utan att det påverkar exaktheten i tidsmätningen.

Jag la även in en mätning av ett analogvärde så att det är enkelt att med en potentiometer trimma in frekvensen när utgången ska bli hög.

Programmet ser mycket längre ut men det är till stor del kommentarer.

Kod: Markera allt

// Först lite definitioner
#define pin_in  2
#define pin_out 8
#define pin_analog A0
#define min_period 1000

// Globala variabler som inte tappar minnet
// volatile är för variabler som använs både i och utanför interruptrutinen.
unsigned long lastTimestamp = 0;
volatile bool v_newPeriod = false;
volatile unsigned long v_period;

// Denna funktion anropas en gång när programmet startar.
// Konfigurera digitala pinnar.
// Koppla interrupt till fallande flank på pinne 2
// Serial används för att kommunicera med PC över USB-kablen. 
// Det används för att skriva ut frekvensen och verifiera att programmet fungerar.
void setup() 
{
  pinMode( pin_in, INPUT_PULLUP );
  pinMode( pin_out, OUTPUT );
  attachInterrupt( digitalPinToInterrupt( pin_in ), fallingISR, FALLING );
  Serial.begin( 9600 );
}

// Här är interruptrutinen som anropas varje gång pinne 2 går från hög till låg.
// Denna rutin ska vara kort och sparar bara nödvändiga data i delade variabler.
// Det är även en kontroll att pulsen inte är för kort för att undvika kontaktstudsar.
void fallingISR() 
{
  unsigned long microseconds = micros();
  unsigned long period = microseconds - lastTimestamp;
  lastTimestamp = microseconds;
  if( period > min_period )
  {
    v_period = period;
    v_newPeriod = true;
  }
}

// Denna funktion anropas gång på gång så ofta den hinner.
void loop() 
{
  unsigned long period;
  float freq;

  if( v_newPeriod )
  {
    // Interruptrutinen signalerar att den har mätt en ny period.
    // Stäng av interrupten, spara perioden och återställ flaggan.
    // Aktivera därefter interrupt igen.
    noInterrupts();
    period = v_period;
    v_newPeriod = false;
    interrupts();

    // Beräkna frekvensen
    freq = 1000000.0 / period;
    
    // Läs analog in och jämför mot frekvensen
    if ( freq > analogRead( pin_analog ) ) // 0V = 0, 5V = 1023
    {
      digitalWrite( pin_out, HIGH );
    }
    else
    {
      digitalWrite( pin_out, LOW );
    }

    // Skriv uppmätt frekvens till PC
    Serial.println( freq );
  }  
}


Re: Lustgas styrning.

Postat: sön jan 31, 2021 6:38 pm
av Kadett4wd
Nice,, jag ska testa det där, ska köpa hem grunkorna få se =)

Re: Lustgas styrning.

Postat: mån feb 01, 2021 12:28 am
av JoBy
Spännande :)

Här laddar du ner utvecklingsmiljö:
https://www.arduino.cc/en/software

I princip ska det efter installation bara väljas rätt com-port och ansluta USB-kabeln för att kunna kompilera och ladda programmet på controllern. Om man köper en billig pirat-controller istället för en äkta Arduino ( samma chip och samma prestanda ) så är det inte säkert att det fungerar. Jag var tvungen att ladda en annan drivrutin vilket inte var svårt bara man hade listat ut vad problemet var.

Det finns mycket funktioner direkt men även massor av funktionsbibliotek man kan komplettera med.

Re: Lustgas styrning.

Postat: tis feb 02, 2021 6:30 am
av Kadett4wd
Och eftersom jag är ganska rudis på sånt här måste jag försiktigt fråga om du kan länka vars man köper riktiga grejer?

Prettyplease ;)

Re: Lustgas styrning.

Postat: tis feb 02, 2021 10:59 am
av Hasse Bus
Nu frågade du ju inte mej, men jag handlar på Autema http://www.autemashop.com/category_Ardu ... d_nano.htm
eller M.nu https://www.m.nu/mikrokontroller-1/arduino