Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
products:laboratory_iot_c:exp41 [2024/11/24 12:36] – [Программный код эксперимента] labuser30 | products: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(& | ||
- | LCDI2C_Generic lcd(DEFAULT_I2C_ADDR, | ||
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(& | ||
+ | LCDI2C_Generic lcd(DEFAULT_I2C_ADDR, | ||
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(" | lcd.print(" | ||
- | lcd.println(temp_outodor, | + | lcd.println(temp_outodor, |
lcd.print(" | lcd.print(" | ||
- | lcd.print(temp_inroom, | + | lcd.print(temp_inroom, |
delay(1000); | delay(1000); | ||
} | } | ||
Строка 57: | Строка 57: | ||
#include < | #include < | ||
#include < | #include < | ||
+ | </ | ||
+ | |||
+ | Задаем псевдонимы для пина АЦП, пина шины 1-Wire и адреса дисплея. | ||
+ | <code arduino[enable_line_numbers=" | ||
+ | #define ACD_PIN A0 | ||
+ | #define BUS_PIN 12 | ||
+ | #define DEFAULT_I2C_ADDR 0x3F // Или 0x27 в зависимости от твоей платы IoT5; | ||
</ | </ | ||
Строка 67: | Строка 74: | ||
</ | </ | ||
- | Создаем объекты | + | Создаем объекты шины 1-Wire, датчика DS18B20 |
<code arduino[enable_line_numbers=" | <code arduino[enable_line_numbers=" | ||
- | adc = machine.ADC(0) | + | OneWire oneWire(BUS_PIN); |
- | ow = onewire.OneWire(Pin(12)) | + | DallasTemperature sensors(& |
- | ds = ds18x20.DS18X20(ow) | + | LCDI2C_Generic lcd(DEFAULT_I2C_ADDR, |
</ | </ | ||
- | Определяем адрес [[products: | + | В функции '' |
- | <code arduino[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
- | DEFAULT_I2C_ADDR = 0x3F | + | |
+ | lcd.init(); | ||
+ | lcd.setBacklight(0); | ||
</ | </ | ||
- | Создаем | + | В основном цикле программы мы получаем данные с АЦП, к которому подключен |
- | <code arduino[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
- | i2c = I2C(scl=Pin(5), | + | int value = analogRead(ACD_PIN); |
- | lcd = I2cLcd(i2c, DEFAULT_I2C_ADDR, | + | |
- | lcd.backlight_on() | + | |
</ | </ | ||
- | В основном цикле программы мы получаем данные с АЦП, к которому подключен делитель напряжения с нижнем плече с термистором: | + | Определяем сопротивление термистора, из которого вычисляем температуру ([[products: |
<code arduino[enable_line_numbers=" | <code arduino[enable_line_numbers=" | ||
- | | + | float R2 = (-R1 * value) / (value - 1023); |
+ | float temp_outodor | ||
</ | </ | ||
- | Определяем сопротивление | + | Считываем температуру |
- | <code arduino[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
- | R = (-R1 * value)/ | + | |
- | | + | float temp_inroom |
- | outodor_temp = round(temp, | + | |
</ | </ | ||
- | Считываем температуру из датчика DS18B20, округляем температуру до десятых (1 знак после десятичной точки) и сохраняем в переменной | + | '' |
- | <code arduino[enable_line_numbers=" | + | |
- | roms = ds.scan() | + | |
- | ds.convert_temp() | + | |
- | temp = ds.read_temp(roms[0]) | + | |
- | inroom_temp = round(temp, | + | |
- | </ | + | |
- | + | ||
- | !!!!!!!Выводим температуру в комнате и на улице в терминал. Перед выводом температур преобразовываем их из чисел в строки с помощью оператора '' | + | |
<code arduino[enable_line_numbers=" | <code arduino[enable_line_numbers=" | ||
print(" | print(" | ||
print(' | print(' | ||
- | </ | + | </ |
Очищаем дисплей (при этом курсор дисплея перемещается в верхний левый угол), выводим строку с информацией о температуре на улице. Функция '' | Очищаем дисплей (при этом курсор дисплея перемещается в верхний левый угол), выводим строку с информацией о температуре на улице. Функция '' | ||
Строка 116: | Строка 115: | ||
lcd.clear(); | lcd.clear(); | ||
lcd.print(" | lcd.print(" | ||
- | lcd.println(temp_outodor, | + | lcd.println(temp_outodor, |
</ | </ | ||
Строка 122: | Строка 121: | ||
<code arduino[enable_line_numbers=" | <code arduino[enable_line_numbers=" | ||
lcd.print(" | lcd.print(" | ||
- | lcd.print(temp_inroom, | + | lcd.print(temp_inroom, |
</ | </ | ||