Saludos,
“That is not dead which
can eternal lie, And with strange aeons even death may die”.
No hoy no vengo a haceros entrega de una nueva aventura de
la llamada de Cthulhu, aunque estaría bien. Hoy trato de arrancar nuevamente el
foro tras un periodo de silencio, mucho trabajo principalmente.
Hoy vengo a presentaros un “AnalogHub I2C” basado en el PIC16f1503, no es nada nuevo ya hice
algo similar con la entrada de la Pi Zero.
Pero en esta ocasión es una plaquita más ligera y que se puede añadir a
cualquier proyecto uses, Arduino, raspberry pi, teensy, Intel edison , etc.
|
|
Imagen de una placa sin soldar y otra hecha.
|
Las placas las he pedido a Seeedstudio,
realizan un trabajo muy fino a un precio muy competitivo. Entre otras cosas funcionan
tan bien como OshPark, simplemente les subes
el pcb a su pagina y te realizan un presupuesto.
Que tienen estas placas:
·
Puerto i2c
·
Un led controlable.
·
5 entradas Analógicas
·
2 controladores de servo
Evidentemente la funcionalidad de los puertos se puede
modificar si modificas el programa del pic. Como funciona, la placa puede dar
el valor de la analógica que se le pida, en una resolución de 16 bits, de forma
automática se obtiene 5 muestras y se da la media.
·
- Modo lectura Master escribe al AnalogHub un byte :
o
0x30 à El master ha de leer 2
bytes de la entrada Analogica 0
o
0x31 à El master ha de leer 2
bytes de la entrada Analogica 1
o
0x32 à El master ha de leer 2
bytes de la entrada Analogica 2
o
0x33 à El master ha de leer 2
bytes de la entrada Analogica 3
o
0x34 à El master ha de leer 2
bytes de la entrada Analogica 4
o
0x35 à El master ha de leer 2
bytes de la entrada Analogica 5
o
0x36 à registro de control,
el master lee 2 bytes que son ‘1234’
Ejemplo de Arduino
Wire.beginTransmission(address); // Address of AnalogHub
Wire.write(op); // option
dato=i2cReadbyte(address);
dato|=i2cReadbyte(address)<<8;
Wire.endTransmission();
delay(15);
|
En modo control he implementado un control de servos en
continua, que nos permitía realizar un simple robot con ruedas, una vez enviada
la instrucción los motores ruedan un tiempo determinado y se paran hasta
recibir su siguiente instrucción, de normal son 100 ms.
·
- Modo control del Master al AnalogHub:
o
Master escribe un byte
§
0x01 à El led se enciende
§
0x02 à El led se apaga
o
Master escribe 2 bytes
§
Modo robot con servomotores en continua
·
0x20 + [0..50]à forward
·
0x21 + [0..50]à backward
·
0x22 + [0..50]à turn right
·
0x23 + [0..50]à turn left
·
0x24 à stop
§
Modo Servos
·
0x26 + [0..180] à control servo 1
·
0x27 + [0..180] à control servo 2
o
Master escribe 3 bytes
§
0x25 + [0..255] + [0..255] à
Parte baja y parte alta del delay entre motores en modo robot, de normal está
en 100 ms
§
0x69 + [0..255] +[0..255] à
Parte baja y parte alta de la media de muestreo para las lecturas analógicas. De
normal está en 5.
Ejemplo Arduino
Wire.beginTransmission(address); // Address of AnalogHub
Wire.write(op); //opcion
Wire.write(data);// data is
uint16_t
Wire.write(data>>8);
Wire.endTransmission();
|
Lo único que hay que considerar es los tiempos entre las
instrucciones de control, si le enviamos dos órdenes sin dejar el tiempo suficiente
para que se completen la segunda orden posiblemente no llegue. Si el tiempo
medio de instrucción de control de los motores es 100ms el tiempo mínimo ha de
ser 100ms entre instrucción. Ajustando mucho.
|
Conexiones
|
La alimentación puede ser a 3,3 o 5V, en función de los
sensores que necesitéis conectar. Para la alimentación de los servos/motores se
recomienda una alimentación a parte de la tensión de control, las pruebas
realizadas con servomotores de dfrobot no fue necesaria alimentación extra, pero
tampoco tenía puesto ningún sensor.
Conclusión
El AnalogHub esta pensado para deslocalizar funciones básicas
como leer sensores y controlar motores, bien porque el master no posea estas
funciones o para reducir el nivel de código en este sentido. No deja de ser un
prototipo y se hecha en falta un segundo puerto I2c para poder conectar varios
en cascada e la inclusión de un puerto extra para la alimentación de los motores.
Pero abre la puerta a desarrollar robots modulares, que sean plug and play para
el master.
Anakleto