Arduino: ¿Cómo se extienden los pines para acomodar múltiples sensores?

Esta es una pregunta fundamental sobre el sistema Arduino. He estado tratando de encontrar respuestas todo el día, pero sigo obteniendo respuestas que no están relacionadas con Arduino o están completamente fuera del tema.

Estoy construyendo un robot que consume la mayoría de los pines del Arduino para los módulos del motor y del sensor IR. El robot funciona muy bien (Robot Starter Kit de OSEPP). Ahora quiero continuar agregando varios sensores más y un módulo de salida LED, pero me he quedado sin pines. He visto tableros de prototipos y escudos que parecen extender el número de pines, y he leído varios artículos sobre el bus de direcciones que ayudan a identificar de forma única todos los componentes, pero estoy perdido en el paso uno...

¿Cómo se abordan varios conectores o pines de entrada/salida en las placas de creación de prototipos?

Perdón por la pregunta de novato, pero como con toda la tecnología, los primeros pasos más simples son siempre los menos documentados. Cualquier enlace a excelentes tutoriales sería muy apreciado.

Dependiendo de cómo configure el motor, es posible que pueda reducir el número de pines a dos. parada/arranque, marcha atrás/adelante usando puertas lógicas. Esto también puede ayudar a evitar que su motor esté en estados no deseados.
Intente buscar expansores I2C IO. También podría obtener un Arduino con más IO.
@Daniel -buen punto. Los módulos basados ​​en el chip PCF8254 están fácilmente disponibles, son baratos y puede colgar hasta 8 de ellos en un solo bus I2C, lo cual es útil.

Respuestas (3)

No existe una forma real de expandir los pines, pero existen técnicas que puede usar para intercambiar potencia de procesamiento y datos para pines más efectivos.

Usando solo 3 pines y 1 pin de selección de chip (selección de esclavo) por dispositivo, puede hablar con muchos dispositivos a través de SPI (interfaz periférica en serie). SPI con 3 esclavos] 1

Si los dispositivos con los que desea hablar no son compatibles con SPI, puede usar otros circuitos integrados, como un registro de desplazamiento que se comunica a través de SPI y le brinda una E/S digital más efectiva.Registros de desplazamiento encadenados

La imagen de arriba muestra un ejemplo de dos registros de desplazamiento de 8 bits conectados en cadena. Usando 3 pines del microcontrolador, puede controlar 16 LED.

Puede multiplicar este efecto aún más usando una técnica llamada multiplexación. En lugar de utilizar las salidas del registro de desplazamiento directamente, puede adjuntar componentes a una cuadrícula y "seleccionar" una columna y una fila.

Rejilla multiplexada 8x8

En este caso, un arduino que usa 3 pines puede controlar dos salidas de registro de desplazamiento 16 que pueden controlar 64 dispositivos. Básicamente, así es como funciona un teclado.

¿Por qué dejaste de multiplexar? El siguiente paso es Charlieplexing .

Primero sacrifica algunos pines para hablar con un expansor de E/S. por ejemplo, usa los dos pines I2C para conectarse a un MC23017. Hay muchos tutoriales sobre cómo hacerlo, incluido el software. Eso te da 16 pines, así que ahora tienes 14 pines más que antes. De hecho puedes conectar hasta 8 de esos dándote 128 pines.

Pero a un costo: necesita escribir algún software I2C para controlar esos pines, leerlos y escribirlos. Eso será mucho más lento que los otros pines de Arduino. Por lo tanto, usa esos pines MCP3017 para señales 'más lentas'.

El MCP3017 también tiene un pin de interrupción, pero para usarlo, debe sacrificar un tercer pin de E / S de su Arduino. El software para eso es nuevamente un poco complejo. Sin embargo, le permite 'responder' a eventos en las entradas del MCP3017.

El truco es simplemente 'jugar' solo con el expansor de E/S, hasta que comprenda cómo funciona y tenga algún código para controlarlo. Luego agréguelo a su hardware y software de robótica.

Si tiene un conjunto de sensores que no necesitan estar funcionando al mismo tiempo (o todo el tiempo), puede usar un multiplexor para habilitarlos cuando sea necesario