viernes, 23 de abril de 2010
Programador de micros
Para programar el microcontrolador utilizamos el master-prog, el cual puedes conseguir en www.mercadolibre.com a un costo de aproximadamente 450 pesos. Y este programador viene con un CD que incluye varios compiladores y lo necesario para empezar a desarrollar aplicaciones (excepto los micros).
microcontrolador
Eh aquí el esquemático del microcontrolador pic16f877 que utilizamos para ajustar la posición de los motores a pasos. Los 4 bits menos significativos se conectan a las bobinas del motor, (el cómo movemos los motores se agregó anteriormente, hay que destacar que ese código está en C, utilizando el compilador mikroC.) el potenciometro se utiliza para sensar la posición en la que se encuentra el motor, o en este caso en que dirección apunta la pistola de paint balls.
El diseño de la base de motores (Etapa 2 de mecánica)
En la creación de las piezas se utilizaron dos placas de aluminio de 3/4 in. de espesor para que quedara firme la base y en si toda la estructura. La figura siguiente muestra las dos placas antes de maquinarse y como queremos acomodarlas. En esta visión previa del proyecto se acomodaron de esta manera para tener dos grados de libertad por medio de los motores antes descritos.
Después nos topamos con la necesidad de reducir la fricción por medio del uso de baleros. Estos baleros fueron seleccionados de una base de datos de Timken por medio de su centro (3/4 in.) y que se tuvieran en existencia en el distribuidor local. Primero se pensó en baleros de rodillos cuya característica principal fuese soportar cargas verticales. Para esto se encontró el Balero de rodillos de la marca Timken T77 904A1 cuya caja se muestra en la figura. También se tomo en consideración un balero que centrara el mecanismo giratorio de nuestro robot. Para cumplir con este propósito se utilizo un balero de cono, pues su característica nos brinda soporte de carga en 2 dimensiones, entonces una centraría la base y la otra soportaría su peso. El balero utilizado fue el LM11910 con su respectiva tasa LM11949. Sus cajas se muestran a continuación también.
Después de se maquinaron los centros de las placas en un torno, aunque hubiera sido mas fácil en una fresadora. Fueron dos agujeros. El primero de 3/4 in. Para pasar el perno de soporte (un tornillo) y el segundo para posicionar el motor con su respectiva caja de ajuste. En las siguientes figuras se muestra lo antes descrito.
El ensamble final con los motores se veria desde arriba de esta manera.
AVANCE VISION
Primero tomamos una imagen que se considera como fondo, luego obtenemos una nueva imagen donde ya hay un nuevo objeto (en este caso la mano) lo que representa movimiento.
Pasamos las dos imagenes a tonos de grises y las restamos, de esta manera podemos aislar el objeto nuevo, luego binarizamos la imagen para dejar en blanco el objeto y por último obtenemos el centroide del mismo para apuntar a ese punto al disparar.
CODIGO:
A = imread('foto1.jpg');
B = imread('foto2.jpg');
C=rgb2gray(A);
D=rgb2gray(B);
Z=imsubtract(C,D);
I=Z>=50;
BW = I > 0;
s = regionprops(BW, I, {'Centroid','WeightedCentroid'});
s(1).Centroid;
imshow(I)
title('PORNO CON ABEJAS');
hold on
numObj = numel(s);
for k = 1 : numObj
plot(s(k).WeightedCentroid(1), s(k).WeightedCentroid(2), 'r*');
plot(s(k).Centroid(1), s(k).Centroid(2), 'bo');
end
hold off
Funcionamiento de los motores (Etapa 1de lo mecanico)
Los motores hasta ahora se ha comprobado que si funcionan por la prueba que se hizo a 12V con un arreglo Unipolar y un arreglo de Transistores TIP41. Los diagramas se muestran a continuación y un video que avala el funcionamiento del motor.
En esta primera etapa se definió que se tiene un problema de funcionamiento, ya que el motor no da el torque suficiente, pues el TIP41 genera demasiado calor. Otro factor importante es que al querer darle mayor velocidad se pierde torque por la cuestión del tiempo que pasa cada paso generando su campo magnético. Por último se observo que el Voltaje o Potencial al que estamos sometiendo el Motor esta en el umbral inferior pues son 12V de alimentación menos la perdida de 2.5V en el TIP41( el cual es tipo Darlington). Entonces el diferencial de potencial dentro de la bobina del motor es demasiado poco para un buen desempeño.
Por tales razones hemos optado por el uso de algún switch electrónico mas potente. Por lo que al especular el mercado encontramos a los IGBT, que son una función entre las tecnologías BJT y MOSFET. Son transistores de alta velocidad, alta corriente, y alto Voltaje de polarización inversa (Vce). Para su control se utilizara un driver especial para el control de los IGBTs. Este a su vez es controlado desde un micr0-controlador protegido por Opto-acopladores. El principio del programa sigue siendo el mismo que el anterior. A continuación se muestras las piezas y sus respectivos links para obtener sus datasheets.
- Driver para IGBTs de ON Semiconductor. Parte: MC33153PG
http://www.onsemi.com/PowerSolutions/product.do?id=MC33153PG
- IGBT marca International Rectifier. Parte:IRG4PC30UPBF
- Optoacopladores de 4 Canales marca Vishay. Parte: ILQ1
http://www.vishay.com/product?docid=82582&query=ILQ1
El micro-controlador a utilizar será el mismo de las pruebas, el 16F877A. Los datos de control se realizaran por medio de coordenadas angulares en función de la variación del voltaje a través de una resistencia variable (Pot) que será la retroalimentación que dirá que se cumplí el giro deseado en el motor. Por esta razón el micro-controlador utilizado necesita tener entradas Análogas- Digitales (ADC).
jueves, 15 de abril de 2010
Cámara Eye 312
- Video de YouTube para compartir archivos
- El micrófono integrado
- Multi-función de limitación de la Base de Diseño
- Giratorios de 360 grados
- Una mayor flexibilidad de visualización
viernes, 9 de abril de 2010
Programa
programa de control de posicion para motores
int adc_y;
int i;
int n;
void main() {
adc_y = 512;
i = 0;
n = 6;
PORTC = 255;
TRISC = 0;
ADCON1 = 0x80; // Configure analog inputs and Vref
Delay_ms(2000);
while(1) {
adc_ref = Adc_Read(7);// Get results of AD conversion
//Adc_Read(2); // Get results of AD conversion
if(adc_ref >= adc_y){ //comparación para ver a que lado girar
if(i>6){
i=0;}
switch (i){ //secuencia de pasos para motor
case 0 : PORTC = 1; break;
case 1 : PORTC = 5; break;
case 2 : PORTC = 4; break;
case 3 : PORTC = 6; break;
case 4 : PORTC = 2; break;
case 5 : PORTC = 10; break;
case 6 : PORTC = 8; break;
default : PORTC = 255; break;
} Delay_ms(50);
i++;
}
if(adc_ref < adc_y){
if(n<0){n=6;}
switch (n){
case 0 : PORTC = 1; break;
case 1 : PORTC = 5; break;
case 2 : PORTC = 4; break;
case 3 : PORTC = 6; break;
case 4 : PORTC = 2; break;
case 5 : PORTC = 10; break;
case 6 : PORTC = 8; break;
default : PORTC = 255; break;
}
Delay_ms(50);
n--;
}
}
} //~!