Помогите написать скетч для ультразвукового датчика HC-SR04 и модуля реле Songle SRD-05VDC-SL-C

electric13
Offline
Зарегистрирован: 14.12.2016

Здравствуйте! Необходимо, чтобы при расстоянии <300мм, модуль-реле включал нагрузку, если >300мм выключал. Заранее спасибо.

Onkel
Offline
Зарегистрирован: 22.02.2016

Пишите ydom@mail.ru  сделаем. Напишу код, соберу макет, проверю в работе, так что вы получите полностью рабочий проверенный код.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Onkel пишет:

Пишите ydom@mail.ru  сделаем. Напишу код, соберу макет, проверю в работе, так что вы получите полностью рабочий проверенный код.

такое даже я смогу написать )))

Green
Offline
Зарегистрирован: 01.10.2015

Питание от чего? htpicc@gmail.com

electric13
Offline
Зарегистрирован: 14.12.2016

От платы arduino uno.

Green
Offline
Зарегистрирован: 01.10.2015

5v реле, при питаниии от ардуино, может давать помеху и перегревать(выводить из строя) стабилизатор ардуины.

vvadim
Offline
Зарегистрирован: 23.05.2012

правильно реле запитать от отдельного источника 5 вольт, а не от дуни

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Это я под ESP писал.  Пины D6, D7, D8 заменишь на свои..

#define echoPin D7
#define trigPin D6
#define relayPin D8

long duration, distance;
 
void setup()
{
    Serial.begin (9600);
    pinMode(trigPin, OUTPUT);
    pinMode(relayPin, OUTPUT);
    pinMode(echoPin, INPUT);
}
 
void loop()
{
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    
    duration = pulseIn(echoPin, HIGH);
    distance = duration/58.2;
    
    Serial.println(distance);
    
    //  distance < - ТУТ НАХОДИТСЯ РАССТОЯНИЕ В МИЛЛИМЕТРАХ
    
    delay(100);
}

В монитор порта выводит в миллиметрах, что хочешь то и делай с ними.

 

Green
Offline
Зарегистрирован: 01.10.2015

Копипаст, небось.)) Ибо зачем первые 2 строки в лупе?

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Green пишет:

Копипаст, небось.)) Ибо зачем первые 2 строки в лупе?

Всё там правильно не езди людям по ушам.

Green
Offline
Зарегистрирован: 01.10.2015

Я понял. Для объёма. И не тыкай мне.

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

Копипаст, небось.)) Ибо зачем первые 2 строки в лупе?

А разве  pinMode(trigPin, OUTPUT);

Не установит выход в единичку?

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

ua6em пишет:

Green пишет:

Копипаст, небось.)) Ибо зачем первые 2 строки в лупе?

А разве  pinMode(trigPin, OUTPUT);

Не установит выход в единичку?

Изначально у меня эта функция называлась по другому и вызывалась по требованию, поэтому я и не удалял все задержки и т.п. Последующие так же её переименуют... 

Залей и посмотри в монитор порта.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а константа 58.2 - уточнённое значение на скорость распространения звука в воздушной среде, в примерах просто 58?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

ua6em пишет:

А разве  pinMode(trigPin, OUTPUT);

Не установит выход в единичку?


Нет, не установит.

electric13
Offline
Зарегистрирован: 14.12.2016

[quote=p.masyukov]

Это я под ESP писал.  Пины D6, D7, D8 заменишь на свои..

#define echoPin D7
#define trigPin D6
#define relayPin D8

long duration, distance;
 
void setup()
{
    Serial.begin (9600);
    pinMode(trigPin, OUTPUT);
    pinMode(relayPin, OUTPUT);
    pinMode(echoPin, INPUT);
}
 
void loop()
{
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    
    duration = pulseIn(echoPin, HIGH);
    distance = duration/58.2;
    
    Serial.println(distance);
    
    //  distance < - ТУТ НАХОДИТСЯ РАССТОЯНИЕ В МИЛЛИМЕТРАХ
    
    delay(100);
}

В монитор порта выводит в миллиметрах, что хочешь то и делай с ними.

Загрузил скетч. Вот такая картина получилась:

distance_sensor1:10: error: redefinition of 'long int duration'
distance_sensor:21: error: 'long int duration' previously declared here
distance_sensor1.ino: In function 'void setup()':
distance_sensor1:14: error: redefinition of 'void setup()'
distance_sensor:29: error: 'void setup()' previously defined here
distance_sensor1:4: error: 'D6' was not declared in this scope
distance_sensor1.ino:20:13: note: in expansion of macro 'trigPin'
distance_sensor1:6: error: 'D8' was not declared in this scope
distance_sensor1.ino:22:13: note: in expansion of macro 'relayPin'
distance_sensor1:2: error: 'D7' was not declared in this scope
distance_sensor1.ino:24:13: note: in expansion of macro 'echoPin'
distance_sensor1.ino: In function 'void loop()':
distance_sensor1:30: error: redefinition of 'void loop()'
distance_sensor:41: error: 'void loop()' previously defined here
distance_sensor1:4: error: 'D6' was not declared in this scope
distance_sensor1.ino:34:18: note: in expansion of macro 'trigPin'
distance_sensor1:2: error: 'D7' was not declared in this scope
distance_sensor1.ino:48:24: note: in expansion of macro 'echoPin'
redefinition of 'long int duration'
p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

Так ты пины замени на те что используешь (вместо D6,D7...) и подключи правильно датчик. 

Он и выводит ошибку.. Что в переменной растояние ничего нет.

long duration = 0, distance = 0; // А так нули будет выдавать если датчик неисправен, не подключен, не правильно подключен

electric13
Offline
Зарегистрирован: 14.12.2016

я использую ваши пины. заменил переменную. всё равно ошибка. выделяет 10 строчку.

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015
#define echoPin 7
#define trigPin 6
#define relayPin 8

long duration = 0, distance = 0;
 
void setup()
{
    Serial.begin (9600);
    pinMode(trigPin, OUTPUT);
    pinMode(relayPin, OUTPUT);
    pinMode(echoPin, INPUT);
}
 
void loop()
{
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    
    duration = pulseIn(echoPin, HIGH);
    distance = duration/58.2;
    
    Serial.println(distance);
    
    //  distance < - ТУТ НАХОДИТСЯ РАССТОЯНИЕ В МИЛЛИМЕТРАХ
    
    delay(100);
}
    
electric13
Offline
Зарегистрирован: 14.12.2016

не работает. пишет:

distance_sensor1:4: error: redefinition of 'long int duration'
distance_sensor:21: error: 'long int duration' previously declared here
distance_sensor1.ino: In function 'void setup()':
distance_sensor1:5: error: redefinition of 'void setup()'
distance_sensor:29: error: 'void setup()' previously defined here
distance_sensor1.ino: In function 'void loop()':
distance_sensor1:10: error: redefinition of 'void loop()'
distance_sensor:41: error: 'void loop()' previously defined here
redefinition of 'long int duration'
 
 
выделяет розовым long duration = 0, distance = 0;
strarbit
Offline
Зарегистрирован: 12.06.2016

Попробуйте переустановить IDE

electric13
Offline
Зарегистрирован: 14.12.2016

Зааааработаалооооо. Спасибо. Теперь не понятно, где задавать расстояние, если <300мм, то включить реле, >-выключить?

Panzerfunker
Offline
Зарегистрирован: 28.10.2016
01 #define echoPin 7
02 #define trigPin 6
03 #define relayPin 8
04  
05 long duration = 0, distance = 0;
06  
07 void setup()
08 {
09     Serial.begin (9600);
10     pinMode(trigPin, OUTPUT);
11     pinMode(relayPin, OUTPUT);
12     pinMode(echoPin, INPUT);
13 }
14  
15 void loop()
16 {
17     digitalWrite(trigPin, LOW);
18     delayMicroseconds(2);
19     digitalWrite(trigPin, HIGH);
20     
21     delayMicroseconds(10);
22     digitalWrite(trigPin, LOW);
23     
24     duration = pulseIn(echoPin, HIGH);
25     distance = duration/58.2;
26     
27     Serial.println(distance);
28     

           ( distance < 300 ) ? digitalWrite(relayPin, HIGH):digitalWrite(relayPin, LOW);

29     //  distance < - ТУТ НАХОДИТСЯ РАССТОЯНИЕ В МИЛЛИМЕТРАХ
30     
31     delay(100);
32 }

 

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

А ведь клиент созрел почти. )))

 

electric13
Offline
Зарегистрирован: 14.12.2016

я не понял вас? это тонкий намёк что ли?

p.masyukov
p.masyukov аватар
Offline
Зарегистрирован: 14.11.2015

новый год скоро.

 

electric13
Offline
Зарегистрирован: 14.12.2016

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