003 Arduino projekt 3

Sidorna 42 - 51.

Koppla enligt figur på sidan 44.

Komponenter

  • LED, 3 röda
  • resistor 3 x 220 ohm
  • TMP, temperatursensor

Mål

Lamporna är släckta vid start.

Om man håller i termistorn (temperaturgivare) så tänds dioderna. Ju längre du håller desto fler tänds.

20 grader celsius - alla släckta

22 grader celsius - en tänd

24 grader celsius - två tända

26 grader celsius - tre tända

Program

Koden skiljer sig något från den i boken. Funktionen är dock densamma.

Kod på GitHub

// analogt stift som terminstorn kopplas till
const int sensorPin = A0;

// gränstemperatur i grader celsius då alla dioder är släckta
// denna kan du behöva ändra om det är varmt i rummet
const float baselineTemp = 20.0;

// körs en gång vid uppstart
void setup()
{
  // öppna serieporten
  // 9600 bitar (ettor och nollor) per sekund
  Serial.begin(9600);

  // digitala stiften 2, 3, 4 ska vara output, 0 volt
  int pinNumber = 2;
  while (pinNumber < 5)
  {
    pinMode(pinNumber, OUTPUT);
    digitalWrite(pinNumber, LOW);
    pinNumber = pinNumber + 1;
  }
}

// upprepas om och om igen
void loop()
{
  int temperatureSensorValue = analogRead(sensorPin);

  // skriv ut mätvärde på datorn
  Serial.print("Temperatur sensor value: ");
  Serial.print(temperatureSensorValue);

  // omvandla mätvärde [0 - 1024) till spänning i volt
  float voltage = (temperatureSensorValue / 1024.0) * 5.0;

  Serial.print(", Volts: ");
  Serial.print(voltage);

  // omvandla till temperatur i grader celsius
  float temperature = (voltage - 0.5) * 100;

  Serial.print(", degrees C: ");
  Serial.print(temperature);

  // styr lampor
  if (temperature >= baselineTemp + 6)
  {
    // tänd tre dioder
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
  }
  else if (temperature >= baselineTemp + 4)
  {
    // tänd tre dioder
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
  }
  else if (temperature >= baselineTemp + 2)
  {
    // tänd tre dioder
    digitalWrite(2, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
  }
  if (temperature < baselineTemp)
  {
    // släck alla dioder
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
  }

  // pausa i 1 ms
  delay(1);
}

Testa

Se till att det fungerar som tänkt. När du håller i termistorn bör dioderna tändas en efter en, och släckas en efter en då du släpper.

Kanske behöver du ändra på baselineTemp.