Sensor de movimiento y Neopixeles

Hola a todos!

Espero no molestarlos con mi pregunta y haber entendido las reglas del uso del foro ya que es mi primera vez aquí. Estoy tratando de aprender arduino de manera autodidacta para un proyecto universitario (diseño industrial). Se trata de prender luces del Neopixel con un sensor de movimiento. Mi pregunta es la siguiente:

Estoy usando la biblioteca de adafruit, el sketch "simple". No se en que parte del sketch debo integrar la programacion del sensor(aquí me fallan las bases de la programación, lo siento). Si me podrían ayudar explicandome esto les estaría muy agradecida.

Aquí les adjunto el code que estoy tratando de hacer:

// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            6

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      16

// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; // delay for half a second
int pirPin = 8;
int Adafruit_NeoPixel = 6;

void setup() {
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(Adafruit_NeoPixel, OUTPUT);
  

  pixels.begin(); // This initializes the NeoPixel library.
}

void loop() {
#define Adafruit_Neopixel
  // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
int s = digitalRead(pirPin);
digitalWrite(Adafruit_Neopixel, s);
  for(int i=0;i<NUMPIXELS;i++){

    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,150,0)); // Moderately bright green color.

    pixels.show(); // This sends the updated pixel color to the hardware.

    delay(delayval); // Delay for a period of time (in milliseconds).

  }
}

Mil gracias de antemano.

No te preocupes, el foro es precisamente para eso, para preguntar.

Yo utilice el sensor pir hace poco y usé este ejemplo:

const int LEDPin= 13;
const int PIRPin= 2;
 
void setup()
{
  pinMode(LEDPin, OUTPUT);
  pinMode(PIRPin, INPUT);
}
 
void loop()
{
  int value= digitalRead(PIRPin);
 
  if (value == HIGH)
  {
    digitalWrite(LEDPin, HIGH);
    delay(50);
    digitalWrite(LEDPin, LOW);
    delay(50);
  }
  else
  {
    digitalWrite(LEDPin, LOW);
  }
}

Tendras que combinarlo con tu codigo y dentro del " if (value == HIGH) " meter lo que quieres hacer con el Neopixel

Gracias Jafox007!!!!

Efectivamente traté con tu code y modifiqué el que ya tenía!!! Ahora se baja la intensidad de los neopixels pero no se apagan cuando deja de haber movimiento. Podrías decirme cómo puedo programar que se apaguen por completo? Como puedes ver, donde dice "turn led off", dice low, pero igual no se apagan.

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

int ledPin = 6;                // choose the pin for the LED
int inputPin = 8;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN            6

// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS      60

// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);


void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input
 
  Serial.begin(9600);
  pixels.begin(); // This initializes the NeoPixel library.
  
}

void loop() {

  // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.

  for(int i=0;i<NUMPIXELS;i++){

    // pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,150,0)); // Moderately bright green color.

    pixels.show(); // This sends the updated pixel color to the hardware.

      val = digitalRead(inputPin);  // read input value
  if (val == HIGH) {            // check if the input is HIGH
    digitalWrite(ledPin, HIGH);  // turn LED ON
    if (pirState == LOW) {
      // we have just turned on
      Serial.println("Motion detected!");
      // We only want to print on the output change, not state
      pirState = HIGH;
    }
  }
  else {
    digitalWrite(ledPin, LOW); // turn LED OFF
    if (pirState == HIGH){
      // we have just turned of
      Serial.println("Motion ended!");
      // We only want to print on the output change, not state
      pirState = LOW;
    }
  }
}
}

Yo tengo una tira led multicolor y el codigo en el que me fijo para usarla es el siiguiente:

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>

//Designamos nuestro pin de datos
#define PIN 6
//Designamos cuantos pixeles tenemos en nuestra cinta led RGB
#define NUMPIXELS      20

//Definimos el número de pixeles de la cinta y el pin de datos
//   Parámetro 1 = número de pixeles de la cinta
//   Parámetro 2 = número de pin de datos del Arduino
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANTE: Para reducir el riesgo de dañar los pixeles de la cinta, añada un condensador de 1000 uF a través de
// los cables de alimentación de la cinta, agregue una resistencia de 300-500 Ohm en la entrada de datos del primer pixel
// Y reduzca la distancia entre Arduino y el primera pixel. 
// Evite realizar conexiones en el circuito vivo si lo va a hacer, conecte GND primero.

void setup() {
// Inicializamos nuestra cinta led RGB
  pixels.begin(); 
  
}

void loop() {

  //Definimos nuestras variables de tipo uint32 para cada color que utilizaremos
  // pixels.Color toma valores en RGB, desde 0,0,0 hasta 255,255,255
   uint32_t rojo = pixels.Color(150,0,0);
   uint32_t verde = pixels.Color(0,150,0);
   uint32_t azul = pixels.Color(0,0,150);
   uint32_t apagado = pixels.Color(0,0,0);

  int delayval = 50; // Pausa de cincuenta milisegundos

  // La numeración de leds en la cinta RGB es la siguiente:  el primer pixel es 0, el segundo es 1 y asi sucesivamente hasta el número total de leds menos uno
  for(int i=0;i<NUMPIXELS;i++){

    pixels.setPixelColor(i, rojo); // Brillo moderado en rojo

    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB

    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).

  }
  
  //Realizamos lo mismo para los colores verde y azul
    for(int i=0;i<NUMPIXELS;i++){

    pixels.setPixelColor(i, verde); // Brillo moderado en verde

    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB

    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).

  }
    
    for(int i=0;i<NUMPIXELS;i++){

    pixels.setPixelColor(i, azul); // Brillo moderado en azul

    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB

    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).

  }
    
    for(int i=0;i<NUMPIXELS;i++){

    pixels.setPixelColor(i, apagado); // Brillo moderado en azul

    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB

    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).

  }
  
  delay(1000);  // Pausa de un segundo
  
  //Variamos los colores de cada led en nuestra cinta RGB cada medio segundo
   uint32_t amarillo = pixels.Color(150,150,0);
   uint32_t morado = pixels.Color(150,0,150);
   uint32_t celeste = pixels.Color(0,150,150);
   uint32_t blanco = pixels.Color(150,150,150);
   
    delayval=500;
    
    pixels.setPixelColor(0, rojo); // Brillo moderado en rojo
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(1, verde); // Brillo moderado en verde
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(2, azul); // Brillo moderado en azul
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(3, amarillo); // Brillo moderado en amarillo
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(4, morado); // Brillo moderado en morado
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(5, celeste); // Brillo moderado en celeste
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(6, blanco); // Brillo moderado en blanco
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(7, rojo); // Brillo moderado en rojo
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(8, verde); // Brillo moderado en verde
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(9, azul); // Brillo moderado en azul
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(10, rojo); // Brillo moderado en rojo
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(11, verde); // Brillo moderado en verde
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(12, azul); // Brillo moderado en azul
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(13, amarillo); // Brillo moderado en amarillo
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(14, morado); // Brillo moderado en morado
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(15, celeste); // Brillo moderado en celeste
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(16, blanco); // Brillo moderado en blanco
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(17, rojo); // Brillo moderado en rojo
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(18, verde); // Brillo moderado en verde
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
    pixels.setPixelColor(19, azul); // Brillo moderado en azul
    pixels.show();   // Mostramos y actualizamos el color del pixel de nuestra cinta led RGB
    delay(delayval); // Pausa por un periodo de tiempo (en milisegundos).
    
  
}

Y los led se apagan por completo, pruebalo a ver si te funciona mejor.

y en esa ultima que tu me mandaste, si incluirias el sensor, donde lo pondrias? aqui es donde me faltan conocimientos de programacion y no se como hacerlo.

Estudiate el codigo un poco, que con los comentarios esta muy bien explicado, son varios juegos de luces en bucle, intenta hacer tu propio codigo y nos lo enseñas, si te lo hago yo todo pierde la gracia, ademas no se exactamente que quieres hacer.

Una vez mas gracias por tu ayuda. A ver te mando lo que he tratado que sigue sin funcionar. Yo entiendo lentamente el sketch y se me encienden las luces pero no se encienden por el sensor. y ademas se quedan encendidas.
En serio no encuentro el error.
Ahora, en lo que dudo es que donde el Neopixel no deberia ser definido como "ledPin". Pero si reemplazo lo que dice ledPin por "pixels" me sale un error.
Si conecto un LED directo al board, este si reacciona al sensor.

Aaaah! Estoy tan cerca y a la vez tan lejos jajaja!! :slight_smile:

const int pirPin = 8;     //PIR sensor en pin 8
const int ledPin = 6;     // LED en pin 6

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

// Which pin on the Arduino is connected to the NeoPixels?

#define PIN            6              // LED en pin 6
#define NUMPIXELS      60             // numero de neopixels

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; // retraso para encender cada led

void setup() {

 Serial.begin(9600);          //sensor
 
 pinMode(pirPin, INPUT);      //sensor es el input
 pinMode(ledPin, OUTPUT);    // leds son el output

int value= digitalRead(pirPin);
 
  if (value == HIGH)                  //si el valor es HIGH
  {
    digitalWrite(ledPin, HIGH);
    delay(50);
    pixels.begin();                     // enciende neopixels
  }
  else
  {
    digitalWrite(ledPin, LOW);
    pixels.show();                      //apaga neopixels
  } 
  
  
}

void loop() {
  for(int i=0;i<NUMPIXELS;i++){
    pixels.setPixelColor(i, pixels.Color(0,150,0)); // color
    pixels.show(); // apagar neopixeles
    delay(500); // retraso en milisegundos

ya ya sirvió!!!!!!!!!!!! :slight_smile:

¿Ya te funciona?, perfecto.

Se aprende mucho más intentándolo uno mismo, por eso te decía que le des un par de vueltecitas antes de darte la solución, se va adquiriendo más soltura, aunque a veces se tarda bastante.

Yo estoy atascado con un power line conmunication bastante tiempo, pero no tiro la toalla.