Heat-o-Meter (измерение температуры).
Arduino можно использовать для измерения температуры.
Переключатели и кнопки — замечательно, но реальный мир вокруг не всегда можно описать двумя состояниями (вкл. и выкл.)
Немного теории:
Несмотря на то, что Arduino — это цифровое устройство, оно может получать информацию с аналоговых сенсоров для измерения температуры или освещенности. Для этих целей необходимо использовать встроенный в Arduino аналого-цифровой перобразователь (АЦП). Аналоговые входы A0-A5 выдают значение от 0 до 1023, что соответствует напряжению от 0 до 5-ти вольт.
Для измерения температуры мы использовали температурный сенсор (TMP 36).
Этот компонент изменяет напряжение на выходе в зависимости от температуры окружающей среды. Датчик имеет три контакта: один подсоединяется на «ground», второй — на «power», а третий, который выдает изменяющееся напряжение, подсоединяется к Arduino. В программе для этого проекта мы будем считывать значения, которые выдает сенсор, и использовать их для включения и выключения светодиодов для индикации температуры.
Теперь к практике. Как обычно, сначала рисуем «схему»:
В собранном виде на макетной плате, она выглядит так:
В среде разработки (IDE) Arduino есть терминал, который позволяет получать и просматривать информацию с микроконтроллера. С использованием этого терминала, можно отображать на экране компьютера информацию, считываемую с сенсоров, а потом придумать, как ее обработать и дописать программу.
Вот такая получилась программа, для считывания и вывода информации с сенсора:
int spin = A0; //датчик температуры void setup(){ Serial.begin (9600);//для вывода на экран компьютера } void loop(){ int sVal = analogRead(spin);//Считываем информацию с сенсора Serial.print(«Sensor Value: „);//выводим значение на экран компьютера Serial.print(sVal); //конвертируем значение в вольты float v=(sVal/1024.0)*5.0; Serial.print(“, Volts: „); Serial.print(v); Serial.print(“, degrees C: „); //переводим вольты в градусы float t=(v-0.5)*100; Serial.println(t); }
В этой программе использована команда Serial.begin(9600), с помощью неё открывается соединение между Arduino и компьютером. Функция analogRead() считывает значение с аналогового входа и возвращается значение от 0 до 1024, в зависимости от напряжения. Функция Serial.print() отправляет информацию с Arduino на компьютер, затем эта информация отображается в терминале.
Как расчитывается температура? Сначала необходимо понять сколько вольт получается на выходе термосенсора. Поскольку всего может быть 1024 значения (от 0 до 1023), а напряжение от 0В до 5В, используется формула [значение на аналоговом входе]* 5В/1024. Затем по документации на этот термосенсор переводим выдаваемое им напряжение в градусы по шкале Цельсия t=(v-0.5)*100.
Вот как выглядят результаты работы программы:
Теперь программируем работу светодиодов. Базовой температурой будем считать 23 градуса (такая температура была у нас в комнате). Если термосенсор нагревается на 2 градуса — загорается первый диод, еще на 2 (всего на 4) — второй диод, затем еще на 4 градуса (всего на 8) — третий диод.
Параллельно а работой над программой мы решили, что будет интереснее сделать светодиоды разноцветными:
Вот наша программа:
int spin = A0; //датчик температуры float basetemp= 23.0; //комнатная температура int led1 = 2;//красный int led2 = 3;//жёлтый int led3 = 4;//зелёный void setup(){ Serial.begin (9600);//для вывода на экран компьютера pinMode(led1,OUTPUT); pinMode(led2,OUTPUT); pinMode(led3,OUTPUT); digitalWrite(led1,LOW); digitalWrite(led2,LOW); digitalWrite(led3,LOW); } void loop(){ int sVal = analogRead(spin); Serial.print(«Sensor Value: „);//выводим информацию на экран компьютера Serial.print(sVal); //конвертируем значение в вольты float v=(sVal/1024.0)*5.0; Serial.print(“, Volts: „); Serial.print(v); Serial.print(“, degrees C: „); //переводим вольты в градусы float t=(v-0.5)*100; Serial.println(t); if(t<basetemp){//температура поднимается на 2 градуса — ничего не горит digitalWrite(led2,LOW); digitalWrite(led3,LOW); digitalWrite(led1,LOW); } else if( (t>=basetemp+2)&&(t<basetemp+4) ){//температура подниамется от 2 до 4 градусов горит только зеленый digitalWrite(led2,LOW); digitalWrite(led3,HIGH); digitalWrite(led1,LOW); } else if( (t>=basetemp+4)&&(t<basetemp+8) ){ digitalWrite(led2,HIGH); digitalWrite(led3,LOW); digitalWrite(led1,LOW); } else if (t>=basetemp+8){ digitalWrite(led2,LOW); digitalWrite(led3,LOW); digitalWrite(led1,HIGH); } }
Результаты работы программы: