Asustar a los pájaros con láser verde automatizado


La solución para el problema del estornino en el cobertizo de la vaca
arduino automatizó el susto de los pájaros con láser verde

Terminado y encendido

Construyendo un repelente de pájaros con láser verde usando un Arduino Uno y algo de electrónica básica de pasatiempo. Usado para disuadir la invasión de estorninos de invierno en los establos.


Mi solución para el problema del estornino en la granja

Cada año alrededor de septiembre/octubre, junto con la cosecha de ensilado de maíz, viene la invasión de estorninos. Este es un problema importante en el establo de las vacas, no sólo consumen la mejor parte del ensilaje, los granos de maíz, sino que también dejan depósitos desagradables y potencialmente peligrosos de excrementos sobre el alimento y el equipo de las vacas. La solución fue un láser verde de alta potencia.

Al buscar formas de ahuyentarlos, me encontré con un artículo que mencionaba que las aves en general le temen a la luz de alta intensidad, especialmente a la luz verde. El primer paso fue comprar un par de punteros de láser verde, es increíble lo bien que funcionó. Durante un par de temporadas (sólo hasta marzo), regularmente recorría la granja asustando a los pájaros. Aunque no erradicaba completamente el problema, lo reducía en gran medida ya que la gran mayoría de los estorninos se trasladaban a otros lugares.

Sin embargo, exigía bastante tiempo. Fue entonces cuando decidí automatizar el proceso, empecé por poner un láser en un temporizador. Pero pronto descubrí que la luz debía moverse para obtener el efecto deseado y también para cubrir todo el establo. Así que esto es lo que se me ocurrió, un automatismo láser para asustar a los pájaros.

el estornino comiendo con la vaca

Lo que se necesita


Los componentes utilizados para construir el láser para asustar a los pájaros

Las partes principales para la construcción

  • Arduino Uno, usé un Sunfounder Uno genérico ya que tenía que mantener los costos al mínimo.
  • Módulo de reloj en tiempo real I2C - RTC DS3231
  • Relé 5v disparador de bajo nivel
  • La unidad de láser verde de alta potencia fue ordenada a AliExpress
  • Motor paso a paso 5V 28BYJ-48 y Tablero de control ULN2003
  • Caja impermeable 240 x 190 x 90mm con tapa abatible
  • Fuente de alimentación de 9v para Arduino Uno
  • Mini breadboard SYB-170

láser verde de alta potencia

Láser verde de alta potencia

genérico sunfounder arduino uno

Sunfounder Uno

módulo de reloj en tiempo real

Módulo de reloj en tiempo real


Partes misceláneas

  • Los cables de conexión de Dupont

  • Palitos de pegamento caliente

  • El suelo laminado cortado para la tabla de la base

  • También usé un pequeño trozo de plexiglás y algunos pequeños tornillos y tuercas para montar la unidad de láser en el motor de paso, Si tuviera que reconstruir las unidades reemplazaría el plexiglás por una placa de montaje impresa en 3D.

Construí dos de estas cajas láser automatizadas para asustar a los pájaros, una para cada cobertizo de la granja. El costo de todos los componentes fue de poco menos de 100 euros por unidad y pasé cerca de un día para el montaje y la puesta en marcha de ambas cajas.

He tratado de usar piezas fácilmente disponibles para mi espantoso pájaro láser automatizado, el único artículo que puede ser difícil de reemplazar (si es necesario) es la unidad láser. Debería haber comprado un repuesto en el momento de la construcción, pero al ser el artículo más caro el presupuesto no lo permitía. Con suerte, nunca necesitaré un repuesto.

El edificio


Ensamblando la caja de pedazos
ensamblado láser verde de miedo a los pájaros

Ensamblado láser verde de miedo a los pájaros

Decidí usar un Arduino Uno como controlador porque sólo quería que ejecutara una pequeña cantidad de código y que fuera fácil de usar, sólo hay que conectarlo y listo. De esa manera cualquiera podría mover o instalar la caja en otro lugar si fuera necesario.

La placa de montaje de la electrónica es un corte de suelo laminado que recorté para que encajara perfectamente en la caja impermeable inferior.

Luego dispuse los componentes en la placa y marqué las posiciones con un lápiz, luego quité los componentes y usando un taladro de 3mm taladré agujeros de 4mm de profundidad en las marcas del lápiz.

Luego, cortando una barra de pegamento en 8mm de largo, procedí a pegar estas brocas en caliente sobre los agujeros taladrados, todos excepto la placa de control del láser. Una vez que el pegamento se enfrió, coloqué y pegué en caliente los componentes uno por uno sobre estos “pilares de barras de pegamento”. La placa de control del láser se fijó directamente a la placa base de la misma manera.

El motor paso a paso se fijó en el centro de la tapa con pequeños tornillos avellanados.

La mini breadboard fue pegada usando su propio pegamento.

Aunque se trata de un montaje muy ‘DIY’, todas las piezas siguen en su lugar y funcionando después de 2 años de uso y estoy contento con el tiempo ahorrado en comparación con la opción de montaje atornillado.

La etapa final...


Codificando y conectando

El Código de Arduino

He mezclado varios fragmentos de código de ejemplo para producir algo que funcione, el objetivo del código es conseguir que el servo gire el láser a través de un ángulo predefinido a intervalos regulares a lo largo del día. El efecto de barrido del láser permite cubrir un área más grande y también lo hace más efectivo.

El boceto de Arduino.

// Real time module
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}
// Stepper motor set up
const int IN1=11;
const int IN2=10;
const int IN3=9;
const int IN4=8;
// Relay set up
const int relayPin =7; //the "s" of relay module attach to
const char tab1[] =
{
  0x01, 0x03, 0x02, 0x06, 0x04, 0x0c, 0x08, 0x09
};
const char tab2[] =
{
  0x01, 0x09, 0x08, 0x0c, 0x04, 0x06, 0x02, 0x03
};
void setup()
// Stepper motor & relay
{
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(relayPin, OUTPUT); //initialize relay as an output
  digitalWrite(relayPin, HIGH); //disconnect the relay
// Real time module
  Wire.begin();
  Serial.begin(9600);
  // set the initial time here:
  // DS3231 seconds, minutes, hours, day, date, month, year
  
  // Un-comment following line to set current time (change values), once set comment out again and re-upload
  
 //setDS3231time(00,52,23,3,3,1,18);
void loop()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  // retrieve data from DS3231
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
    // send it to the serial monitor
  Serial.print(hour, DEC);
  // convert the byte variable to a decimal number when displayed
  Serial.print(":");
  if (minute<10)
  {
    Serial.print("0");
  }
  Serial.print(minute, DEC);
  Serial.print("--");
  delay(1000);
   { 
      if (hour > 8 and hour < 18)
    {
      if (minute == 10 or minute == 20 or minute == 30 or minute == 40 or minute == 50 or minute == 0)
        {
          LaserOn();
        }
    }  
  
  }
}
void ctlStepMotor(int angle, char speeds )
{
  for (int j = 0; j < abs(angle) ; j++)
  {
    if (angle > 0)
    {
      for (int i = 0; i < 8; i++)
      {
        digitalWrite(IN1, ((tab1[i] & 0x01) == 0x01 ? true : false));
        digitalWrite(IN2, ((tab1[i] & 0x02) == 0x02 ? true : false));
        digitalWrite(IN3, ((tab1[i] & 0x04) == 0x04 ? true : false));
        digitalWrite(IN4, ((tab1[i] & 0x08) == 0x08 ? true : false));
        delay(speeds);
      }
    }
    else
    {
      for (int i = 0; i < 8 ; i++)
      {
        digitalWrite(IN1, ((tab2[i] & 0x01) == 0x01 ? true : false));
        digitalWrite(IN2, ((tab2[i] & 0x02) == 0x02 ? true : false));
        digitalWrite(IN3, ((tab2[i] & 0x04) == 0x04 ? true : false));
        digitalWrite(IN4, ((tab2[i] & 0x08) == 0x08 ? true : false));
        delay(speeds);
      }
    }
  }
}
void StepMotorStop()
{
  digitalWrite(IN1, 0);
  digitalWrite(IN2, 0);
  digitalWrite(IN3, 0);
  digitalWrite(IN4, 0);
}

void LaserOn()
{
  digitalWrite(relayPin, LOW); //Close the relay
  {
    for (int i=1; i<=2; i++)
    {
        ctlStepMotor(120, 10);
        StepMotorStop();
        delay(1000);
        ctlStepMotor(-120, 10);
        StepMotorStop();
        delay(1000);
    }
        digitalWrite(relayPin, HIGH); //Open the relay
        delay(30000);
    }
}

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
  // sets time and date data to DS3231
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set next input to start at the seconds register
  Wire.write(decToBcd(second)); // set seconds
  Wire.write(decToBcd(minute)); // set minutes
  Wire.write(decToBcd(hour)); // set hours
  Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
  Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
  Wire.write(decToBcd(month)); // set month
  Wire.write(decToBcd(year)); // set year (0 to 99)
  Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); // set DS3231 register pointer to 00h
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  // request seven bytes of data from DS3231 starting from register 00h
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}

Quería hacer un diagrama de Fritzing para el cableado, pero nunca encontré el tiempo. Así que hice una lista de las conexiones lo mejor posible.

conectando el miedo a los pájaros con láser verde

Cableado de los componentes

Así es como conecté el susto del pájaro láser:

Controlador del motor de pasos

  • IN1 – Arduino Uno Pin 8
  • IN2 – Arduino Uno Pin 9
  • IN3 – Arduino Uno Pin 10
  • IN4 – Arduino Uno Pin 11
  • Power + to Breadboard Shared 5v
  • Power – to Arduino Uno GND

Módulo de reloj en tiempo real

  • SCL – Arduino Uno Pin A5
  • SDA – Arduino Uno Pin A6
  • VCC – Arduino Uno 3.3v
  • GND to Breadboard Shared Ground

Relay

  • IN – Arduino Uno Pin 7
  • VCC to Breadboard Shared 5v
  • GND to Breadboard Shared Ground
  • Output:
    • Laser Controller Board
    • Breadboard 9v Input

Junta de Control de Láser

  • Conectado a la tierra de entrada de la Breadboard y al relé

Fuente de alimentación

  • Dividido en Breadboard para suministrar 9v a Arduino y al Láser

Utilicé el dispositivo láser para ahuyentar a los pájaros durante 3 inviernos y aunque no eliminó completamente los estorninos, definitivamente redujo los números. La principal ventaja era que los pájaros no se quedaban en los establos durante la noche.

Además, continuaría trabajando los fines de semana cuando yo no lo hiciera.