Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp41 [2020/05/23 15:09] – [Программный код эксперимента] labuser29products: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), sda=Pin(4), freq=400000) i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000)
Строка 39: Строка 39:
     R = (-R1 * value)/(value-1023)     R = (-R1 * value)/(value-1023)
     temp = 1 / (math.log(R / Rtnom) / Bcoef + 1/(25+T0)) -T0     temp = 1 / (math.log(R / Rtnom) / Bcoef + 1/(25+T0)) -T0
-    inroom_temp = round(temp,1)+    outodor_temp = round(temp,1)
  
     roms = ds.scan()     roms = ds.scan()
     ds.convert_temp()     ds.convert_temp()
     temp = ds.read_temp(roms[0])     temp = ds.read_temp(roms[0])
-    outodor_temp = round(temp,1)+    inroom_temp = round(temp,1)
  
     print("Outodor: " + str(inroom_temp))     print("Outodor: " + str(inroom_temp))
Строка 50: Строка 50:
          
     lcd.clear()     lcd.clear()
-    lcd.putstr("Outodor: " + str(inroom_temp))+    lcd.putstr("Outodor: " + str(outodor_temp))
     lcd.move_to(0,1)     lcd.move_to(0,1)
-    lcd.putstr("In room: " + str(outodor_temp))+    lcd.putstr("In room: " + str(inroom_temp))
  
     time.sleep(5)     time.sleep(5)
 </file> </file>
  
-Код программы состоит из кода двух экспериментов, посвещенных [[products:laboratory_iot:exp33|термометру на термисторе]] и [[products:laboratory_iot:exp40|термометру на DS18B20]].+Код программы состоит из кода двух экспериментов, посвящённых [[products:laboratory_iot:exp33|термометру на термисторе]] и [[products:laboratory_iot:exp40|термометру на DS18B20]].
  
 Сначала подключаем необходимые библиотеки: Сначала подключаем необходимые библиотеки:
Строка 69: Строка 69:
 </code> </code>
  
-Определяем константы, необходимые для вычисления температуры с помощью терморезистора (подробно разбиралось в Проекте  3. "Термометр").+Определяем константы, необходимые для вычисления температуры с помощью терморезистора (подробно разбиралось в [[products:laboratory_iot:exp32|Проекте  3. "Термометр"]]).
 <code python[enable_line_numbers="2", start_line_numbers_at="9"]> <code python[enable_line_numbers="2", start_line_numbers_at="9"]>
 Bcoef = 3950 Bcoef = 3950
Строка 84: Строка 84:
 </code> </code>
  
-Определяем адрес [[products:laboratory_iot:lcd1602|контроллера LCD дисплея]] на [[theory:i2c|шине I2C]]+Определяем адрес [[products:laboratory_iot:lcd1602|контроллера LCD дисплея]] на [[theory:i2c|шине I2C]]
 +<code python[enable_line_numbers="2", start_line_numbers_at="18"]> 
 +DEFAULT_I2C_ADDR = 0x3F 
 +</code> 
 + 
 +Создаем объект шины I2C и настраиваем ее. Создаем объект LCD дисплея и настраиваем его. Включаем подсветку дисплея: 
 +<code python[enable_line_numbers="2", start_line_numbers_at="20"]> 
 +i2c = I2C(scl=Pin(5), sda=Pin(4), freq=400000) 
 +lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) 
 +lcd.backlight_on() 
 +</code> 
 + 
 +В основном цикле программы мы получаем данные с АЦП, к которому подключен делитель напряжения с нижнем плече с термистором: 
 +<code python[enable_line_numbers="2", start_line_numbers_at="26"]> 
 +    value = adc.read() 
 +</code> 
 + 
 +Определяем сопротивление термистора, из которого вычисляем температуру ([[products:laboratory_iot:exp32|подробно рассматривалось в эксперименте 32]]). Округляем температуру до десятых (1 знак после десятичной точки) и сохраняем в переменной ''outodor_temp'': 
 +<code python[enable_line_numbers="2", start_line_numbers_at="28"]> 
 +    R = (-R1 * value)/(value-1023) 
 +    temp = 1 / (math.log(R / Rtnom) / Bcoef + 1/(25+T0)) -T0 
 +    outodor_temp = round(temp,1) 
 +</code> 
 + 
 +Считываем температуру из датчика DS18B20, округляем температуру до десятых (1 знак после десятичной точки) и сохраняем в переменной ''inroom_temp'': 
 +<code python[enable_line_numbers="2", start_line_numbers_at="32"]> 
 +    roms = ds.scan() 
 +    ds.convert_temp() 
 +    temp = ds.read_temp(roms[0]) 
 +    inroom_temp = round(temp,1) 
 +</code> 
 + 
 +Выводим температуру в комнате и на улице в терминал. Перед выводом температур преобразовываем их из чисел в строки с помощью оператора ''str()'': 
 +<code python[enable_line_numbers="2", start_line_numbers_at="37"]> 
 +    print("Outodor: " + str(inroom_temp)) 
 +    print('In room: ' + str(outodor_temp)) 
 +</code> 
 + 
 +Очищаем дисплей (при этом курсор дисплея перемещается в верхний левый угол), выводим строку с информацией о температуре на улице. 
 +<code python[enable_line_numbers="2", start_line_numbers_at="40"]> 
 +    lcd.clear() 
 +    lcd.putstr("Outodor: " + str(outodor_temp)) 
 +</code> 
 + 
 +Перемещаем курсор дисплея на нулевой (самый левый) символ второй строки и выводим информацию о температуре в комнате: 
 +<code python[enable_line_numbers="2", start_line_numbers_at="42"]> 
 +    lcd.move_to(0,1) 
 +    lcd.putstr("In room: " + str(inroom_temp)) 
 +</code> 
 + 
 +Пауза на 5 секунд перед следующим измерением: 
 +<code python[enable_line_numbers="2", start_line_numbers_at="45"]> 
 +    time.sleep(5) 
 +</code>