• Объявления

    • admin

      Просьба всем принять участие!   24.11.2017

      На форуме разыгрывается спектроанализатор Arinst SSA-TG LC (цена 18500 руб). Просьба всем перейти по ссылке ниже и принять участие!
AndreyASUNO

Борьба С Влажностью

19 сообщений в этой теме

AndreyASUNO    0

Здрасте всем!

Имеется гараж с подвалом!

Есть желание избавиться от влаги из помещения как гаража так и подвала!

Расклад такой:

1. Arduino nano

2. LCD 16X2

3. I2C модуль для подключения LCD к 4, 5 ножкам Arduino

4. Вентиляторы - 3 шт. 220В. для вытяжек в квартирах.

5. Релейный модуль на 4 релюшки

Текст программки для зашивки в Аrduino

#include <DHT.h>

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#define I2C_SDA 4 // I2C модуль для подключения LCD

#define I2C_SLC 5 // I2C модуль для подключения LCD

#define DHTPIN_U 2 // DHT-11 с улицы

#define DHTPIN_G 3 // DHT-11 в гараже

#define DHTPIN_P 6 // DHT-11 в подвале

#define VEN_U 7 // нога управления релюшкой вентилятора В1

#define VEN_G 8 // нога управления релюшкой вентилятора В2

#define VEN_P 9 // нога управления релюшкой вентилятора В3

LiquidCrystal_I2C lcd(0x27,16,2);

#define DHTTYPE DHT11

DHT dht_U(DHTPIN_U, DHTTYPE); //Улица

DHT dht_G(DHTPIN_G, DHTTYPE); //Гараж

DHT dht_P(DHTPIN_P, DHTTYPE); //Подвал

void setup (void)

{

lcd.init();

lcd.backlight();

// Serial.begin(9600);

dht_U.begin();

dht_G.begin();

dht_P.begin();

pinMode (VEN_U,OUTPUT); digitalWrite(VEN_U, LOW);

pinMode (VEN_G,OUTPUT); digitalWrite(VEN_G, LOW);

pinMode (VEN_P,OUTPUT); digitalWrite(VEN_P, LOW);

}

void loop ()

{

float h_U = dht_U.readHumidity();

float t_U = dht_U.readTemperature();

if (isnan(t_U) || isnan(h_U))

{

Serial.println("Failed to read from DHT_U");

} else

{

// Serial.print("Hum:"); Serial.print(h_U); Serial.print(" %\t");

// Serial.print("Tem:"); Serial.print(t_U); Serial.println(" *C");

lcd.print("H_U="); lcd.print(h_U);

lcd.print("T_U="); lcd.print(t_U);

}

if (t_U < 0) digitalWrite(VEN_U, LOW);

if (h_U > 90) digitalWrite(VEN_U, LOW);

float h_G = dht_G.readHumidity();

float t_G = dht_G.readTemperature();

if (isnan(t_G) || isnan(h_G))

{

Serial.println("Failed to read from DHT_G");

} else

{

// Serial.print("Hum:"); Serial.print(h_G); Serial.print(" %\t");

// Serial.print("Tem:"); Serial.print(t_G); Serial.println(" *C");

lcd.print("H_G="); lcd.print(h_G);

lcd.print("T_G="); lcd.print(t_G);

}

if (h_G > h_U) digitalWrite(VEN_U, HIGH);

if (h_G > 90) digitalWrite(VEN_G, LOW);

if (t_G < 0) digitalWrite(VEN_G, LOW);

float h_P = dht_P.readHumidity();

float t_P = dht_P.readTemperature();

if (isnan(t_P) || isnan(h_P))

{

Serial.println("Failed to read from DHT_P");

} else

{

// Serial.print("Hum:"); Serial.print(h_P); Serial.print(" %\t");

// Serial.print("Tem:"); Serial.print(t_P); Serial.println(" *C");

lcd.print("H_P="); lcd.print(h_P);

lcd.print("T_P="); lcd.print(t_P);

}

if (h_P > h_G) digitalWrite(VEN_P, HIGH);

if (t_G < 0) digitalWrite(VEN_G, LOW);

}

Пока жду комплектацию по почте, может подскажете что еще можно учесть и добавить!

post-151627-0-17961300-1420374155_thumb.png

Изменено пользователем AndreyASUNO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
AndreyASUNO    0

Схема - приблизительно такая!

Алгоритм:

Поочередный опрос трех датчиков влажности размещенных на улиже в гараже и подвале!

И включение и выключение вентиляторов в зависимости от данных по плажности и температуры!

post-151627-0-24034500-1420377325_thumb.jpg

Изменено пользователем AndreyASUNO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Rede RED    681

как вариант попроще = ставь крупную свечку под вытяжку в подвал на час... два,три. а там сам увидишь.

http://www.drive2.ru/b/1240725/

и почитай коментарии...

Изменено пользователем Rede RED

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 638

Датчики влажности, дадут не всюинформацию, нужно еще учитывать градиент температуры.

А вообще, дам совет, идея реализуема, но геморна! Лучше сделать осушитель, и поставить один датчик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AndreyASUNO    0

Про градиент температур - не знаю куда примкнуть данные о температуре от датчиков, а с осушителем интересно! Что именно Вы имеете в виду за осушитель ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
_VN_    20

Если стены и пол подвала сделаны из простого бетона, то избавиться от влажности очень сложно. Никакая вентиляция не поможет.

Для закупоривания капилляров бетона нужно пропитать стены и пол раствором силикатного клея с последующей сушкой в течение нескольких часов тепловентилятором. Пропитывать и сушить нужно несколько раз, пока не перестанет впитываться раствор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
o_l_e_g    1 638

Что именно Вы имеете в виду за осушитель ?

Идея не моя, есть патентованное решение. Силикагель, пересыпается постоянно из одной полости в другую. Одна полость нагревается, и силикагель сушится, она сообщаться с атмосферой, таким образом уносится пар. Вторая полость, сообщается с осушаемым пространством. Датчик, стоит на выходе осушенного воздуха, регулируя интенсивность перемешивания и нагрева.

Очень эффективно! Установка в 9 кВт, держит 60% влажность в неотапливаемом помещении в 18000 куб метров, в любое время года.

Для гаража, это будет ватт 40, и то работать будет по мере надобности.

А с градиентом, если в гараже холодно, а на улице потеплело, то по притоку пойдет насыщение, вплоть до росы. Хоть, и сухой снаружи воздух.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гор    123

На производстве сушат воздух в компрессорной. Блок осушки содержит два "бака":

-один поглощает влагу

-другой в это время нагревается до 140 (уточните в НЕТ) градусов с продувкой воздухом (140 имеет воздух). Автоматика такова - после прогрева силикагеля до 140 нагрев выключается, он считается высушенным. Если воздухом не продувать - это будет неправильно.

-------------------------------

Если силикагель перегреть - будет квака!

Также при вентиляции важно учитывать температуру:

наружную

и внутреннюю

Делать вывод о целесообразности вентиляции *потери тепла!) или же перегрев погреба летом.

По простому:

-при морозе вЫключать вентиляторы,

-летом днём не вентилировать.

Изменено пользователем Гор

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AndreyASUNO    0

Ну а если под вытяжную трубу в подвале поставить не свечу а керамическую трубку обмотанную нихромом и управление завести на контроллер! Мне кажется это будет более безопасно чем горящая свеча среди стелажей и ящиков!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гор    123

Всё нужно КОНТРОЛЛировать, поэтому кроме влажности обязательно учитывать наружную температуру и эвристически "предвидеть" последствия вентилирования (либо невентилирования) при данных условиях, и делать выбор о необходимости и режиме вентилирования, осушения, подогрева... либо закупоривания труб.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
APB    122

Перед тем как вентилировать подвал нужно сделать гидро и тепло изоляцию стен и пола.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AndreyASUNO    0

По мере работ по разработки ПО и и самого железа столкнулся с тем что DHT-11 вовольно сильно врут относительно друг друга! Три датчика находять на полутора сантиметровом расстоянии друг от друга дают показания по температуре : 1ый- 32, 2ой- 24, 3тий- 23 градуса! Подскажите кто игрался с DHT-22, они по точности также врут!

Для калибровки датчиков ввел в схему Dallas 18B20! 747605.jpgПолучилась вот такая железка! (Назовем ее блочёк!) Появились три окошка с показаниями датчиков и статистики за последний час работы с дискретой вывода данных в 4 минуты! Добавил расчет точки росы для гаража и подвала, при котором блокируется работа вентиляторов!

747606.jpg, 747608.jpg, 747609.jpg, появился режим принудительной продувки! 747610.jpgи менюшка сводных данных с показанием температур точек росы!747611.jpgКому интересно могу выложить полную рабочую схему и текст прошивки!

Изменено пользователем AndreyASUNO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AndreyASUNO    0

#include <Bounce.h>

#include <math.h>

#include <Wire.h>

#include <DHT.h>

#include <LiquidCrystal_I2C.h>

#include <OneWire.h>

#define DHTPIN_U 2 // DHT-11 с улицы

#define DHTPIN_G 3 // DHT-11 в гараже

#define DHTPIN_P 4 // DHT-11 в подвале

#define DL_18B20 5 // Dallas 18B20

#define VEN_U 6 // Включение - выключение вентилятора с улицы в гараж

#define VEN_G 7 // Включение - выключение вентилятора из гаража в подвал

#define VEN_P 8 // Включение - выключение вентилятора из подвала на улицу

#define OBOGREV 9 // Включение - выключение оборгева

#define BUT_LEFT 11 // Кнопка левая

#define BUT_RIGH 10 // Кнопка правая

#define BUZER 12 // Пищалка

#define DHTTYPE DHT11 // тип датчика влажности для библиотеки <DHT.h>

DHT dht_U(DHTPIN_U, DHTTYPE); //сделали датчик для улицы

DHT dht_G(DHTPIN_G, DHTTYPE); //сделали датчик для гаража

DHT dht_P(DHTPIN_P, DHTTYPE); //сделали датчик для подвала

OneWire ds(DL_18B20); // //сделали датчик для гаража калибровочный

Bounce bouncer_BUT_LEFT = Bounce( BUT_LEFT,1); //Создали левую кнопку

Bounce bouncer_BUT_RIGH = Bounce( BUT_RIGH,1); //Создали правую кнопку

LiquidCrystal_I2C lcd(0x27,16,2); //

int h_U, t_U , h_G ; // переменные для влажности

int t_G, h_P , t_P ; // переменные для температуры

int matrix_h_U[17]; int matrix_t_U[17]; //массивы для улицы

int matrix_h_G[17]; int matrix_t_G[17]; //массивы для гаража

int matrix_h_P[17]; int matrix_t_P[17]; //массивы для подваля

int secundy=-1; int i=1; int tackt=0;

const float a=17.27;

const float b=237.7;

double c_G, c_P, c_U, vl_P, vl_G;

int Tochka_Rosy_G, Tochka_Rosy_P,Tochka_Rosy_U;

//---------------------------------------------------------------------------------------------------------

void produvka(void)//принудительная продувка 600 сек по нажатию правой кнопки!

{

lcd.clear();

int door=600;

while (door!=0)

{

digitalWrite(VEN_U, LOW); digitalWrite(VEN_G, LOW); digitalWrite(VEN_P, LOW); digitalWrite(OBOGREV, LOW);

lcd.setCursor(0,0); lcd.print("PRODUVKA 600 Sec");

lcd.setCursor(0,1); lcd.print("OcTalocb "); lcd.print(door); lcd.print(" Sec");

delay(1000);

door--;

}

digitalWrite(VEN_U, HIGH); digitalWrite(VEN_G, HIGH); digitalWrite(VEN_P, HIGH); digitalWrite(OBOGREV, HIGH);

lcd.clear();

}

//-----------------------------------------------------------------------------------------------------------------------------

void matrix_init (void) //заполяем массивы нулями

{int i_matrix=0;

for (i_matrix=0; i_matrix<60; i_matrix++)

{

matrix_h_U[i_matrix]=0; matrix_t_U[i_matrix]=0;

matrix_h_G[i_matrix]=0; matrix_t_G[i_matrix]=0;

matrix_h_P[i_matrix]=0; matrix_t_P[i_matrix]=0;

}

}

//----------------------------------------------------------------------------------------------------------------------------

void datchiki(void)//принятие решения на вкл или выкл релюшек

{

t_U = dht_U.readTemperature()-14;

h_U = dht_U.readHumidity()-2;

t_G = dht_G.readTemperature()-1;

h_G = dht_G.readHumidity();

t_P = dht_P.readTemperature();

h_P = dht_P.readHumidity();

vl_G = double(h_G)/100;

vl_P = double(h_P)/100;

c_G = ((a*t_G)/(b+t_G))+log(vl_G);

Tochka_Rosy_G=int((b*c_G)/(a-c_G));

c_P = ((a*t_P)/(b+t_P))+log(vl_P);

Tochka_Rosy_P=int((b*c_P)/(a-c_P));

int Tochka_Rosy_G_min=Tochka_Rosy_G-2;

int Tochka_Rosy_G_max=Tochka_Rosy_G+2;

int Tochka_Rosy_P_min=Tochka_Rosy_P-2;

int Tochka_Rosy_P_max=Tochka_Rosy_P+2;

if (t_U<0) {digitalWrite(VEN_U, HIGH);}

else

{

if (t_G>Tochka_Rosy_G_min&&t_G<Tochka_Rosy_G_max) digitalWrite(VEN_U, HIGH); else

{

if (h_U>50) digitalWrite(VEN_U, HIGH); else digitalWrite(VEN_U, LOW);

};

};

if (t_G<0) {digitalWrite(VEN_G, HIGH);}

else

{

if (t_P>Tochka_Rosy_P_min&&t_P<Tochka_Rosy_P_max) digitalWrite(VEN_P, HIGH); else

{

if (h_G>50) digitalWrite(VEN_G, HIGH); else digitalWrite(VEN_G, LOW);

};

};

if (t_P<0) digitalWrite(VEN_P, HIGH);

else

{

if (h_P>50) digitalWrite(VEN_P, LOW); else digitalWrite(VEN_P, HIGH);

};

if (t_P<0) digitalWrite(OBOGREV, LOW);

else

{

if (h_P>60) digitalWrite(OBOGREV, LOW); else digitalWrite(OBOGREV, HIGH);

};

}

//--------------------------------------------------------------------------------------------------------------------------------

void svode (void) // сводная таблица с температурами и влажностями со всех трех DHT

{

//-------------------------

t_U = dht_U.readTemperature()-14;

h_U = dht_U.readHumidity()-2;

lcd.setCursor(0,0); lcd.print("T:="); lcd.print(t_U); lcd.print(" ");

lcd.setCursor(0,1); lcd.print("H:="); lcd.print(h_U); lcd.print(" ");

//-------------------------

t_G = dht_G.readTemperature()-1;

h_G = dht_G.readHumidity();

lcd.setCursor(5,0); lcd.print("="); lcd.print(t_G); lcd.print(" ");

lcd.setCursor(5,1); lcd.print("="); lcd.print(h_G); lcd.print(" ");

//--------------------------

t_P = dht_P.readTemperature();

h_P = dht_P.readHumidity();

lcd.setCursor(8,0); lcd.print("="); lcd.print(t_P); lcd.print("Tg=");lcd.print(Tochka_Rosy_G); lcd.print(" ");

lcd.setCursor(8,1); lcd.print("="); lcd.print(h_P); lcd.print("Tp=");lcd.print(Tochka_Rosy_P); lcd.print(" ");

//--------------------------

delay(5000); lcd.clear(); //рисуется 5 сек и перетирает экран

}

//-------------------------------------------------------------------------------------------------------------------------------------------------

void menu_U (void)//получение влажности и температуры с улици

{

t_U = dht_U.readTemperature()-14;

h_U = dht_U.readHumidity()-2;

lcd.setCursor(0,0); lcd.print("OUTDOR:H="); lcd.print(h_U); lcd.print(" T=");lcd.print(t_U);

int a=0;

for (-1; a<16; a++)

{ lcd.setCursor(a,1);

int s =(matrix_h_U[a]/10);

switch (s)

{case 0: lcd.print("\0") ;break;

case 1: lcd.print("\1") ;break;

case 2: lcd.print("\1") ;break;

case 3: lcd.print("\2") ;break;

case 4: lcd.print("\3") ;break;

case 5: lcd.print("\4") ;break;

case 6: lcd.print("\5") ;break;

case 7: lcd.print("\6") ;break;

case 8: lcd.print("\7") ;break; }

}

}

//-----------------------------------------------------------------------------------------------------------------------------------------------

void menu_G(void)//получение влажности и температуры из гаража

{

t_G = dht_G.readTemperature()-1;

h_G = dht_G.readHumidity();

lcd.setCursor(0,0); lcd.print("GARAGE:H="); lcd.print(h_G); lcd.print(" T=");lcd.print(t_G);

int a=0;

for (-1; a<16; a++)

{ lcd.setCursor(a,1);

int s =int(matrix_h_G[a]/10);

switch (s)

{case 0: lcd.print("\0") ;break;

case 1: lcd.print("\1") ;break;

case 2: lcd.print("\1") ;break;

case 3: lcd.print("\2") ;break;

case 4: lcd.print("\3") ;break;

case 5: lcd.print("\4") ;break;

case 6: lcd.print("\5") ;break;

case 7: lcd.print("\6") ;break;

case 8: lcd.print("\7") ;break; }

}

}

//-------------------------------------------------------------------------------------------------------------------------------------------------

void menu_P (void) //получение влажности и температуры из подвала

{

t_P = dht_P.readTemperature();

h_P = dht_P.readHumidity();

lcd.setCursor(0,0); lcd.print("BASEME:H="); lcd.print(h_P); lcd.print(" T=");lcd.print(t_P);

int a=0;

for (-1; a<16; a++)

{

lcd.setCursor(a,1);

int s =int(matrix_h_P[a]/10);

switch (s){

case 0: lcd.print("\0") ;break;

case 1: lcd.print("\1") ;break;

case 2: lcd.print("\1") ;break;

case 3: lcd.print("\2") ;break;

case 4: lcd.print("\3") ;break;

case 5: lcd.print("\4") ;break;

case 6: lcd.print("\5") ;break;

case 7: lcd.print("\6") ;break;

case 8: lcd.print("\7") ;break; }

}

}

//----------------------------------------------------------------------------------------------------------------------------------------------------

void opros_datchikov (void)

{

//------------------------------------

lcd.setCursor(0,0); lcd.print("T:");

t_U = dht_U.readTemperature()-14;

h_U = dht_U.readHumidity()-2;

if (isnan(t_U) || isnan(h_U)) { lcd.print("Fail"); } else { lcd.print(t_U); lcd.setCursor(0,1); lcd.print("H:"); lcd.print(h_U); } ;

//-----------------------------------

lcd.setCursor(4,0); lcd.print("\4");

t_G = dht_G.readTemperature()-1;

h_G = dht_G.readHumidity();

if (isnan(t_G) || isnan(h_G)) { lcd.print("Fail"); } else { lcd.print(t_G); lcd.setCursor(4,1); lcd.print("\4"); lcd.print(h_G); } ;

//-----------------------------------

lcd.setCursor(7,0); lcd.print("\4");

t_P = dht_P.readTemperature();

h_P = dht_P.readHumidity();

if (isnan(t_P) || isnan(h_P)) { lcd.print("Fail"); } else { lcd.print(t_P); lcd.setCursor(7,1); lcd.print("\4"); lcd.print(h_P); } ;

//------------------------------------

byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius;

if ( !ds.search(addr)) { ds.reset_search(); delay(250); return; }

switch (addr[0]) { case 0x10: type_s = 1; break; case 0x28: type_s = 0; break; case 0x22: type_s = 0; break; return;

} ds.reset(); ds.select(addr); ds.write(0x44, 1); delay(1000);

present = ds.reset(); ds.select(addr); ds.write(0xBE);

for ( i = 0; i < 9; i++) { data = ds.read(); } int16_t raw = (data[1] << 8) | data[0];

if (type_s) { raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60);

if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; }

celsius = (float)raw / 16.0;

lcd.setCursor(10,0); lcd.print("\4"); lcd.print(celsius);

lcd.setCursor(10,1); lcd.print("\4"); lcd.print("\6");lcd.print("\4");lcd.print("\2");lcd.print("\5");lcd.print("\7");

//---------------------------------------

}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

void setup (void)

{

dht_U.begin(); delay(1000);

dht_G.begin(); delay(1000);

dht_P.begin(); delay(1000);

lcd.init();

lcd.backlight(); delay(200);

lcd.noBacklight();

pinMode(VEN_U, OUTPUT); digitalWrite(VEN_U, HIGH);

pinMode(VEN_G, OUTPUT); digitalWrite(VEN_G, HIGH);

pinMode(VEN_P, OUTPUT); digitalWrite(VEN_P, HIGH);

pinMode(OBOGREV, OUTPUT); digitalWrite(OBOGREV, HIGH);

pinMode(BUT_LEFT,INPUT);

pinMode(BUT_RIGH,INPUT);

matrix_init();//заполняем нулями

byte linia_0 [8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B11111,}; lcd.createChar(0, linia_0);

byte linia_15[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B11111, B11111,}; lcd.createChar(1, linia_15);

byte linia_30[8] = { B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111,}; lcd.createChar(2, linia_30);

byte linia_45[8] = { B00000, B00000, B00000, B00000, B11111, B11111, B11111, B11111,}; lcd.createChar(3, linia_45);

byte linia_60[8] = { B00000, B00000, B00000, B11111, B11111, B11111, B11111, B11111,}; lcd.createChar(4, linia_60);

byte linia_75[8] = { B00000, B00000, B11111, B11111, B11111, B11111, B11111, B11111,}; lcd.createChar(5, linia_75);

byte linia_90[8] = { B00000, B11111, B11111, B11111, B11111, B11111, B11111, B11111,}; lcd.createChar(6, linia_90);

byte linia_100[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111,}; lcd.createChar(7, linia_100);

opros_datchikov();

delay(4000);

lcd.clear();

}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

void loop (void)//вечный цикл в петле

{

datchiki(); //переключаем релюшки в зависимости от показаний датчиков

bouncer_BUT_LEFT.update ( ); int value_BUT_LEFT = bouncer_BUT_LEFT.read();

bouncer_BUT_RIGH.update ( ); int value_BUT_RIGH = bouncer_BUT_RIGH.read();

if ( value_BUT_LEFT == HIGH) { i++; if (i>4) i=1;}

if ( value_BUT_RIGH == HIGH) { produvka();} else {delay(1);}

switch (i)

{

case 1: menu_U() ; break;

case 2: menu_G() ; break;

case 3: menu_P() ; break;

case 4: {svode() ; delay(5000); i=1;} break;

}

tackt++;

//запись в массивы температуры и влажности

if (tackt>=115) // время между циклами записи в массивы порядка 4 минут

{tackt=0; secundy++; if (secundy>15)secundy=0;

matrix_h_U[secundy]=h_U; matrix_t_U[secundy]=t_U;

matrix_h_G[secundy]=h_G; matrix_t_G[secundy]=t_G;

matrix_h_P[secundy]=h_P; matrix_t_P[secundy]=t_P;

tone(12, 2000, 150); } // Попискивание при записи очередных элементов массива */

}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AndreyASUNO    0

В гараже беда! Прикрепил к стене, подключил датчики! Влажность в гараже 92 при температуре +2, в подвале 95 при температуре +4С! Вроде все завертелось закрутилось! Спустя минут 10 от первого включения на LCD начали пропадать столбцы отрисовки! Через 2 часа работы потухло процентов 70, невозможно разобрать ни температуру ни влажность! Беда!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 24.02.2015 в 16:24, AndreyASUNO сказал:

#include <Bounce.h>

#include <math.h>

#include <Wire.h>

#include <DHT.h>

#include <LiquidCrystal_I2C.h>

#include <OneWire.h>

#define DHTPIN_U 2 // DHT-11 с улицы

#define DHTPIN_G 3 // DHT-11 в гараже

#define DHTPIN_P 4 // DHT-11 в подвале

#define DL_18B20 5 // Dallas 18B20

#define VEN_U 6 // Включение - выключение вентилятора с улицы в гараж

#define VEN_G 7 // Включение - выключение вентилятора из гаража в подвал

#define VEN_P 8 // Включение - выключение вентилятора из подвала на улицу

#define OBOGREV 9 // Включение - выключение оборгева

#define BUT_LEFT 11 // Кнопка левая

#define BUT_RIGH 10 // Кнопка правая

#define BUZER 12 // Пищалка

#define DHTTYPE DHT11 // тип датчика влажности для библиотеки <DHT.h>

DHT dht_U(DHTPIN_U, DHTTYPE); //сделали датчик для улицы

DHT dht_G(DHTPIN_G, DHTTYPE); //сделали датчик для гаража

DHT dht_P(DHTPIN_P, DHTTYPE); //сделали датчик для подвала

OneWire ds(DL_18B20); // //сделали датчик для гаража калибровочный

Bounce bouncer_BUT_LEFT = Bounce( BUT_LEFT,1); //Создали левую кнопку

Bounce bouncer_BUT_RIGH = Bounce( BUT_RIGH,1); //Создали правую кнопку

LiquidCrystal_I2C lcd(0x27,16,2); //

int h_U, t_U , h_G ; // переменные для влажности

int t_G, h_P , t_P ; // переменные для температуры

int matrix_h_U[17]; int matrix_t_U[17]; //массивы для улицы

int matrix_h_G[17]; int matrix_t_G[17]; //массивы для гаража

int matrix_h_P[17]; int matrix_t_P[17]; //массивы для подваля

int secundy=-1; int i=1; int tackt=0;

const float a=17.27;

const float b=237.7;

double c_G, c_P, c_U, vl_P, vl_G;

int Tochka_Rosy_G, Tochka_Rosy_P,Tochka_Rosy_U;

//---------------------------------------------------------------------------------------------------------

void produvka(void)//принудительная продувка 600 сек по нажатию правой кнопки!

{

lcd.clear();

int door=600;

while (door!=0)

{

digitalWrite(VEN_U, LOW); digitalWrite(VEN_G, LOW); digitalWrite(VEN_P, LOW); digitalWrite(OBOGREV, LOW);

lcd.setCursor(0,0); lcd.print("PRODUVKA 600 Sec");

lcd.setCursor(0,1); lcd.print("OcTalocb "); lcd.print(door); lcd.print(" Sec");

delay(1000);

door--;

}

digitalWrite(VEN_U, HIGH); digitalWrite(VEN_G, HIGH); digitalWrite(VEN_P, HIGH); digitalWrite(OBOGREV, HIGH);

lcd.clear();

}

//-----------------------------------------------------------------------------------------------------------------------------

void matrix_init (void) //заполяем массивы нулями

{int i_matrix=0;

for (i_matrix=0; i_matrix<60; i_matrix++)

{

matrix_h_U[i_matrix]=0; matrix_t_U[i_matrix]=0;

matrix_h_G[i_matrix]=0; matrix_t_G[i_matrix]=0;

matrix_h_P[i_matrix]=0; matrix_t_P[i_matrix]=0;

}

}

//----------------------------------------------------------------------------------------------------------------------------

void datchiki(void)//принятие решения на вкл или выкл релюшек

{

t_U = dht_U.readTemperature()-14;

h_U = dht_U.readHumidity()-2;

t_G = dht_G.readTemperature()-1;

h_G = dht_G.readHumidity();

t_P = dht_P.readTemperature();

h_P = dht_P.readHumidity();

vl_G = double(h_G)/100;

vl_P = double(h_P)/100;

c_G = ((a*t_G)/(b+t_G))+log(vl_G);

Tochka_Rosy_G=int((b*c_G)/(a-c_G));

c_P = ((a*t_P)/(b+t_P))+log(vl_P);

Tochka_Rosy_P=int((b*c_P)/(a-c_P));

int Tochka_Rosy_G_min=Tochka_Rosy_G-2;

int Tochka_Rosy_G_max=Tochka_Rosy_G+2;

int Tochka_Rosy_P_min=Tochka_Rosy_P-2;

int Tochka_Rosy_P_max=Tochka_Rosy_P+2;

if (t_U<0) {digitalWrite(VEN_U, HIGH);}

else

{

if (t_G>Tochka_Rosy_G_min&&t_G<Tochka_Rosy_G_max) digitalWrite(VEN_U, HIGH); else

{

if (h_U>50) digitalWrite(VEN_U, HIGH); else digitalWrite(VEN_U, LOW);

};

};

if (t_G<0) {digitalWrite(VEN_G, HIGH);}

else

{

if (t_P>Tochka_Rosy_P_min&&t_P<Tochka_Rosy_P_max) digitalWrite(VEN_P, HIGH); else

{

if (h_G>50) digitalWrite(VEN_G, HIGH); else digitalWrite(VEN_G, LOW);

};

};

if (t_P<0) digitalWrite(VEN_P, HIGH);

else

{

if (h_P>50) digitalWrite(VEN_P, LOW); else digitalWrite(VEN_P, HIGH);

};

if (t_P<0) digitalWrite(OBOGREV, LOW);

else

{

if (h_P>60) digitalWrite(OBOGREV, LOW); else digitalWrite(OBOGREV, HIGH);

};

}

//--------------------------------------------------------------------------------------------------------------------------------

void svode (void) // сводная таблица с температурами и влажностями со всех трех DHT

{

//-------------------------

t_U = dht_U.readTemperature()-14;

h_U = dht_U.readHumidity()-2;

lcd.setCursor(0,0); lcd.print("T:="); lcd.print(t_U); lcd.print(" ");

lcd.setCursor(0,1); lcd.print("H:="); lcd.print(h_U); lcd.print(" ");

//-------------------------

t_G = dht_G.readTemperature()-1;

h_G = dht_G.readHumidity();

lcd.setCursor(5,0); lcd.print("="); lcd.print(t_G); lcd.print(" ");

lcd.setCursor(5,1); lcd.print("="); lcd.print(h_G); lcd.print(" ");

//--------------------------

t_P = dht_P.readTemperature();

h_P = dht_P.readHumidity();

lcd.setCursor(8,0); lcd.print("="); lcd.print(t_P); lcd.print("Tg=");lcd.print(Tochka_Rosy_G); lcd.print(" ");

lcd.setCursor(8,1); lcd.print("="); lcd.print(h_P); lcd.print("Tp=");lcd.print(Tochka_Rosy_P); lcd.print(" ");

//--------------------------

delay(5000); lcd.clear(); //рисуется 5 сек и перетирает экран

}

//-------------------------------------------------------------------------------------------------------------------------------------------------

void menu_U (void)//получение влажности и температуры с улици

{

t_U = dht_U.readTemperature()-14;

h_U = dht_U.readHumidity()-2;

lcd.setCursor(0,0); lcd.print("OUTDOR:H="); lcd.print(h_U); lcd.print(" T=");lcd.print(t_U);

int a=0;

for (-1; a<16; a++)

{ lcd.setCursor(a,1);

int s =(matrix_h_U[a]/10);

switch (s)

{case 0: lcd.print("\0") ;break;

case 1: lcd.print("\1") ;break;

case 2: lcd.print("\1") ;break;

case 3: lcd.print("\2") ;break;

case 4: lcd.print("\3") ;break;

case 5: lcd.print("\4") ;break;

case 6: lcd.print("\5") ;break;

case 7: lcd.print("\6") ;break;

case 8: lcd.print("\7") ;break; }

}

}

//-----------------------------------------------------------------------------------------------------------------------------------------------

void menu_G(void)//получение влажности и температуры из гаража

{

t_G = dht_G.readTemperature()-1;

h_G = dht_G.readHumidity();

lcd.setCursor(0,0); lcd.print("GARAGE:H="); lcd.print(h_G); lcd.print(" T=");lcd.print(t_G);

int a=0;

for (-1; a<16; a++)

{ lcd.setCursor(a,1);

int s =int(matrix_h_G[a]/10);

switch (s)

{case 0: lcd.print("\0") ;break;

case 1: lcd.print("\1") ;break;

case 2: lcd.print("\1") ;break;

case 3: lcd.print("\2") ;break;

case 4: lcd.print("\3") ;break;

case 5: lcd.print("\4") ;break;

case 6: lcd.print("\5") ;break;

case 7: lcd.print("\6") ;break;

case 8: lcd.print("\7") ;break; }

}

}

//-------------------------------------------------------------------------------------------------------------------------------------------------

void menu_P (void) //получение влажности и температуры из подвала

{

t_P = dht_P.readTemperature();

h_P = dht_P.readHumidity();

lcd.setCursor(0,0); lcd.print("BASEME:H="); lcd.print(h_P); lcd.print(" T=");lcd.print(t_P);

int a=0;

for (-1; a<16; a++)

{

lcd.setCursor(a,1);

int s =int(matrix_h_P[a]/10);

switch (s){

case 0: lcd.print("\0") ;break;

case 1: lcd.print("\1") ;break;

case 2: lcd.print("\1") ;break;

case 3: lcd.print("\2") ;break;

case 4: lcd.print("\3") ;break;

case 5: lcd.print("\4") ;break;

case 6: lcd.print("\5") ;break;

case 7: lcd.print("\6") ;break;

case 8: lcd.print("\7") ;break; }

}

}

//----------------------------------------------------------------------------------------------------------------------------------------------------

void opros_datchikov (void)

{

//------------------------------------

lcd.setCursor(0,0); lcd.print("T:");

t_U = dht_U.readTemperature()-14;

h_U = dht_U.readHumidity()-2;

if (isnan(t_U) || isnan(h_U)) { lcd.print("Fail"); } else { lcd.print(t_U); lcd.setCursor(0,1); lcd.print("H:"); lcd.print(h_U); } ;

//-----------------------------------

lcd.setCursor(4,0); lcd.print("\4");

t_G = dht_G.readTemperature()-1;

h_G = dht_G.readHumidity();

if (isnan(t_G) || isnan(h_G)) { lcd.print("Fail"); } else { lcd.print(t_G); lcd.setCursor(4,1); lcd.print("\4"); lcd.print(h_G); } ;

//-----------------------------------

lcd.setCursor(7,0); lcd.print("\4");

t_P = dht_P.readTemperature();

h_P = dht_P.readHumidity();

if (isnan(t_P) || isnan(h_P)) { lcd.print("Fail"); } else { lcd.print(t_P); lcd.setCursor(7,1); lcd.print("\4"); lcd.print(h_P); } ;

//------------------------------------

byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius;

if ( !ds.search(addr)) { ds.reset_search(); delay(250); return; }

switch (addr[0]) { case 0x10: type_s = 1; break; case 0x28: type_s = 0; break; case 0x22: type_s = 0; break; return;

} ds.reset(); ds.select(addr); ds.write(0x44, 1); delay(1000);

present = ds.reset(); ds.select(addr); ds.write(0xBE);

for ( i = 0; i < 9; i++) { data = ds.read(); } int16_t raw = (data[1] << 8) | data[0];

if (type_s) { raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60);

if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; }

celsius = (float)raw / 16.0;

lcd.setCursor(10,0); lcd.print("\4"); lcd.print(celsius);

lcd.setCursor(10,1); lcd.print("\4"); lcd.print("\6");lcd.print("\4");lcd.print("\2");lcd.print("\5");lcd.print("\7");

//---------------------------------------

}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

void setup (void)

{

dht_U.begin(); delay(1000);

dht_G.begin(); delay(1000);

dht_P.begin(); delay(1000);

lcd.init();

lcd.backlight(); delay(200);

lcd.noBacklight();

pinMode(VEN_U, OUTPUT); digitalWrite(VEN_U, HIGH);

pinMode(VEN_G, OUTPUT); digitalWrite(VEN_G, HIGH);

pinMode(VEN_P, OUTPUT); digitalWrite(VEN_P, HIGH);

pinMode(OBOGREV, OUTPUT); digitalWrite(OBOGREV, HIGH);

pinMode(BUT_LEFT,INPUT);

pinMode(BUT_RIGH,INPUT);

matrix_init();//заполняем нулями

byte linia_0 [8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, B11111,}; lcd.createChar(0, linia_0);

byte linia_15[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B11111, B11111,}; lcd.createChar(1, linia_15);

byte linia_30[8] = { B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111,}; lcd.createChar(2, linia_30);

byte linia_45[8] = { B00000, B00000, B00000, B00000, B11111, B11111, B11111, B11111,}; lcd.createChar(3, linia_45);

byte linia_60[8] = { B00000, B00000, B00000, B11111, B11111, B11111, B11111, B11111,}; lcd.createChar(4, linia_60);

byte linia_75[8] = { B00000, B00000, B11111, B11111, B11111, B11111, B11111, B11111,}; lcd.createChar(5, linia_75);

byte linia_90[8] = { B00000, B11111, B11111, B11111, B11111, B11111, B11111, B11111,}; lcd.createChar(6, linia_90);

byte linia_100[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111,}; lcd.createChar(7, linia_100);

opros_datchikov();

delay(4000);

lcd.clear();

}

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

void loop (void)//вечный цикл в петле

{

datchiki(); //переключаем релюшки в зависимости от показаний датчиков

bouncer_BUT_LEFT.update ( ); int value_BUT_LEFT = bouncer_BUT_LEFT.read();

bouncer_BUT_RIGH.update ( ); int value_BUT_RIGH = bouncer_BUT_RIGH.read();

if ( value_BUT_LEFT == HIGH) { i++; if (i>4) i=1;}

if ( value_BUT_RIGH == HIGH) { produvka();} else {delay(1);}

switch (i)

{

case 1: menu_U() ; break;

case 2: menu_G() ; break;

case 3: menu_P() ; break;

case 4: {svode() ; delay(5000); i=1;} break;

}

tackt++;

//запись в массивы температуры и влажности

if (tackt>=115) // время между циклами записи в массивы порядка 4 минут

{tackt=0; secundy++; if (secundy>15)secundy=0;

matrix_h_U[secundy]=h_U; matrix_t_U[secundy]=t_U;

matrix_h_G[secundy]=h_G; matrix_t_G[secundy]=t_G;

matrix_h_P[secundy]=h_P; matrix_t_P[secundy]=t_P;

tone(12, 2000, 150); } // Попискивание при записи очередных элементов массива */

}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

хотел применить твой код но вылазит ошибка

 

Arduino: 1.8.3 (Windows 7), Плата:"Arduino Nano, ATmega328"

D:\РґРґРґ\garag\sket4\Garag_v1.1.1\Garag_v1.1.1.ino: In function 'void opros_datchikov()':

Garag_v1.1.1:439: error: incompatible types in assignment of 'uint8_t {aka unsigned char}' to 'byte [12] {aka unsigned char [12]}'

exit status 1
incompatible types in assignment of 'uint8_t {aka unsigned char}' to 'byte [12] {aka unsigned char [12]}'

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

  • Похожие публикации

    • Автор: draco
      помогите, пожалуйста, решить мою проблему:
      имеется arduino mega2560 (китайская)
      после приобретения я работал только с цифровыми входами
       
      сегодня решил сделать dc вольтметр, пришлось задействовать аналоговый вход
      в процессе отладки выяснил, что на всех входах (проверял в цикле) постоянно значение 1023 (или 5v в зависимости от интерпретации кода) и при подаче напряжения и без
      тестовое напряжение никогда не превышало 5в
       
      что с платой, или что я делаю не так?
    • Автор: winice
      Подскажите как можно сделать программку на андроид для обмена данными с контроллером?
      Например дергать выводами arduino со смарта по wi-fi (само собой через соответствующий шилд) 
      Накидать кнопок ползунков... и задать им соответствие каким-то байтам в памяти контроллера. 
      С разработкой на андроид связываться не хочется)))
    • Автор: megauserr895877
      Добрый день уважаемые!
      хотелось бы вашего совета по блоку питания!
      Суть проблемы такова, имеется прибор на Arduino с 3 датчиками и несколькими кнопками (если быть совсем честным и точным это контроллер джойстика). У большинства народа и у меня в частности этот прибор имеет нестабильности в работе датчиков, так как собственного питания ардуины на датчики хватает с некоторым натягом и более того, склонен я думать что питание ардуины от USB имеет "некоторые" проблемы с помехами и скачками питания- отчего возникают шумы в показаниях. Решение проблемы я вижу в 3 вариантах: 1 шумы датчиков, 2 шумы контроллера, 3 шумы источника питания. Не вдаваясь, пока что, в первые две, хочу решить 3 проблему.
      Моя цель собрать или купить готовый блок, модуль или комплектующие и собрать сетевой(желательно безтрансформаторный-трудно добыть, еще сложней перемотать) качественный блок питания с стабилизированным DC напряжением 5 V на небольшую мощность- 200-500 mA
      Возможно я параноик и питание ардуины стабильно и все "затыки" в первых 2 моментах,
      возможно для датчиков хватит стандартного ардуиновского внешнего подключаемого питалова...
      возможно блок питания от мобилки с лихвой заменит по качеству и всему прочему большинство самоделок,
      возможно и  взять какой нить 9 вольтовый зарядник и стабилизировать его какой нибудь 7805 или AMS1117( но 7805 это печка а не стаб- у меня батарея есть квартиру греть, а 1117 какие то подозрительные милипусичные и обвязка на смд меня смущает- будет ли оно ловить внешние помехи и отдавать их в выходное напряжение да и смысл, если они же в ардуиновской питалке стоят?)
      но я же параноик... и потому прошу совета Отцов:
      пару схемок:
      одну простую и надежную как автомат Михаила Тимофеевича
      и вторую что-нить экстравагантно шизофреничное а ля золотые транзисторы навесным монтажом в корпусе оклеенном серебряными пулями крестами, чесноком и святой водой, с наклейкой HighEnd и обмотанное кабелем ODIN или Sommer
      Ну или валенков, что суету попусту развел , вот только в гугл не отправляйте, видели там-знаем
    • Автор: NORD905
      Здравствуйте уважаемые форумчане.
      Суть: нужно изменить голос в реальном времени, создав устройство компактных размеров на базе arduino, которое можно было бы встроить в маску/шлем. 
      С горем пополам, товарищи мне собирали аналоговые схемы, которые меняли голос, но меняли, мягко говоря, ужасно. Качество было на уровне детских игрушек. Заказывал с али подобные вещи - тоже плачевные результаты.
      Но программы справляются с этим прекрасно. Поэтому нужно сделать на arduino. Я не представляю как это делается, заказывать на стороне не хочу, т.к.: 1) будет дорого, 2) хотелось бы самому научиться делать это.
      Помогите пожалуйста. Может у вас есть уже такой проект. Что мне надо купить и где. Схемы если есть (свежие, не на древних компонентах). Советы, может обратиться к какому-нибудь умельцу местному (в Москве живу), чтобы показал/рассказал как что и где.
      Спасибо за внимание.
    • Автор: Prozac
      Здравствуйте! С МК я знаком достаточно давно, теперь вот возникло желание заказать и немножечко помучить Ардуину (а точнее, ее китайский аналог Funduino Nano - но это не суть важно) - просто, чтобы понять, что это за зверь такой. Как известно, классической средой для написания программ ("скетчей") и прошивания Ардуины является Arduino IDE, язык которой - СИ. Но вот беда - не люблю я этот язык, за невменяемый и плохочитаемый синтаксис (писать вместо опрятного Паскалевского AND крякозябру &&, например - это нечто), и знаю его плохо (могу с некоторым усилием прочесть не очень сложный чужой код, и только). Зато Pascal очень нравится, и с Delphi сталкивался. Отсюда вопрос: существуют ли интегрированные программные комплексы для Ардуины, имеющие Пакскальский синтаксис и, так же как и Arduino IDE, имеющие встроенную функцию прошивальщика (т.е., построенные по принципу "все в одном"). Ну, и если такая среда существует, где взять для нее библиотеки - такие же удобные, как и у Arduino IDE? Или, может быть, существует какой-то плагин или патч для классической Arduino IDE, переводящий ее синтаксис на Паскальский?
       
      P.S. Я знаю-знаю, что СИ учить нужно (хотя, с AVRками до сих пор общаюсь на Ассемблере, а если совсем сложный проект - то беру MicroPascal). Я знаю, что в Arduino IDE используется очень упрощенная версия СИ - для домохозяек. И я знаю, что переучится с Паскаля на СИ (тем более упрощенный) - не так уж и сложно (главное - знать общие принципы программирования). Но... как-нибудь в другой раз: сейчас лениво что-то...
       
      P.P.S. СИшнки, только без холиворов, ладно? Обидеть никого не хотел!
       
  • Сообщения

    • Приветствую всех! Подскажите кто сталкивался с микросхемой H2012Q sot123 6, Что оно такое и даташит бы на нее
    • А чего такая фотка маленькая? Нужно было еще полкомнаты захватить в кадр.
    • Фигня это все. Крепко сожмите щупы клещей руками. В большинстве случаев они емкость вплоть до 10мкФ покажут. Впрочем, как и Ц4354М1.

      У конденсаторов важнее не емкость смотреть, а состояние контакта между пластинами и выводами внутри корпуса. Т.е. паразитное сопротивление, которое называется ESR или ЭПС. Мало того, сопротивление это не локальное (точечное), а зачастую еще и распределенное по объему. Распределенное сопротивление проявляется как сильная зависимость емкости от частоты. Никакой тестер или клещи этих эффектов никак не увидят. А повышенное сопротивление – это источник нагрева. Вот почему многие конденсаторы кипят, раздуваются и взрываются. Есть даже такой жаргон – «беременный электролит».

      Иными словами, емкость может быть нормальная, а контакт между пластинами или выводами – плохой. Потеря емкости – это уже запущенный случай, когда корпус конденсатора совсем разгерметизировался и весь электролит высох (вытек, испарился). Поэтому, как ни странно это звучит, у конденсаторов, прежде всего, нужно мерить не емкость, а сопротивление. Только специализированные приборы покажут проблемы на начальной стадии.

      А тестер должен быть дешевым. DT830 – самый оптимальный вариант. Цена до 400 рублей. Потерять, сжечь, утопить не жалко. В 95% случаев высокая точность измерения вообще не нужна. В оставшихся 5% случаев нужно применять «транзистор – тестер». Второй тестер должен иметь амперметр переменного тока. Я взял М890. Т.е. приборов нужно несколько штук. Как правило, комплект приборов обойдется значительно дешевле, а отказ прибора не слишком сильно ударит по карману.

      Порядок покупки приборов примерно следующий.
      1. DT830.
      2. Транзистор – тестер.
      3. M890, M320. Смотря какие интересы появились.
      4. Е7-15, АКИП-6108 или подобный.
      5. Цифровой осциллограф. DSO5102 напрямую из Китая вполне нормально.

        Это местная накрутка за шильдик. И вообще это уже 4-ый шаг. Ищи на Ali аналог. Как он выглядит ты теперь знаешь.
      АКИП 6109 возьми. Вполне обойдешься без замера на 100кГц.
      Е7-15 за 7700рублей предлагают. Он и получше АКИПа будет, т.к. может постоянную составляющую подавать.
    • Все конденсаторы, за исключением второго фото, слева. Коричневый, с пропИлом и надписью "ARC", которая, подсказывает, что это - искровой разрядник. вы как их искали - по фото анфас и профиль что-ли?  Диоды с черной+бордовой полосками - LL4148, аналог 1N4148. Диоды с другой окраской, могут оказаться как стабилитронами (испытание на обратное напряжение), так и Шоттки (проверить Uf). Более-менее точный ответ даст даташит, если вы его угадаете.
    • Золотые слова! С первых же страниц началось ...  Цитата "Вы при выборе IDE вы ориентировались в основном на удобство и понятливость в освоение. Желательно бы еще указать сравнительные данные компилятора студии 6 по размеру выходного файла с остальными." И т.д. и т.п. - налетели гуру программирования вместо изучающих курс и устроили "штангенциркуль членомеро"! Начали автора учить, как надо и что надо. И сколько таких страниц?!!! Господи! Так какого (не при женщинах) хрена ты свое драгоценное время на меня тратишь? Сидишь, читаешь, пишешь? Жизнь больше не на что потратить? Брось и не пиши! Мир не без добрых людей! Может кто-то вспомнит, как сам начинал, поймет меня и выведет на путь истинный! Не все же такие гении, как ты: за пару дней научился всему!
    • Благодарю, сейчас увеличю R6.  Да на 22 мкф ни грамма...что как то странно