Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
products:laboratory_iot:exp41 [2020/05/23 15:09] – [Программный код эксперимента] labuser29 | products:laboratory_iot:exp41 [2024/11/24 12:28] (текущий) – [Программный код эксперимента] labuser30 | ||
---|---|---|---|
Строка 27: | Строка 27: | ||
ds = ds18x20.DS18X20(ow) | ds = ds18x20.DS18X20(ow) | ||
- | DEFAULT_I2C_ADDR = 0x3F | + | DEFAULT_I2C_ADDR = 0x3F # Или 0x27 в зависимости от модели микросхемы на плате |
i2c = I2C(scl=Pin(5), | i2c = I2C(scl=Pin(5), | ||
Строка 39: | Строка 39: | ||
R = (-R1 * value)/ | R = (-R1 * value)/ | ||
temp = 1 / (math.log(R / Rtnom) / Bcoef + 1/(25+T0)) -T0 | temp = 1 / (math.log(R / Rtnom) / Bcoef + 1/(25+T0)) -T0 | ||
- | | + | |
roms = ds.scan() | roms = ds.scan() | ||
ds.convert_temp() | ds.convert_temp() | ||
temp = ds.read_temp(roms[0]) | temp = ds.read_temp(roms[0]) | ||
- | | + | |
print(" | print(" | ||
Строка 50: | Строка 50: | ||
| | ||
lcd.clear() | lcd.clear() | ||
- | lcd.putstr(" | + | lcd.putstr(" |
lcd.move_to(0, | lcd.move_to(0, | ||
- | lcd.putstr(" | + | lcd.putstr(" |
time.sleep(5) | time.sleep(5) | ||
</ | </ | ||
- | Код программы состоит из кода двух экспериментов, | + | Код программы состоит из кода двух экспериментов, |
Сначала подключаем необходимые библиотеки: | Сначала подключаем необходимые библиотеки: | ||
Строка 69: | Строка 69: | ||
</ | </ | ||
- | Определяем константы, | + | Определяем константы, |
<code python[enable_line_numbers=" | <code python[enable_line_numbers=" | ||
Bcoef = 3950 | Bcoef = 3950 | ||
Строка 84: | Строка 84: | ||
</ | </ | ||
- | Определяем адрес [[products: | + | Определяем адрес [[products: |
+ | <code python[enable_line_numbers=" | ||
+ | DEFAULT_I2C_ADDR = 0x3F | ||
+ | </ | ||
+ | |||
+ | Создаем объект шины I2C и настраиваем ее. Создаем объект LCD дисплея и настраиваем его. Включаем подсветку дисплея: | ||
+ | <code python[enable_line_numbers=" | ||
+ | i2c = I2C(scl=Pin(5), | ||
+ | lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, | ||
+ | lcd.backlight_on() | ||
+ | </ | ||
+ | |||
+ | В основном цикле программы мы получаем данные с АЦП, к которому подключен делитель напряжения с нижнем плече с термистором: | ||
+ | <code python[enable_line_numbers=" | ||
+ | value = adc.read() | ||
+ | </ | ||
+ | |||
+ | Определяем сопротивление термистора, | ||
+ | <code python[enable_line_numbers=" | ||
+ | R = (-R1 * value)/ | ||
+ | temp = 1 / (math.log(R / Rtnom) / Bcoef + 1/(25+T0)) -T0 | ||
+ | outodor_temp = round(temp, | ||
+ | </ | ||
+ | |||
+ | Считываем температуру из датчика DS18B20, округляем температуру до десятых (1 знак после десятичной точки) и сохраняем в переменной '' | ||
+ | <code python[enable_line_numbers=" | ||
+ | roms = ds.scan() | ||
+ | ds.convert_temp() | ||
+ | temp = ds.read_temp(roms[0]) | ||
+ | inroom_temp = round(temp, | ||
+ | </ | ||
+ | |||
+ | Выводим температуру в комнате и на улице в терминал. Перед выводом температур преобразовываем их из чисел в строки с помощью оператора '' | ||
+ | <code python[enable_line_numbers=" | ||
+ | print(" | ||
+ | print(' | ||
+ | </ | ||
+ | |||
+ | Очищаем дисплей (при этом курсор дисплея перемещается в верхний левый угол), выводим строку с информацией о температуре на улице. | ||
+ | <code python[enable_line_numbers=" | ||
+ | lcd.clear() | ||
+ | lcd.putstr(" | ||
+ | </ | ||
+ | |||
+ | Перемещаем курсор дисплея на нулевой (самый левый) символ второй строки и выводим информацию о температуре в комнате: | ||
+ | <code python[enable_line_numbers=" | ||
+ | lcd.move_to(0, | ||
+ | lcd.putstr(" | ||
+ | </ | ||
+ | |||
+ | Пауза на 5 секунд перед следующим измерением: | ||
+ | <code python[enable_line_numbers=" | ||
+ | time.sleep(5) | ||
+ | </ |