Калибровка (Calibration)

Този пример демонстрира как се калибрира сензор. Данните отчетени от сензора в първите пет секунди след като проргамата е стартирана обуславят максималната и минимална допустими стойности.

За този пример е нужен аналогов сензор (например потенциометър или фоторезистор) свързан към аналогов входен пин 2 и светотиод към дигитален пин 9. Контролен светодиод е свързан към дигитален пин 13.

Схема

Код

/* Kalibrovka
* ------------
*
* kalibrova dannite ot senzor
*
* ot David A. Mellis (Oktomvri 2008)
*
* podobrena ot Tom Igoe (Juni 2009)
*
* bulgarski prevod ot Simeon Ianchev / Robotev.com (Septemvri 2009)
*/

int sensorPin = A0;    	// pin za senzora
int ledPin = 9;		// pin za svetodioda

int val = 0;		// promenliva za stojnostite ot senzora
int sensorMin = 1023, sensorMax = 0;  // promenlivi za otchitane na 
	//nai-golyamata i nai-malkata stojnosti v perioda za kalibrirane

void setup() {
  // signal za nachalo na kalibriraneto; deklarira kato izhod i vklyuchva pin 13 
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH);

  // kalibrovka v pyrvite 5 sekundi
  while (millis() < 5000) {
    val = analogRead(sensorPin);

    // zapazva nai-vosokata otchetena stojnost
    if (val > sensorMax) {
      sensorMax = val;
    }

    // zapazva nai-vosokata otchetena stojnost
    if (val < sensorMin) {
      sensorMin = val;
    }
  }

  // signal za krai na kalibriraneto - izklyuchva pin 13
  digitalWrite(13, LOW);
}

void loop() {
  val = analogRead(sensorPin);

  // kalibrova dannite ot senzora
  val = map(val, sensorMin, sensorMax, 0, 255);

  // ogranichava stojnostite mejdu 0 i 255 v sluchai che 
  // sa bili izvan tozi obhvat po vreme na kalibriraneto
  val = constrain(val, 0, 255);

  analogWrite(ledPin, val);
}

Share