Érzékelő bemenet kalibrálása

Az analóg érzékelő várható maximum és minimum értékeinek meghatározása.


Utolsó felülvizsgálat: 2022.02.04 16:50


Ez a példa egy technikát mutat be az érzékelő bemenetének kalibrálására. A kártya az indítás után öt másodpercig méri az érzékelőt, és követi a kapott legmagasabb és legalacsonyabb értékeket. Ezek a szenzorleolvasások a vázlat végrehajtásának első öt másodpercében határozzák meg a minimális és maximális várható értékeket a ciklusban mért értékekhez.

Hardver szükséglet

  • Arduino kártya

  • LED

  • analóg érzékelő (egy fotoellenállás is megteszi)

  • 10 kohm-os ellenállás

  • 220 ohm-os ellenállás

  • összekötő vezetékek

  • dugdosós próbapanel (breadboard)

Az áramkör

Analóg érzékelő (pl. potenciométer, fényérzékelő) a 2. analóg bemeneten. LED a 9-es digitális kivezetésen.

Csatlakoztasson egy LED-et a 9-es digitális kivezetéshez 220 ohmos áramkorlátozó ellenállással sorba kapcsolva. Csatlakoztasson egy fotoellenállást az 5V-hoz, majd az analóg 0-s kivezetéshez 10 kohmos ellenállással a földhöz.

Vázlat

A kód

A setup előtt beállítja a minimális és a maximum kezdeti értékeit, például:

int sensorMin = 1023;        // minimum érzékelő érték
int sensorMax = 0;           // maximum érzékelő érték

Ezek visszásnak tűnhetnek. Kezdetben beállít minimumnak egy magas értéket, és ha minden eddiginél alacsonyabb értéket olvas, akkor elmenti új minimumként. Hasonlóképpen beállít maximálisnak egy alacsony értéket, és minden beolvasott magasabb értéknél menti az új maximumot, például:

// kalibrálás az első öt másodperc folyamán
while (millis() < 5000) {
  sensorValue = analogRead(sensorPin);
  // rögzítse az érzékelő maximális értékét
  if (sensorValue > sensorMax) {
    sensorMax = sensorValue;
  }
  // rögzítse az érzékelő minimális értékét
  if (sensorValue < sensorMin) {
    sensorMin = sensorValue;
  }
}

Ily módon minden további mérési érték leképezhető a minimum és maximum közötti tartományra, így:

// alkalmazza a kalibrálást az érzékelő leolvasására
sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

Íme a teljes program:

/*
  Calibration

  Egy technikát mutat be az érzékelő bemenetének kalibrálására. Az érzékelő leolvasásaival
  a vázlat végrehajtásának első öt másodpercében meghatározza az érzékelő kivezetéséhez
  csatolt várható értékek minimumát és maximumát.

  Az érzékelő minimális és maximális kezdeti értéke visszásnak tűnhet. Kezdetben beállít a minimumnak
  egy magas értéket, és minden alacsonyabbra figyel, és elmenti új minimumként. Hasonlóképpen beállít
  maximumnak egy alacsony értéket, és minden magasabb értékre figyel az új maximumként.

  Az áramkör:
  - analóg érzékelő (potenciométer megteszi), amely a 0 analóg bemenethez van csatlakoztatva
  - A 9-es digitális kivezetésről a földre csatlakoztatott LED 220 ohmos ellenálláson keresztül

  created 29 Oct 2008
  by David A Mellis
  modified 30 Aug 2011
  by Tom Igoe
  modified 07 Apr 2017
  by Zachary J. Fields

  Ez a kód nyilvános.

  https://docs.arduino.cc/built-in-examples/analog/Calibration
*/

// Ezek az állandók nem változnak:
const int sensorPin = A0;    // kivezetés, amelyhez az érzékelő csatlakozik
const int ledPin = 9;        // kivezetés, amelyhez a LED csatlakozik

// változók:
int sensorValue = 0;         // az éerékelő értéke
int sensorMin = 1023;        // minimum érzékelő érték
int sensorMax = 0;           // maximum érzékelő érték


void setup() {
  // kapcsolja be a LED-et, hogy jelezze a kalibrációs időszak kezdetét:
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH);

  // kalibrálás az első öt másodperc folyamán
  while (millis() < 5000) {
    sensorValue = analogRead(sensorPin);

    // rögzítse az érzékelő maximális értékét
    if (sensorValue > sensorMax) {
      sensorMax = sensorValue;
    }

    // rögzítse az érzékelő minimális értékét
    if (sensorValue < sensorMin) {
      sensorMin = sensorValue;
    }
  }

  // jelzi a kalibrációs időszak végét
  digitalWrite(13, LOW);
}

void loop() {
  // az érzékelő olvasása:
  sensorValue = analogRead(sensorPin);

  // ha az érzékelő értéke kívül esik a kalibrálás során látott tartományon
  sensorValue = constrain(sensorValue, sensorMin, sensorMax);

  // alkalmazza a kalibrálást az érzékelő leolvasására
  sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);

  // halványítsa el a LED-et a kalibrált értékkel:
  analogWrite(ledPin, sensorValue);
}

Tudj meg többet

További alapvető oktatóanyagokat a beépített példák részben talál.

Felfedezheti a nyelvi referenciát is, az Arduino programozási nyelv részletes gyűjteményét.