Arduino se ha convertido en un gran aliado para escuelas ,universidades, y profesionales. Con este pequeño dispositivo se pueden desarrollar ideas tecnológicamente avanzadas y a medida, con unos costes muy bajos.
KY-PZ100BEBC con grafismo integrado. |
La cámara robotizada PTZ (Pan Til/Zoom) de JVC, KY-PZ100 tiene una excelente calidad de imagen, puede grabar con formato 1920x1080 50p Quick Time hasta 50Mb en tarjeta SD y acceder a sus archivos vía IP, Es una cámara que trabaja en entornos profesionales de TV, eventos e instalaciones ya que permite un control muy preciso de movimiento y es totalmente silenciosa, además, su zoom óptico de x30 y la capacidad de hacer streaming y publicar directamente en Facebook Life o YouTube elevan esta cámara a un nivel ideal para cualquier proyecto.
La cámara KY-PZ100 permite ser controlada por control serie compatible con Visca , también por conexión IP donde las APIS son abiertas y se pueden descargar desde la pagina web de JVC, y finalmente también dispone de control vía IR, y es ahí donde va dirigido este articulo.
La cámara se puede controlar u operar de forma paralela por sus diferentes vías de control, es decir puede estar conectada a la red IP, ser controlada por web y hacer streaming al mismo tiempo que puede recibir y ejecutar las órdenes que recibe vía IR.
El control IR da la posibilidad a centros educativos a realizan sus proyectos de control de la cámara aprovechando sus excelentes cualidades sin riesgo a que se puedan producir averías por estar conectadas, ya sea de la cámara o de la red informática, puesto que el control que se propone en este articulo es vía IR, es decir, sin contacto y 100% seguro.
Por otro lado en entornos profesionales puede facilitar el control en instalaciones donde se necesiten sensores domóticos o inmóticos sencillos o donde no se pueda hacer una instalación cableada o por Wifi y los emisores IR por su sencillez cobren protagonismo.
Yo soy un gran ignorante sobre la programación pero afortunadamente existe mucha información en la red que me ha permitido llegar hacer este articulo y crear como ejemplo una RadioTV con una sola cámara a nivel experimental ya que la cámara permite congelar la imagen mientras cambia de posición para no ver los movimientos.
El control IR permite instalar la cámara y realizar en control a distancia sin contacto físico o cables, esto podría llevar a desarrollar el seguimiento de una persona con sensor infrarrojo , o el movimiento desde varias posiciones con simples interruptores o dependiendo de sensores, tal y como se ha aplicado en este proyecto de RadioTV.
Set completo, sensores KY-037. El 1 esta integrado en la estación base el 2, 3 y 4 cableados |
Los data-gramas IR los he extraído leyendo la información directamente del Remoto con diferentes códigos disponibles para Arduino.
Aquí dejo mi humilde colaboración al mundo Arduino, con este código y lo que creo es mucho más importante los data-gramas de control IR para usarlo con la librerías y existentes de Arduino.
El código básicamente utiliza las memorias de posición de la cámara ya memorizadas bien con el control IR , vía web o con control físico como el RM-LP100.
El código propuesto es básico y lee cuatro sensores de audio del 1 al 4 si se detecta uno de ellos de forma independiente va su posición correspondiente de 1- 4 que normalmente son un primer plano del interlocutor. En el caso de que los detectores 2 y 3 se activen de forma simultanea entrará la posición 5 con un plano medio y si alguna otra combinación de dos sensores se activan simultáneamente se envía el código para la posición 6 que será un gran angular.. es evidente de que este es un ejemplo moldeable a la necesidad de cualquier necesidad.
Bueno espero que sea útil sobre todo a centros de formación y universidades para su uso como Radio TV o desarrollo e investigación en nuevos proyectos./* Este código es para usarlo con una cámara PTZ de JVC modelo KY-PZ100 en cualquiera de sus versiones y una placa de arduino Mega 2560.
En caso de ser Arduino el IR debe asignarse y conectarse al pin3
Con este código simplemente se envía la orden de posición a la cámara 1-6 via IR que es una de sus vías de control.
La propuesta es hacer una TV Radio con una simple cámara y con 4 sensores de audio (pos1-4) siendo la 5 y 6 utilizadas cuando existe la detección de más de uno de los sensores.
Hay que tener en cuanta que los cambios deben de disponer de un tiempo mínimo para que el espectador no se vuelva loco con los cambios de cámara , aquí se utiliza el mínimo recomendado.
En cámara se debe activar la función de memoria de imagen antes de cambio de esa forma se evita la visualización de los movimientos.
La cámara puede publicar directamente a You tube , Facebook etc la transmision se debe activar vía Menú, consola de control RM-LP100 o Web control
Para el envió de los codigos IR se utiliza la librería "IRremote.h"
IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
An IR LED must be connected to Arduino PWM Pin3 Mega pin 9.
Version 0.1 July, 2009
Copyright 2009 Ken Shirriff
http://arcfn.com
Para el LCD se han utilizado
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 16, 2);
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
#define Cam1 0xC305
#define Cam2 0xC385
#define Cam3 0xC345
#define Pos1 0xC360
#define Pos2 0xC3E0
#define Pos3 0xC310
#define Pos4 0xC390
#define Pos5 0xC350
#define Pos6 0xC3D0
// Define sensor pin
const int AudSensor1 = 5;
const int AudSensor2 = 6;
const int AudSensor3 = 7;
const int AudSensor4 = 8;
const int Ledout = 4;
// Define a variable for the button state
IRsend irsend;
LiquidCrystal_I2C lcd(0x27, 16, 2); // si no te sale con esta direccion puedes usar (0x3f,16,2) || (0x27,16,2) ||(0x20,16,2)
void setup()
{
Wire.begin();
lcd.begin(16, 2);
lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
//lcd.noBacklight();
Serial.begin(9600);
// Set Switch pin as Input
pinMode(AudSensor1, INPUT);
pinMode(AudSensor2, INPUT);
pinMode(AudSensor3, INPUT);
pinMode(AudSensor4, INPUT);
pinMode(Ledout, OUTPUT);
}
void loop() {
lcd.display();
// Si el sensor en pin5 y pin7 da alto escribe en serial monitor y envia 1er 2 do código IR por pin 9 PMW para posicion 5.
if ((digitalRead(AudSensor2)&& digitalRead(AudSensor3) == HIGH))
{ lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 2+3.");
lcd.setCursor(0, 1);
lcd.print("Posicion 5.");
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos5, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos5, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos5, 16, 0);
delay(2000);lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
// Si el sensor en pin5 y pin6 da alto escribe en serial monitor y envia 1er 2 do código IR por pin 9 PMW para posicion 5.
else if ((digitalRead(AudSensor1)&& digitalRead(AudSensor2) == HIGH))
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 1+2 .");
lcd.setCursor(0, 1);
lcd.print("Posicion 6.");
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(2000);lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
// Si el sensor en pin5 y pin7 da alto escribe en serial monitor y envia 1er 2 do código IR por pin 9 PMW para posicion 5.
else if ((digitalRead(AudSensor2)&& digitalRead(AudSensor4) == HIGH))
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 2+4.");
lcd.setCursor(0, 1);
lcd.print("Posicion 6.");
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(2000);lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
// Si el sensor en pin5 y pin7 da alto escribe en serial monitor y envia 1er 2 do código IR por pin 9 PMW para posicion 5.
else if ((digitalRead(AudSensor3)&& digitalRead(AudSensor1) == HIGH))
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 3+1.");
lcd.setCursor(0, 1);
lcd.print("Posicion 6.");
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(2000);lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
// Si el sensor en pin5 y pin7 da alto escribe en serial monitor y envia 1er 2 do código IR por pin 9 PMW para posicion 5.
else if ((digitalRead(AudSensor3)&& digitalRead(AudSensor4) == HIGH))
{ lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 3+4.");
lcd.setCursor(0, 1);
lcd.print("Posicion 6.");
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(2000);lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
// Si el sensor en pin5 y pin7 da alto escribe en serial monitor y envia 1er 2 do código IR por pin 9 PMW para posicion 5.
else if ((digitalRead(AudSensor1)&& digitalRead(AudSensor4) == HIGH))
{ lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 1+4.");
lcd.setCursor(0, 1);
lcd.print("Posicion 6.");
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos6, 16, 0);
delay(2000);lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
else if (digitalRead(AudSensor1)== HIGH)
{
// Si el sensor en pin5 da alto escribe en serial monitor, enciende el led y envia 1er 2 do código IR por pin 9 PMW.
Serial.print("Enviando código Cámara 1, Posición 1 sen1 ");
Serial.print("\n");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 1.");
lcd.setCursor(0, 1);
lcd.print("Posicion 1.");
//irsend forma parte de la libreia IR cam y posicion esta definido al inicio.
irsend.sendJVC(Pos1, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos1, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos1, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos1, 16, 0);
delay(5000);lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
// Si el sensor en pin6 da alto escribe en serial monitor, enciende el led y envia 1er 2 do código IR por pin 9 PMW.
else if (digitalRead(AudSensor2) == HIGH){
Serial.print("Enviando código Cámara 1, Posición 2 sen2");
Serial.print("\n");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 2.");
lcd.setCursor(0, 1);
lcd.print("Posicion 2.");
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos2, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos2, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos2, 16, 0);
delay(5000);
lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}// Si el sensor en pin7 da alto escribe en serial monitor, enciende el led y envia 1er 2 do código IR por pin 9 PMW.
else if (digitalRead(AudSensor3) == HIGH)
{
Serial.print("Enviando código Cámara 1, Posición 3 sen3 ");
Serial.print("\n");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 3.");
lcd.setCursor(0, 1);
lcd.print("Posicion 3.");
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos3, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos3, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos3, 16, 0);
delay(5000);
lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
// Si el sensor en pin7 da alto escribe en serial monitor, enciende el led y envia 1er 2 do código IR por pin 9 PMW.
else if (digitalRead(AudSensor4) == HIGH)
{
Serial.print("Enviando código Cámara 1, Posición 4 sen4 ");
Serial.print("\n");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor 4.");
lcd.setCursor(0, 1);
lcd.print("Posicion 4.");
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos4, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos4, 16, 0);
delay(50);
irsend.sendJVC(Cam1, 16, 0);
delay(50);
irsend.sendJVC(Pos4, 16, 0);
delay(5000);
lcd.clear();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
else
{
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("** MACO ** ");
lcd.setCursor(0, 1);
lcd.print("JVC PTZ Audio Ctl");
}
}
No hay comentarios:
Publicar un comentario