Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| 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) | ||
| + | </ | ||