lunes, 21 de julio de 2014

Carril macro con arduino IV

Estoy desarrollando las modificaciones al stacking rail que comentaba hace unos dias.
Descargue la sdk de canon y estoy siguiendo este tutorial para implementarlo. La idea es crear un programa en C# (Visual Studio 2012) que use el SDK de Canon y la libreria de vision artificial OpenCV  (aqui como implementar a VS2012)  para el control de la camara y el carril. en el futuro el carril tendra varios ejes en la bandeja de la muestra, he visto que se tarda mucho tiempo en preparar la posicion de algo tan pequeño. Tambien quiero incluir la iluminacion al aparato, pero no tengo mas pines libres, dejo solo el encendido y apagado de la iluminacion a 12V. De esto y de mover el carril se encargara arduino, enviando y recibiendo datos del y al programa.
La idea es ver a pantalla completa la imagen de la camara en LiveMode y los controles de pc, camara y carril a modo de marco o lateral o algo asi, teniendo asi todos los controles del proceso a mano.
Pense que disponia de una camara canon DLSR modelo 400D ( mi primera reflex ) para pruebas, pero despues de mucho sin uso esta muerta .. asi que para las pruebas uso la camara con la que trabajo ... mi amada canon 7D, mientras sea asi no voy a enredar mucho con la sdk y me voy a limitar a modificar el programa de ejemplo del tutorial que sigo, dejo un screensave de lo que llevo, poco mas que maximizar y eliminar los marcos, botones y demas, me faltan los controles de los 3 ejes de la muestra.












Creo que lo mas rapido es hacer un shield para arduino en vez de desarrollar una placa completa, la razon, no quiero soldar SMD, no se y tardaria, y el chip conversor FTDI lo es, usare alguno de los arduino originales que tengo por casa.
El shield controla 4 motores paso a paso bipolares (ULN2004), uno mueve la camara y los otros tres mueven la muestra en 3 ejes. Un 2n222 enciende o apaga la iluminacion y dos finales de carril limitan el movimiento del eje de la camara.

Dejo los archivos en Eagle del shield, aqui el brd y aqui el sch, aqui el pdf en A4.
Aqui el codigo arduino y aqui el codigo C# para VisualStudio2012. ( en cuanto los termine los subo )


domingo, 6 de julio de 2014

Laser trigger con arduino

Me surgio la necesidad de una barrera que disparara la camara para tomar unas fotos. Las fotos aun no estan hechas, pero la barrera si.

Dejo codigo y pcb

NOTA: para la realizacion de este proyecto estoy usando unas muestras de ATMEL. En particular el ATME328-pu. Al programarlo me dice que no reconoce el chip y da error. Hay un archivo llamado `avrdude.conf` en uno de los subdirectorios del directorio arduino, la solucion es buscar la linea  " signature       = 0x1e 0x95 0x0F; " car y cambiar el 0F por 14, salvar y reiniciar arduino.

Esta seria la segunda version, hace unos dias
Aqui la calculadora de resistencias  para el LM317 que uso para los 3v del laser.

miércoles, 2 de julio de 2014

Carril macro con arduino III


De compra semanal me he cruzado con un controlador clonico de ps2 y creo que sera mejor para el control del carril pero al tenerlo en la mano me he dado cuenta de las posibilidades, por esto creo que finalizare la version 1 del carril cuando implemente las siguientes mejoras.

  • encendido de la iluminacion por mando 
  • posicionado por mando de la camara, y los otros 3 ejes para la muestra  ( arriba / abajo, izquierda/derecha, delante/detras y giro horizontal)
Al tener el mando he visto que seria genial poder controlar la camara totalmente y visualizar los datos del carril junto a la imagen tomada en liveview, y los parametros de la camara en la misma pantalla y todo controlado por el mando de playstation que al terminar me lo mande al helicon focus, ouh yeah! me ahorraria mucho tiempo en el preparado de cada foto, facilitandome tomar fotos que de otra manera no podria, asi que creo mudare el cerebro a un programa en C# para windows y dejare el arduino para el control de motores sensores y demas. Aqui mas info.


El cableado seria el siguiente:


La libreria aqui
Mas informacion aqui

y mas tomas con el hardware y software actuales:


viernes, 27 de junio de 2014

Carril macro con arduino II

Ya implemente el disparador IR al rail y al codigo del arduino, asi que puedo disparar muchas camaras canon en este carril, sin necesidad del cable, de momento probado en los modelos 400D y 7D.
El unico problema con el disparador IR seria en camaras sin modo liveview, lo normal en macrofotografia es bloquear el espejo antes de disparar para evitar esa vibracion al disparar, el disparo con IR no permite usar esta funcion de la camara, pero usandola en modo livewiev ya la activamos a la par que vemos lo que disparamos.

Empezando a disparar con el rail me he dado cuenta de algunos aspectos del diseño que son mejorables. Finalmente voy a poner un par de encoder opticos para poder posicionar el carril donde quiera, no conte al diseñar los largos diferentes de cada lente, extension, etc.
Tambien quiero incluir una extension a la pcb para poder mover 3 motores paso a paso mas para posicionar en los tres ejes la muestra, tambien quiero poder controlar por MOSFET desde arduino el encendido de la iluminacion.

Haciendo las primeras pruebas me he dado cuenta que es un poco incomodo estar doblado colocando la muestra, posicionando el carril, etc. Asi que al rato me acerco por un mando de playstation y se lo implemento al cacharro. Creo que voy a eliminar el potenciometro y el boton que ahora uso de entrada de datos y dejar solo el control.

link con informacion


Primeras fotos, realizadas a f4 en la lente principal (90mm 1:1 tamron dimacro) y f1.8 invertida la segunda lente, un 50mm canon, en una 7D en modo liveview y silent mode1 para evitar vibracion en lo posible.

pila montada en photoshop

pila montana en zerene stacker

pila montada con helicon focus

Como se ve me falta mucho por aprender aun, pero el rail consigue una calidad mas que aceptable. En proximas pruebas voy a usar helicon focus, es muy rapido y facil de usar.










martes, 24 de junio de 2014

Carril macro con arduino

Hola

Quiero tambien compartir un stacking rail con arduino tambien, en principio para camaras canon.

Tanto el codigo como los archivos eagle iran cambiando segun avance el proyecto, aunque funcional solo es un prototipo de prueba. Por ejemplo estan son las mejoras que tengo pendientesy alguna otra que ahora se me va.

  • disparador IR en vez de por cable, seria para todas las camaras canon y nos ahorramos el opto disparador.
  • dos encoder, uno para apuntamiento manual mecanico, y el otro para sensar la posicion de la camara, no se si son caros, pero tengo muchos de despiece de impresoras.
  • un mosfet que controle la iluminacion DC.








La presencia visual es horrible lo se, pero es una maquina mucho mas precisa de lo que pense en un principio, cuando termine la CNC hare la version `final`.

Los archivos en eagle .brd .sch .pdf 
y el codigo en arduino 



Helicoptero y l298

Hola a todos.

Por otros proyectos tengo detenido el quadcopter, pero tengo un helicoptero con motores DC de escobillas de aproximadamente medio metro de largo que va a suplir su carencia. El receptor y el mando con el emisor son algo chafas, 27mhz 2 canales. Perfecto para probar el arducopter o algun otro proyecto open source de control de vuelo.

Lo primero es controlar los motores que tengo, para eso volvere a usar los L298. en las pruebas en protoboard se calientan bastante, creo usare el chasis como disipador y espero sea suficiente para mantenerlos durante 10 minutos de vuelo a temperatura adecuada ( no tengo multimetro decente para medir el consumo de los motores, me toca esperar sean adecuados ). pense en ponerle motores brushless y ESC pero si hago eso ya directamente me monto el quadcopter, asi que motores con escobillas.







Estos son los archivos eagle de la pcb.




jueves, 15 de agosto de 2013

Arduino 1.0.5 y la libreria ServoTimer2.h

Con la placa arduino ya funcional, y esperando los esc y motores, solo me queda seguir con el cerebro de la bestia, asi que me he puesto a instalar la libreria ServoTimer2.h en arduino. Para sorpresa mia no es compatible con el nuevo entorno arduino 1.0 y he tenido que buscar una version modificada que si lo sea.

La libreria: ServoTimer2



Agradecimientos a codigo



miércoles, 14 de agosto de 2013

Arduino Stand-Alone II (usbtinyisp)

Podria sacar de la pcb Quadcopter_V0 el chip Atmega328 cada vez que quisiera modificar la programacion, pero seria mucho estres mecanico innecesario. Mi placa ni tiene ni tendra usb, asi que le he habilitado a la placa patillaje para ISP.

MISO   1------- 2 VCC          miso pin18,vcc pin7
SCK     3------- 4 MOSI        sck pin19, mosi pin17
RESET 5------- 6 GND          reset pin1, gnd pin8


martes, 13 de agosto de 2013

Arduino Stand-Alone

Como en cada proyecto, la idea de construir algo es, que en el camino pueda aprender todo lo posible. Por eso estoy diseñando una placa arduino especifica para Quadcoper_V0, seria mucho mas rapido y facil comprar algunos de los sistemas, pero prefiero orientar también este proyecto hacia el aprendizaje  .

El circuito en protoboard (el led rgb indicador de corriente es lo mas xD  )


De momento es solo una placa arduino con convertidor de voltaje a 5v, led indicador de alimentacion y led en pin13. Dejo la pcb y diagramas en Eagle, tambien un pdf para imprimir.




Agradecimientos a http://txapuzas.blogspot.mx/


miércoles, 7 de agosto de 2013

MMA7260 y Arduino

Tengo un acelerometro de 3 ejes MMA7260 y  estoy experimentando con el, pero creo que no es lo apropiado para estabilizar a Quadcopter V0. Estoy buscando un Wii motion plus a buen precio para quitarle los giroscopios y usar estos en el proyecto.

El codigo inicial  del acelerometro mma7260 fue sacado de aqui:

Y aqui la primera modificacion
#define DEBUGMODE
#define _360div2xPI     57.29577951
#define _5000div1023    4.887585533
#define MMA7260_RESOLUTION      800     //0.8 v/g -> resolucion de 1.5g -> 800mV/g
#define MMA7260_VOLTAGE         3300.0; //mv voltage al que está conectado el acelerómetro
const float ZOUT1G = 2450;   // mv Voltage en Zout a 1G
const float ZOUT0G = 1650;   // mv Voltage en Zout a 1G
#define MMA7260_ZOUT_1G 850   // mv Voltage en Zout a 1G
const float XOUT1G = 2450;   // mv Voltage en Zout a 1G
const float XOUT0G = 1650;   // mv Voltage en Zout a 1G
const float YOUT1G = 2450;   // mv Voltage en Zout a 1G
const float YOUT0G = 1650;   // mv Voltage en Zout a 1G
#define NADJ  50        // Número de lecturas para calcular el error
// Entradas analógicas donde van los sensores
#define XAXIS_PORT  0
#define YAXIS_PORT  1
#define ZAXIS_PORT  2
// Salida digital del led de la placa
#define LEDPIN_PORT  13
float XError,YError,ZError;
float z,x,y;
float AccelAdjust(int axis)
{
  float acc = 0;
  for (int j=0;j < NADJ;j++)
  {
    float lectura=analogRead(axis);
    acc = acc + (lectura*_5000div1023);
    delay(11); //número primo para evitar ciclos de lectura proporcionales
  }
  return acc/NADJ;
}
void setup()
{
  Serial.begin(9600); // 9600 bps
  pinMode(XAXIS_PORT,INPUT);
  pinMode(YAXIS_PORT,INPUT);
  pinMode(ZAXIS_PORT,INPUT);
  pinMode(LEDPIN_PORT, OUTPUT);
  digitalWrite(LEDPIN_PORT, HIGH);
  XError =  AccelAdjust(XAXIS_PORT);
  YError =  AccelAdjust(YAXIS_PORT);
  ZError =  AccelAdjust(ZAXIS_PORT);
  ZError = ZError - MMA7260_ZOUT_1G;
  digitalWrite(LEDPIN_PORT, LOW);
#ifdef DEBUGMODE
  Serial.println("Ajustado acelerometro eje X");
  Serial.print("Error de X= ");
  Serial.println(XError);
  Serial.println("Ajustado acelerometro eje Y");
  Serial.print("Error de Y= ");
  Serial.println(YError);
  Serial.println("Ajustado acelerometro eje Z");
  Serial.print("Error de Z= ");
  Serial.println(ZError);
#endif
}
void loop()
{
  x=analogRead(XAXIS_PORT);
  y=analogRead(YAXIS_PORT);
  z=analogRead(ZAXIS_PORT);
  unsigned long tt = micros();
  float aax = ((x*_5000div1023)-XError)/MMA7260_RESOLUTION;
  float aay = ((y*_5000div1023)-YError)/MMA7260_RESOLUTION;
  float aaz = ((z*_5000div1023)-ZError)/MMA7260_RESOLUTION;
  float rho = atan(aax/sqrt((aay*aay)+(aaz*aaz)))*_360div2xPI;
  float phi = atan(aay/sqrt((aax*aax)+(aaz*aaz)))*_360div2xPI;
  float theta = atan(sqrt((aay*aay)+(aax*aax))/aaz)*_360div2xPI;
  tt = micros()-tt;
#ifdef DEBUGMODE
  /* Serial.print(" x");
  Serial.print(aax);
  Serial.print(" y ");
  Serial.print(aay);
  Serial.print(" z");        
  Serial.print(aaz);
  Serial.println();
  Serial.println(); */
  Serial.print("X  ");
  Serial.print(rho);
  Serial.print("   Y  ");
  Serial.print(phi);
  Serial.print("   Z  ");
  Serial.print(theta);
  Serial.println();
// Serial.print("mS");
// Serial.print(tt);
#endif
  delay(1000);
}


martes, 6 de agosto de 2013

Quadcopter con arduino

Estas ultimas semanas he estado recopilando información que me ayude en el diseño de un quadcoter, aqui ire compartiendo lo que considere interesante.

Links:



Salu2

jueves, 25 de agosto de 2011

Basubot VI

Buscando la forma de darle alguna forma de sensado de distancia a Basubot, me he encontrado con la forma de usar el A2610 de un ratón óptico que tenia en desuso, me he encontrado con esto . La libreria que se ofrece en el link anterior, permite obtener coordenadas x e y, asi como la velocidad. Enredando un poco he conseguido modificar la libreria para sacar algun valor de imagen, esto promete.




Como dije el motor es muy potente, asi que para controlar la traccion por software he añadido al montaje un sensor hall procedente de un ventilador de pc, de paso me sirve para medir velocidad, aceleracion y distancia recorrida. 


Y así va de momento, programando por no llorar ... que llegue ya el cargador !! xD
Lo que si llego fue el programador TinyUSB, monte un arduino casero como ya dije, y puse el arduino duelaminove sin micro como programador de sketch, alimentación y cable I/O con el pc.

lunes, 22 de agosto de 2011

Basubot V

Ya llego el motor 55A brushless pedido a china, y un par de baterías 3s 3000mah 35C, no me he podido resistir y se lo he montado a Basubot. Solo tengo por aquí un ESC 80A de avión, y ese le he montado mientras termino el hecho por mi.
Me he quedado muy pero que muy corto con el ratio de reducción de la transmisión, hay que tocar el mando de la emisora con mucho cuidado, solo los primeros mm dan una velocidad controlable, lo cual mas que un problema es una alegría, al ir todo esto controlado por arduino y un acelerometro, espero poder programarlo para que controle a velocidades que yo no puedo. Con el tiempo añadiré mas sensores, de momento mejor por partes.
Otro "pequeño percance" mas a la lista, como no tengo cargador lipo, la prueba la hice con una bateria li.ion 12v 1000 mah, fueron 5 minutos alucinantes, pero a sido demasiada demanda de corriente y como bien preví, se ha debido comunicar. En el patio en una cacerola la tengo calentita calentita ...

La idea final es hacer un modulo lo mas compacto posible, así que el arduino es casero. Atmega328p-pu  y acelerometro mma7260. De momento en bread board.


Es un vampiro de energía, pero también  un potentisimo motor. ( si, has visto bien, esta sujeto con epoxy xD )

Y asi va el pequeñin.

Siento no poder poner vídeo, cuando llegue el cargador lipo nuevo subiré.

domingo, 7 de agosto de 2011

Sustitución de celda en lipo 3s

Dos baterías lipo compradas en ebay a un vendedor cuyo mail ya no existe, las dos rotas a la primera carga. No se si el cargador Imax B3 comprado al mismo vendedor rompio las baterias, o las baterias rompieron el cargador, pero el recuento de perdidas es considerable, dos lipo 3s a la basura y un cargador roto. 
También esta el riesgo de incendio si no hubiera estado en casa vigilando como cargan, ya que me parecio asombroso lo rapido que se gastaron, llegando a 3.2v por celda en un par de minutos con una carga de maximo 4A, y las vigile. Y justo, la primera comienza a incharse, la saco al patio en un cubo metalico por si sale ardiendo ( ahi sigue ) y pongo a cargar la otra, el cargador hace chispas ... mido con voltimetro la segunda batería comprada al mismo vendedor y tambien tiene una celda rota. 
Después de intentar mandarle un mail al vendedor pidiendo el reembolso me he puesto a hacer una bateria 3s de las 4 celdas que quedan sanas y a salido esto:





Primero quitar la envoltura de plástico con cuidado de no perforar las celdas.

Con cuidado de no hacer demasiada fuerza mecánica, separamos la celda dañada ( la hinchada en este caso, la celda rota de la otra batería aunque da un voltaje de 1.7v no muestra síntoma visible de deterioro).


La celda mas dañada, separada del conjunto con el soldador y un poco de flux para fundir antes el estaño, de cara a no calentar de mas, y por que no decirlo, con cierto acongoje durante la operación. Si haces esto cuando la desmontes llévala a un centro de recogida de pilas lo antes posible y no la dejes sin supervision en tu casa, y si la dejas sola mejor en una caja ignífuga de metal, si la celda esta hinchada es una tanto % elevado de que salga ardiendo, y esta reacción en particular de las baterías de polímero de litio es muy bestia, si no he leído mal arden a 800ºc.

Una celda en buen estado procedente de la otra batería para sustituir la estropeada.

Comprobamos que la celda no este por debajo de 3v así como su polaridad.

Es muy importante no cambiar los polos, aburrete de mirar con el voltimetro, si te cuelas al unir las celdas chispazo enorme y riesgo de explosión de estas, rotura asegurada de la batería bla bla. Ten cuidado de no hacer corto con los pinchos del voltimetro también.

Soldamos la "nueva" celda al pack 3s procurando calentarlo lo menos posible, mejor con flux.

Medicion correcta del conjunto 3s (después de agotar la batería li-ion de 10 celdas 1200mA la batería  reparada da 12.23v, todo esto moviendo a basubot)

Un pelin de cinta kapton en la zona de soldado.

Y ahora tenemos una batería de la que no me fió por la basura de calidad que tiene de fabrica, por vieja o por lo que sea. Ahora la estoy usando como alimentación del arduino, receptor y servo de basubot. Si alguien tiene una buena batería con una celda rota por un exceso este texto le puede servir, no tiene mucha complicación, pero vemos antes de abrir como es una batería de 3 celdas de polímero de litio sin el embalaje y como están unidas sus celdas. 
No recomiendo usar lipo  de baja calidad como esta para nada, y si se hace no cargar sin supervision, estar muy atento a que no se infle ninguna celda, no provocar cortos, no descargar por debajo de 3.2v y usar cargadores de calidad de bajo C de carga con balanceador de voltaje en celdas, también mejor no descargar a demasiada velocidad. Yo he terminado usándola como alimentación del arduino, receptor y servo, dada la poca descarga demandada  para esto no creo me de mas problemas después de la reparación, siempre se rompe el miembro mas débil de un conjunto, y en mi caso ya se rompieron esas celdas, lo mismo mi lógica hasta funciona xD.

viernes, 5 de agosto de 2011

Basubot IV - parte II xD

Ya se acerca el día de estrellar el robot contra un bordillo por cualquier motivo lógico, pero solo una vez sucedido eso si ...
Haciendo honor a su nombre, la transmisión de Basubot es parte del coche de nitro metano (eje y corona dentada) pero sin el sistema de frenado ni los rodamientos ni demás del motor de combustión. Y de rodamientos he usado un par de alta velocidad montados sobre la parte con imán de un motor de disco duro, de momento solo con algo de epoxy, en la imagen se ve mejor.

jueves, 4 de agosto de 2011

Basubot IV

Ya va tomando forma. Lleno de mugre mires donde mires, pero ya no desmotiva al mirarlo ... dirección funcionando y control de velocidad funcionando. He tenido algún problema con la resistencia de sensado y de momento tengo los pines SENSE del L298 conectados a GND. Como se ve he terminado pegando la protoboad al disipador de basubot.


Uno de los motores 12v reciclados. Como se ve en el video este no esta conectado a transmisión, y aunque pequeña, me tocara ponerle una reductora. De momento para pruebas un trozo de cinta aislante y a mirar solo de reojo por si sale volando xD






Como prefiero reducir la cantidad de PCBs a usar de momento todo va en protoboard, este proyecto realmente es mi forma de aprender sobre motores CC, formas de control, etc. y así aunque algo lió seguir las pistas, es mucho mas rápido que una placa nueva cada metida de pata, y mas económico...



domingo, 31 de julio de 2011

Basubot III

De entre varias elecciones posibles la que lleva al camino mas simple suele ser la correcta, dijo no se quien alguna vez en algún sitio, creo ...xD

Esta "ida de pelota" viene por lo siguiente: Tengo la costumbre de coger un problema complicado que se me presente y quiera o no lo intento descomponer en varios mas simples fáciles de realizar. Esto esta guay si tu vida es la serie Mc Giver, a mi me trae bastantes "percances" para regocijo y escarnio mio. Pero en este caso, el tecnológico, a sido curioso. Por un lado me dedique a interpretar las señales ptm o algo así ( pendiente de revisión ), estas las genera un receptor Futaba de dos canales, reciclado del coche RC de nitro metano que uso de base para basubot. Según comande la "emisora" también Futaba, modelo T2ER. Con algo de código interpreto las señales recibidas y comando el servo de dirección, esto va guay me digo al ver los resultados, todo gira como debe.

Después me pongo a desarrollar un proto en base l298 y arduino que me maneje un motor 12V 2A, por encima de 20.000khz, frecuencia no audible, que no me genere un molesto pitido al bajar el duty cicle del 100%.  Y tambien guay, tan guay que incluso añado una resistencia de sensado de consumo al circuito y consigo sensar la corriente que pasa por el motor y con esto hago un sensor de torque y un limitador por software de la corriente que pasa po el l298 de cara a no quemarlo, guay me digo de nuevo, control de velocidad, dirección y torque aceptables.

Pero al juntar los dos trozos de codigo en uno solo, me doy cuenta que al toquetear los timer del atmega328p-pu la libreria servotimer2.h del arduino no va bien y el servo se me pira a derechas como los soldados de Franco, con un pitido muy molesto, justo lo que estaba evitando al cambiar la frecuencia del timer, en teoria (mi teoria ...) solo en los pines 11 y 3, con el codigo siguiente:

void setup() {
Serial.begin(9600);
pinMode(servoDosIn, INPUT);
byte mask = B11111000;
TCCR2B &= mask;
TCCR2B |= (0<<CS22) | (0<<CS21) | (1<<CS20);
}



Después de mucho pensar, joe ... es tema de frecuencia ... y si me salto la libreria timer2 y uso un analog ... pos no ... y si con un 555 genero una frecuencia secundaria de la que use el arduino?? ni lo probé por no tener aqui los componentes necesarios, pero me sigue pareciendo una buena idea. Modular los datos mandados al servo de forma aleatoria en base a lo recibido de cara a por obra y gracia de superman que esta en los cielos, controlar el servo de dirección, también fallido. Así que después de un rato largo, pero largo largo largo largo, he decidido no usar el arduino como interface I/O entre el receptor y el servo de dirección, así de simple ... asi que libero al arduino de esta carga de proceso, y yo me libero de generar pwm a dos frecuencias diferentes en un arduino. La otra idea era hacer un arduino dual core, pero esto a parte de una flipada, es otra historia.


Moraleja: "Fijate un objetivo distinto y tomate un vino tinto" que dijo Estopa

pierna IV ( el "retolno")

Ya recibí los l298, y fet varios pedidos a china. Asi que diseñe 3 pcb en eagle para el l298, pero metí la pata, para evitar vías puse pistas entre los contactos del l298, y no en una de las pcb, si no en las 3 ... ( yo cuando meto la pata, la meto bien xD ) y ahora tengo 3 pcb con fallos varios ... y hasta el lunes no hay mas placas de cobre. Pero algo he podido hacer, en la protoboard he montado un l298, cuatro diodos, una resistencia 10k 1/4w y una resistencia variable 10k. Con esto muevo el motor 12v cc 2A en los dos sentidos, con la resistencia variable vario la velocidad (pwm), y una resistencia 10k 1/4w para sensado de corriente.


Como se ve el código es muy sencillito. pin pwm 11 es pwm, pines digitales 7 y 8 controlan el sentido del motor, pin analógico 0 recoge el valor del potencio metro y se remapea a entre 0 y 254 y se le da a pin pwm 11, y pin analógico 1 recoge datos de la resistencia de sensado, esta me da un valor proporcional al consumo.

El siguiente paso es acoplarle el encoder óptico al motor, y con este obtener datos precisos de posición y velocidad,  con estos datos ya conocidos compararlos con la velocidad y posición deseadas, así podre añadir o quitar duty cicle por software para mantener una velocidad al margen de la carga del motor. La resistencia de sensado me permitirá poner un limite en el que dejar de subir duty cicle, de cara a no quemar el l298, ademas me sirve de sensor de torque.    




(no recomiendo usar este tipo de cable tan fino, si fuerzas demasiada corriente a pasar por ellos lo mas facil es que se fundan, pero para mover la reductora y frenar algo el eje con un destornillador valen, si tienes amperimetro todo esto es mucho mas facil ...)

sábado, 23 de julio de 2011

carril macro (II)

De los componentes comprados a china me han llegado todos menos los l298 y l293 ... asi que tren al centro a comprarlo al doble. La mayoria de componentes los he desoldado varias veces, por que aunque el cicuito es el mismo, ahora si he protegido y asegurado los contactos para evitar mas cortos, la pcb tiene una pinta horrible, pero es mi primera maquina y funciona ... xD )
Para evitarme tanto cable y liberar el arduino mega para otros fines pedi unos atmega328p-pu+cristal+condensador, por aqui tenia algun, pero eso otro dia que seguro la lio y quiero hacer mas fotos.




y estas son las fotos que van saliendo