5 leds High Power con sensor ultra sonico y sensor pir

Buenas tardes

Tengo la siguiente consulta, es posible que haya interferencias o valores erraticos si conecto un sensor ultrasonico y un sensor pir?

Estoy haciendo un circuito en el que tengo 5 leds de 3watts con un mosfet irzf44n cada uno con una fuente de pc y un stepdown para regular el voltaje, el circuito prende, funciona, los leds todo ok entiendo, eso ya esta resuelto, creo

Mi consulta es si de alguna forma ese circuito puede no llegar a funcionar con lo que deseo

La propuesta de mi proyecto es que a medida que vos te acerques, 4 de los leds aumenten su potencia luminica segun que tan cerca estas, y que cuando estes muy cerca apaguen el quinto led, pero los valores que me toman los sensores son erraticos

Otra consulta, yo necesito esconder los sensores para el proyecto, el sensor ultrasonico si esta tapado no funciona no?

// ================= PINES =================
const int warmLeds[] = {5, 6, 9, 10};
const int numWarmLeds = 4;

const int coldLedPin = 3;

const int trigPin = 2;
const int echoPin = 12;

const int pirPin = 7;

// ============== PARÁMETROS ===============
const int pwmMinBase = 13;          // ~5%
const int pwmMaxNoPresence = 25;    // ~10%
const int pwmMaxPresence = 204;     // ~80%

const int breathAmplitude = 12;     // ±5% PWM
const unsigned long breathPeriod = 4000; // ms

const int distFar = 200;            // cm
const int distNear = 40;            // cm
const int coldLedOffDist = 100;     // cm (umbral apagado LED frío)

// =========================================

void setup() {
  for (int i = 0; i < numWarmLeds; i++) {
    pinMode(warmLeds[i], OUTPUT);
  }

  pinMode(coldLedPin, OUTPUT);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(pirPin, INPUT);

  digitalWrite(trigPin, LOW);

  Serial.begin(9600);
  Serial.println("Sistema iniciado");
}

// =========================================

void loop() {
  bool presence = digitalRead(pirPin);
  long distance = measureDistance();

  // Filtro básico para lecturas erráticas
  if (distance < 20 || distance > 300) {
    distance = distFar;
  }

  // -------- PWM BASE --------
  int pwmBase;

  if (!presence) {
    pwmBase = pwmMinBase;
    analogWrite(coldLedPin, 255); // LED frío ON
  } else {
    pwmBase = map(distance, distFar, distNear,
                  pwmMaxNoPresence, pwmMaxPresence);
    pwmBase = constrain(pwmBase, pwmMaxNoPresence, pwmMaxPresence);

    if (distance < coldLedOffDist) {
      analogWrite(coldLedPin, 0);   // LED frío OFF
    } else {
      analogWrite(coldLedPin, 255); // LED frío ON
    }
  }

  // -------- RESPIRACIÓN --------
  float phase = (millis() % breathPeriod) / (float)breathPeriod;
  float breath = sin(phase * TWO_PI);

  int pwmFinal = pwmBase + breath * breathAmplitude;
  pwmFinal = constrain(pwmFinal, 0, 255);

  // -------- SALIDA LEDs CÁLIDOS --------
  for (int i = 0; i < numWarmLeds; i++) {
    analogWrite(warmLeds[i], pwmFinal);
  }

  // -------- DEBUG --------
  Serial.print("PIR: ");
  Serial.print(presence);
  Serial.print(" | Distancia: ");
  Serial.print(distance);
  Serial.print(" cm | PWM calidos: ");
  Serial.println(pwmFinal);

  delay(50); // solo para estabilizar el monitor serie
}

// =========================================

long measureDistance() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  long duration = pulseIn(echoPin, HIGH, 25000); // timeout ~4m

  if (duration == 0) return distFar;

  return duration / 58;
}

La frecuencia ultrasónica transmite una señal de 40kHz. El PIR (infrarrojo pasivo) no transmite. El PIR solo recibe IR de la fuente de IR (calor).

Si está cubierto, no funciona, ¿verdad?

Correcto. Si la señal no escapa, no tiene retorno.

¿cómo es tu circuito?

¿Por qué usas un pin para cada LED si a todos aplicas el mismo tratamiento?

¿Has probado con un solo LED?

Conforme a la documentación, usar analogWrite con más de 4 pines puede causar problemas.

https://docs.arduino.cc/language-reference/en/functions/analog-io/analogWrite/

¿Qué tipo de Arduino estás utilizando?


¿Has probado escribir esos valores en el monitor? ¿Puedes compartir una muestra de esos valores?

Hola grayfoxkevsbar

Además de las aportaciones de los otros Foreros, te pregunto: Que función hace el PIR en este código ??

he probado con un solo led y el comportamiento es el mismo

el circuito digamos que el positivo del led viene de una fuente con step down que me da 3.5v, y el negativo sale del drain del MOSFET irfz44n, el mosfet tiene una resistencia de 220 en la primera pata que viene del pin del arduino y gnd conectado a todos los gnd, resistencia entre gnd y gate, y en el drain tambien tiene una resistencia

arduino uno

el sensor pir lo puse como para intentar estabilizar las lecturas, tipo que si detecta movimiento, el sensor ultrasonico recien ahi empiece a reportar y tener en cuenta

Yo encuentro que tu rutina solo entrega 13 o 204, lo demás no funciona. No importa en que posición este el ultrasónico.
Tal vez sea un problema de la simulación.

Qué valores de lecturas obtienes?

Para encontrar una solución:

  • podrías simplificar el código eliminando el MOS y trabajando con un solo led normal.

  • Eliminar momentáneamente la parte del PIR.

Tienes experiencia en otros códigos con sensores de ultrasonidos ??
Que modulo ultrasonidos utilizas ???