Arduino Input Høj-Lav

Fra Holstebro HTX Wiki
Skift til: navigering, søgning

En Arduino har grænser for, hvor den skifter mellem et logisk højt og lavt input. Hvilket kan bruges under programmering af en Arduino til at konvertere strøm til en digital værdi. Der skal være en bestemt spænding til stede før en Arduino anser inputtet, den modtager som 1 eller 0.

Grænsen kan findes ved at lave en opstilling, hvor Arduinoen viser spændingen ved et skift fra HØJ til LAV eller omvendt, ved at printe spændingen i den serielle monitor.


Datablad

Arduino HIGH-LOW skift.PNG

Tabellen er taget fra databladet[1] og viser hvornår et input med sikkerhed er LAV eller HØJ.

Når inputspændingen er indenfor -0.5 og 0.2 eller 0.3 gange inputspændingen, afhængig af inputspændingen, er den LAV.

Når inputspændingen er indenfor 0.6 eller 0.7 gange inputspændingen og inputspændningen + 0.5, er den HØJ.

Test kode

Billedet viser et diagram over den opstilling der er brugt.
Hoej-lav-input-opstilling.PNG
Pin 8 er det digitale input. Der er også koblet et voltmeter til inden den digitale indgang, for at måle inputspændingen. Der er også herfra koblet en ledning ned til den første analoge indgang på Arduinoen, denne måler også hvor meget strøm, der er inden indgang.

Koden til denne opstilling:

//definere input pins nummer 
int inputD = 8;
int inputA = A0;
//denne variabel indeholder den sidste digitale værdi, og nuværende hvis det er ligeefter skiftet.
boolean lastDigitalValue = false;
//sætter arduinoen op, så den kan læse værdierne af pinene, og kommunikere med computeren.
void setup() { Serial.begin(9600);
  pinMode(inputD, INPUT);
  pinMode(inputA, INPUT);
}
void loop() { //den digitale værdi læses og gemmes til senere brug.
  boolean digitalValue = digitalRead(inputD) == HIGH;

  //den analog værdi gemmes til hvis der nu er skift hvilket ville kunne være tilfældet, hvis den først blev læst,
  //så der er mindst chance for at den skifter inden at den sendes til computeren,
  //da der kan være lidt forsinkelses fordi der sker lidt før der sendes.
  //den er conventere desuden fra analog værdi(0-1023) til volt(den er kallibreret efter et volt meter, hvor 1023(analog værdi) = 5V).
  float analogValue = ((float) analogRead(inputA))/1023*5.104;

  //tjekker om den digitale værdi er skiftet siden sidst.
  if(digitalValue != lastDigitalValue){
    //fortæller om det er op eller ned gang, altså fra LOW til HIGH eller omvendt.
    if(lastDigitalValue) Serial.print("Change at(1->0): ");
    else Serial.print("Change at(0->1): ");

    //analog værdi tilføjes til stringen.
    Serial.print(analogValue);
    Serial.print("V\n");

    //den sidste digitale værdi opdateres.
    lastDigitalValue = digitalValue;
  }
}

Kode fra Daniel Aarup Hasselund og Ole Van Santen's Arduino aflevering

Den ovenstående kode's output vil se således ud:

Arduino udskrivning af hoej lav test.png

Ud fra dette kan det ses at en Arduino har input hysterese da skiftet fra højt til lavt ikke ligger samme sted som fra lavt til højt.

Hysterese

At det har en hysterese vil sige at systemet er afhængigt af om en variable er stigende eller aftagende. I forbindelse med arduinoens input kan dette hjælpe med at forhindre at et input ligger og svinger mellem højt og lavt hvis den for eksempel kun lige er oppe og være høj.

Noise Gate Hysteresis.svg.png

Her er et eksempel hvor der øverst vises en graf med input og output uden en hysterese og nederst er der en graf hvor man kan se input og output med hysterese. Som man kan se kommer outputtet af det ustabile input til at svinge meget uden en hysterese hvor at det samme input med en hysterese er meget mere stabilt.

Referencer