Ультразвуковой датчик не работает, если реле на NC Arduino - PullRequest
0 голосов
/ 22 мая 2018

Обычно ультразвуковой датчик (датчик HC-SR04) работает как положено, но когда я закрываю реле, оно перестает работать.

Реле предназначено для другой работы, пока ничего не связано с датчиком пинга ..

Это код:

/*
 * created by Rui Santos, http://randomnerdtutorials.com
 * 
 * Complete Guide for Ultrasonic Sensor HC-SR04
 *
    Ultrasonic sensor Pins:
        VCC: +5VDC
        Trig : Trigger (INPUT) - Pin11
        Echo: Echo (OUTPUT) - Pin 12
        GND: GND
 */

#define relay1 10

int trigPin = 11;    //Trig - green Jumper
int echoPin = 12;    //Echo - yellow Jumper
long duration, cm;
String cmd;

void setup() {
  //Serial Port begin
  Serial.begin (9600);

  Serial.println("Initializing Relay...");
  pinMode(relay1, OUTPUT);   

  Serial.println("Initializing Ultrasonic sensor...");
  //Define inputs and outputs
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

}

void loop()
{ 

  if (Serial.available() > 0) {
    // read the incoming byte:
    cmd = Serial.readString();

    if (cmd == "relayOn"){
      //relay normally closed - ultrasonic sensor stop working here
      digitalWrite(relay1, LOW);       
    }else if (cmd == "relayOff"){
      //relay normally open
      digitalWrite(relay1, HIGH);
    }
  }    

  // The sensor is triggered by a HIGH pulse of 10 or more microseconds.
  // Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
  digitalWrite(trigPin, LOW);
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Read the signal from the sensor: a HIGH pulse whose
  // duration is the time (in microseconds) from the sending
  // of the ping to the reception of its echo off of an object.
  duration = pulseIn(echoPin, HIGH);

  // convert the time into a distance
  cm = (duration/2) / 29.1;

  Serial.print(cm);
  Serial.print("cm");
  Serial.println();

  delay(250);   
}

РЕДАКТИРОВАНИЕ: Ультразвуковой датчик перестает работать точно, когда реле замкнуто, но этот датчик не подключен к реле

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Ваша логика говорит, что проблема в схеме, а не в коде.

Если вы не проверили схему, потянув штырь реле НИЗКО для включения, похоже, что вы пропускаете ток реле «через» контакт реле 1К земле, приземляться.

Если это так, это большое нет №.

Маленькое реле может иметь до 100-150 мА пускового тока при включении.Большие реле еще больше.

Выводы Arduino могут выдерживать максимум 40 мА на вывод.

Это может привести к его блокировке или, в конечном итоге, к сгоранию контакта или самого микро.

Установите NPN-транзистор с земли на конец реле и используйте HIGH для транзисторной базы, чтобы включить его.Таким образом, вывод использует только несколько мА, а ток реле проходит через транзистор.

Запрещается подключать блокирующий диод к катушке реле, если он еще не подключен к цепи.

есть схемы для этого по всей сети.

из вашей схемы моя догадка была верна.Вы протягиваете релейный ток через микро-контакт.

Посмотрите на https://www.electroschematics.com/wp-content/uploads/2013/07/arduino-control-relay-schematic.png 1K не является обязательным, и база транзистора может быть на любом цифровом выводе, который вы хотите, вывод 2 приведен только в качестве примера.

Включите диод через катушку реле, он блокирует обратное напряжение, которое может привести к повреждению.

Транзистор пропустит ток реле и изолирует микроэлемент от этого тока и остановит блокировку.

Здесь будет работать любой NPN-транзистор общего назначения.Просто проверьте распиновку на проводку.

Да кстати;с транзистором ваша логика контактов реле Relay1 будет изменена, затем включится HIGH.

0 голосов
/ 22 мая 2018

Используйте другой источник питания для подачи питания на реле (соедините вместе Gnd двух источников питания), перегрузка может стать причиной неисправности Arduino.

...