Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot_c:exp41 [2024/11/24 12:36] – [Программный код эксперимента] labuser30products:laboratory_iot_c:exp41 [2024/12/01 14:08] (текущий) labuser30
Строка 17: Строка 17:
 #define BUS_PIN 12 #define BUS_PIN 12
 #define DEFAULT_I2C_ADDR 0x3F // Или 0x27 в зависимости от твоей платы IoT #define DEFAULT_I2C_ADDR 0x3F // Или 0x27 в зависимости от твоей платы IoT
- 
-OneWire oneWire(BUS_PIN); 
-DallasTemperature sensors(&oneWire); 
-LCDI2C_Generic lcd(DEFAULT_I2C_ADDR, 16, 2); 
  
 const int Bcoef = 3950; const int Bcoef = 3950;
Строка 26: Строка 22:
 const int Rtnom = 10000; const int Rtnom = 10000;
 const float T0 = 273.15; const float T0 = 273.15;
 +
 +OneWire oneWire(BUS_PIN);
 +DallasTemperature sensors(&oneWire);
 +LCDI2C_Generic lcd(DEFAULT_I2C_ADDR, 16, 2);
  
 void setup() { void setup() {
Строка 40: Строка 40:
   sensors.requestTemperatures();    sensors.requestTemperatures(); 
   float temp_inroom = sensors.getTempCByIndex(0);   float temp_inroom = sensors.getTempCByIndex(0);
-  +
   lcd.clear();   lcd.clear();
   lcd.print("Outodor: ");   lcd.print("Outodor: ");
-  lcd.println(temp_outodor, 2);+  lcd.println(temp_outodor, 1);
   lcd.print("In room: ");   lcd.print("In room: ");
-  lcd.print(temp_inroom, 2);  +  lcd.print(temp_inroom, 1);  
   delay(1000);    delay(1000); 
 } }
Строка 57: Строка 57:
 #include <DallasTemperature.h> #include <DallasTemperature.h>
 #include <LCDI2C_Multilingual.h> #include <LCDI2C_Multilingual.h>
 +</code>
 +
 +Задаем псевдонимы для пина АЦП, пина шины 1-Wire и адреса дисплея. 
 +<code arduino[enable_line_numbers="2", start_line_numbers_at="3"]>
 +#define ACD_PIN A0
 +#define BUS_PIN 12
 +#define DEFAULT_I2C_ADDR 0x3F // Или 0x27 в зависимости от твоей платы IoT5;
 </code> </code>
  
Строка 67: Строка 74:
 </code> </code>
  
-Создаем объекты АЦП, шины 1-Wire на выводе 12 и датчика DS18B20:+Создаем объекты шины 1-Wireдатчика DS18B20 и дисплея:
 <code arduino[enable_line_numbers="2", start_line_numbers_at="14"]> <code arduino[enable_line_numbers="2", start_line_numbers_at="14"]>
-adc = machine.ADC(0+OneWire oneWire(BUS_PIN); 
-ow = onewire.OneWire(Pin(12)+DallasTemperature sensors(&oneWire); 
-ds = ds18x20.DS18X20(ow)+LCDI2C_Generic lcd(DEFAULT_I2C_ADDR, 16, 2);
 </code> </code>
  
-Определяем адрес [[products:laboratory_iot:lcd1602|контроллера LCD дисплея]] на [[theory:i2c|шине I2C]]: +В функции ''setup()'' инициализируем объекты датчика и дисплея, включаем подсветку. 
-<code arduino[enable_line_numbers="2", start_line_numbers_at="18"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="19"]> 
-DEFAULT_I2C_ADDR = 0x3F+  sensors.begin(); 
 +  lcd.init();  
 +  lcd.setBacklight(0); 
 </code> </code>
  
-Создаем объект шины I2C и настраиваем ее. Создаем объект LCD дисплея и настраиваем его. Включаем подсветку дисплея+В основном цикле программы мы получаем данные с АЦП, к которому подключен делитель напряжения с нижнем плече с термистором
-<code arduino[enable_line_numbers="2", start_line_numbers_at="20"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="25"]> 
-i2c I2C(scl=Pin(5), sda=Pin(4), freq=400000) +  int value analogRead(ACD_PIN);
-lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, 2, 16) +
-lcd.backlight_on()+
 </code> </code>
  
-В основном цикле программы мы получаем данные с АЦПк которому подключен делитель напряжения с нижнем плече с термистором:+Определяем сопротивление термистораиз которого вычисляем температуру ([[products:laboratory_iot_c:exp32|подробно рассматривалось в эксперименте 32]])  и сохраняем в переменной ''temp_outodor'':
 <code arduino[enable_line_numbers="2", start_line_numbers_at="26"]> <code arduino[enable_line_numbers="2", start_line_numbers_at="26"]>
-    value = adc.read()+  float R2 = (-R1 * value) / (value - 1023); 
 +  float temp_outodor 1 / (log(R2 / Rtnom) / Bcoef + 1/(25 + T0)- T0;
 </code> </code>
  
-Определяем сопротивление термистора, из которого вычисляем температуру ([[products:laboratory_iot:exp32|подробно рассматривалось в эксперименте 32]]). Округляем температуру до десятых (1 знак после десятичной точки) и сохраняем в переменной ''outodor_temp'': +Считываем температуру из датчика DS18B20 и сохраняем в переменной ''temp_inroom'': 
-<code arduino[enable_line_numbers="2", start_line_numbers_at="28"]> +<code arduino[enable_line_numbers="2", start_line_numbers_at="29"]> 
-    R = (-R1 * value)/(value-1023+  sensors.requestTemperatures() 
-    temp 1 / (math.log(R / Rtnom) / Bcoef + 1/(25+T0)) -T0 +  float temp_inroom sensors.getTempCByIndex(0);
-    outodor_temp = round(temp,1)+
 </code> </code>
  
-Считываем температуру из датчика DS18B20, округляем температуру до десятых (1 знак после десятичной точки) и сохраняем в переменной ''inroom_temp'': +''!!!!!!!Выводим температуру в комнате и на улице в терминал. Перед выводом температур преобразовываем их из чисел в строки с помощью оператора ''str()'':
-<code arduino[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 arduino[enable_line_numbers="2", start_line_numbers_at="37"]> <code arduino[enable_line_numbers="2", start_line_numbers_at="37"]>
     print("Outodor: " + str(inroom_temp))     print("Outodor: " + str(inroom_temp))
     print('In room: ' + str(outodor_temp))     print('In room: ' + str(outodor_temp))
-</code>+</code>''
  
 Очищаем дисплей (при этом курсор дисплея перемещается в верхний левый угол), выводим строку с информацией о температуре на улице. Функция ''lcd.println()'' переводит курсор на следующую строку после вывода заданного текста. Очищаем дисплей (при этом курсор дисплея перемещается в верхний левый угол), выводим строку с информацией о температуре на улице. Функция ''lcd.println()'' переводит курсор на следующую строку после вывода заданного текста.
Строка 116: Строка 115:
   lcd.clear();   lcd.clear();
   lcd.print("Outodor: ");   lcd.print("Outodor: ");
-  lcd.println(temp_outodor, 2);+  lcd.println(temp_outodor, 1);
 </code> </code>
  
Строка 122: Строка 121:
 <code arduino[enable_line_numbers="2", start_line_numbers_at="35"]> <code arduino[enable_line_numbers="2", start_line_numbers_at="35"]>
   lcd.print("In room: ");   lcd.print("In room: ");
-  lcd.print(temp_inroom, 2);  +  lcd.print(temp_inroom, 1);  
 </code> </code>