Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите со скетчем в ардуино. Программирование в АРДУИНО

Филюс Ситдиков Ученик (115), открыт 11 часов назад
Программирование в АРДУИНО .ИЗ датчика Сонара хочу сделать датчик ,чтобы включал свет и отключал при выходе из помещения.
Скетч есть, но проблема с реле. Реле работает на логический ноль, а у меня логическая единица. Пробивал менять ,не получилось. Возможно из-за микроконтроллера Ардуино нано-скорее выходы перепутал. Собрал на УНО ,но проблема не исчезла. Сигнал на вкл. реле идёт, но как 1,а не ноль.
Помогите пожалуйста.
Схему прилагаю. Реле не одинарное а из 4 шт. СКЕТЧ :
 int TrigPin = 7;
int EchoPin = 6;
int led5 = 5;
int led6 = 6;
int led7 = 7;
int timer_led = 2;
int position = 0;

void setup()
{
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
pinMode(led5, OUTPUT);
pinMode(timer_led, OUTPUT);
}
void loop()
{
int distance,duration;
digitalWrite(TrigPin,LOW);
delayMicroseconds(11);
digitalWrite(TrigPin,LOW);
duration = pulseIn(EchoPin, HIGH);
if (duration<900) // Если расстояние менее 9 сантиметров
{
digitalWrite(timer_led, HIGH); // Светодиод горит
}
else
{
digitalWrite(timer_led, LOW); // иначе не горит
}
delay(100); //защита от дребезга
if (duration<900) position = position + 1;
if(position > 0 && (digitalRead(timer_led) == LOW && (digitalRead(led5) == LOW )))
digitalWrite(led5, HIGH),(position = 0);
delay(100);
if (position > 6 )digitalWrite(led5, LOW),(position =0),delay(1000);
}

2 ответа
Sergio 2.1 Оракул (67287) 10 часов назад
 const int TrigPin = 7; 
const int EchoPin = 8; // Изменен пин
const int relayPin = 5; // Пин для реле
const int timer_led = 2;
int position = 0;

void setup() {
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
pinMode(relayPin, OUTPUT);
pinMode(timer_led, OUTPUT);
digitalWrite(relayPin, HIGH); // Начальное состояние - реле выключено
}

void loop() {
// Формируем импульс для сонара
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);

long duration = pulseIn(EchoPin, HIGH);
int distance = duration * 0.034 / 2; // Расчет расстояния в см

if (distance < 90) { // Если расстояние менее 90 см
digitalWrite(timer_led, LOW); // Инвертированная логика
position++;
} else {
digitalWrite(timer_led, HIGH);
}

delay(100);

if (position > 0 && digitalRead(timer_led) == HIGH && digitalRead(relayPin) == HIGH) {
digitalWrite(relayPin, LOW); // Включаем реле (активный низкий уровень)
position = 0;
}

if (position > 6) {
digitalWrite(relayPin, HIGH); // Выключаем реле
position = 0;
delay(1000);
}
}
Лайт Ягами Искусственный Интеллект (309771) 6 часов назад
Если не путаю, в релюхе этой схема такова, что на 0 один из выходов соединяет с центральным, а на 1 - другой из выходов соединяет с центральным, потому достаточно просто воткнуть провода в другой выход, без изменения кода.
Похожие вопросы