Hay varias formas de obtener más entradas y salidas, con diferentes implicaciones. Y depende de los tipos de sensores y de las bibliotecas o fragmentos de código que desee utilizar.
Lo primero que debe hacer es enumerar los sensores que desea, junto con el tipo de interfaz que utiliza cada uno. ; Yo uso una hoja de cálculo.
Por ejemplo, un sensor de llama podría usar una sola salida digital (yendo a una entrada digital en el Arduino), con el umbral establecido con una olla en el módulo. O podría emitir una señal analógica que va a una entrada analógica en el Arduino, lo que permite que el código detecte la intensidad o establezca umbrales variables sin necesidad de mover la olla. Cada enfoque tiene implicaciones diferentes.
Hay otras interfaces de sensor y actuador además de estas dos (digital simple y analógica). Algunos dan un valor variable (como analógico) pero basado en el tiempo de un pulso en una señal digital; así es como funcionan los telémetros ultrasónicos más económicos. Y, por supuesto, hay sensores que usan estándar (I2C o SPI) o propietario (protocolo de un cable, o los sensores de humedad DHT-xx temp &).
Asimismo, algunas salidas necesitarán PWM u otra señal, más allá de un simple encendido / apagado.
Las entradas o salidas digitales extra simples se pueden obtener con bastante facilidad con extensores I2C o con registros de desplazamiento. Por ejemplo, verificar un sensor de llama de salida digital o encender una luz.
Se pueden realizar entradas analógicas adicionales con multiplexación analógica (como un interruptor electrónico), o mediante módulos ADC externos usando I2C o SPI.
Si se requiere tiempo, hay problemas potenciales mayores. A menudo, usaría una biblioteca para manejar tales cosas.
Bibliotecas. La mayoría de las bibliotecas de sensores y actuadores se escribirán para usar pines de entrada y salida directa en Arduino. Es posible que pueda pasar un número de PIN al inicializar, pero si está usando un registro de desplazamiento o un extensor, no hay forma de decirle a la biblioteca cómo usar su extensión personalizada. En este caso, tendrá que rodar nuestro propio código sin usar la biblioteca, o hacer una versión modificada de la biblioteca que haga E / S a través de su hardware de extensión de hardware.
Funciones especiales de los pines. Un segundo problema son las funciones especiales de los pines; si la biblioteca o el fragmento de código que desea usar espera usar una característica especial de un pin (como una interrupción de pin o una captura de entrada de temporizador), es posible que no esté disponible en su hardware de extensión o que sea un trabajo adicional de manejar. Por ejemplo, algunos extensores pueden señalar un pin de interrupción en el Arduino cuando cambia una de sus entradas, pero tendrá que escribir su propio controlador de interrupciones para detectarlo y reemplazar la funcionalidad de la interrupción directa del pin.
Tiempo. Y un tercer problema es que a veces es difícil administrar un tiempo ajustado a través del hardware de extensión.
La mayoría de estos se pueden resolver con el esfuerzo adecuado, a veces fácil ya veces no. Revise su lista de sensores y actuadores; Determine cuáles se pueden conectar más fácilmente al hardware de extensión (como un registro de desplazamiento) y cuáles deben conectarse directamente al Arduino para simplificar o mejorar el rendimiento. Podría tener suerte.
Recomendaciones
1) Si puede manejar sensores o actuadores sofisticados con pines directos, y cubrir los simples con registros de desplazamiento o chips extensores I2C, esa es una opción viable. Por ejemplo, si su código quiere verificar ocasionalmente si se ha detectado una llama (versión digital), o quiere encender un motor, no es tan difícil pasar por un registro de cambio en lugar de hacer un acceso directo al pin.
2) Si va más allá de eso y se queda sin pines para cosas que son mucho más fáciles de manejar cuando se conectan directamente, le sugiero que vaya a un Mega o Mega2560, tiene más pines digitales y más entradas analógicas y más PWM salidas. La mayoría (aunque no todas) las bibliotecas se adaptarán simplemente cambiando los números de pin. Es mucho más fácil que reescribir bibliotecas para usar pines analógicos y digitales externos.