цифровая электроника
вычислительная техника
встраиваемые системы

 

Простейший термометр на Arduino и DS18B20 своими руками

Автор: Mike(admin) от 9-04-2017, 19:05

Платы Arduino применяют во многих проектах, как простых радиолюбительских, так и серьезных профессиональных. Одним из довольно простых проектов на Arduino является устройство регистрации параметров окружающей среды. Зачастую таким параметром выступает температура, иногда к ней добавляется влажность.


Простейший термометр на Arduino и DS18B20 своими руками

Данный проект термометра на Arduino очень прост и рекомендуется для новичков с целью изучения экосистемы Arduino.


Помимо самой платы Arduino здесь используется датчик температуры DS18B20, два семисегментных семиразрядных индикатора для отображения температуры и сдвиговые регистры для управления индикаторами. Датчик DS18B20 имеет три вывода – питание, земля и информационный выход. Поэтому для его подключения понадобится только одна линия Arduino. Как и в случае с другими датчиками, имеется удобная библиотека, которая позволяет легко получать температуру в градусах Цельсия или Фаренгейта, эта библиотека носит название Dallas_Temperature. Перед подключением DS18B20 к Arduino необходимо установить резистор сопротивлением 4.7 КОм между линией питания и информационным выходом. Этот выход впоследствии соединяем с линией D7 платы Arduino. Чтобы использовать минимальное количество линий Arduino для управления семисегментными индикаторами, следует применить два сдвиговых регистра, тогда можно обойтись тремя выводами Arduino для отображения температуры. Схема подключения всего устройства показана ниже.


Простейший термометр на Arduino и DS18B20 своими руками

Далее приведен код (скетч) для Arduino.



#include OneWire.h
#include DallasTemperature.h

// назначение выводов
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
int tempPin = 7;

// настройка библиотек
OneWire oneWire(tempPin);
DallasTemperature tempSens(&oneWire);

// символы от 0 до 9 для отображения на индикаторах
byte numberSet[10] = {
B01111011, B01000001, B00110111, B01100111, // 0,1,2,3
B01001101, B01101110, B01111110, B01000011, // 4,5,6,7
B01111111, B01101111 // 8,9
};


void setup() {
// последовательный порт
Serial.begin(9600);
// инициализация датчика температуры
tempSens.begin();

// настройка выводов для сдвиговых регистров
pinMode(latchPin, OUTPUT);
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);

}

void loop() {
tempSens.requestTemperatures();

float t = tempSens.getTempCByIndex(0);
Serial.println(t);

int rT = (int)t;

int units = rT % 10;

rT = rT/10;
int tens = rT % 10;

displayNumb(units, tens);
delay(100);

}

void displayNumb(int a, int b) {

byte bitsA = numberSet[a];
byte bitsB = numberSet[b];

digitalWrite(latchPin, LOW);

shiftOut(dataPin, clockPin, bitsA);
shiftOut(dataPin, clockPin, bitsB);

digitalWrite(latchPin, HIGH);
}

void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
int i=0;
int pinState;

digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);

for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);

if ( myDataOut & (1< pinState= 1;
}
else {
pinState= 0;
}

digitalWrite(myDataPin, pinState);
digitalWrite(myClockPin, 1);
digitalWrite(myDataPin, 0);
}

digitalWrite(myClockPin, 0);
}



© digitrode.ru


Теги: Arduino, DS18B20, индикатор



Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий