Introducción

El módulo Nonthue M0 Main es el cerebro del sistema de módulos Nonthue. Está basado en un microcontrolador ARM Cortex M0 de 32 bits que trabaja a 48MHz para obtener gran velocidad y capacidad de procesamiento en tus proyectos. Pero el microcontrolador no se encuentra solo y le hemos incluído una memoria de 2Mb para poder programar en Circuitpython (entre otros usos posibles), un LED RGB (Neopixel) que puede formar hasta 16 millones de colores, un conector y su circuito cargador para alimentar el circuito con una batería Lipo de una celda, 2 drivers para que puedas conectar directamente 2 motores DC de hasta 6V y controlar su dirección y velocidad.
Nonthue M0 Main viene pre-programado con un firmware para poder programarse con Arduino y se puede reprogramar fácilmente para usarlo con Circuitpython.
Su tamaño es de 60x28mm y está diseñado para ser usado dentro de un bloque impreso en 3D para hacerlo compatible con los bloques de LEGO.
Los conectores de pines principales tienen una separación ajustada para que también puedas enchufar el módulo a una placa de prototipos (protoboard).
Además como este módulo es parte de un sistema, sus expansiones están pensadas para ser conectadas de forma modular para poder crear soluciones libres de cables.

Pinout

Nonthue M0 Main tiene muchísimos pines con diferentes funciones. Vamos a verlas:

Energía

  • RESET: este es el pin que conectado a GND producirá el reseteo del microcontrolador. Es la misma conexión del botón RESET.
  • 3.3V: Esta es la salida del regulador de 3,3V incorporado en el módulo. Se puede usar para alimentar algún elemento exterior pero hay que tener en cuenta que el regulador tiene un límite de capacidad de 800mA incluyendo el consumo del mismo módulo. Superar este límite de corriente podría dañar el módulo.
  • GND: Son los pines comunes que corresponden a la tierra o negativo de toda la electrónica.
  • AREF: Es la tensión de referencia analógica. Normalmente se usan los 3,3V del microcontrolador pero a través del firmware se puede modificar la tensión de este pin para mediciones con los pines analógicos. No se puede regular por encima de 3,3V.
  • VPOW: Es la tensión de entrada del módulo sin pasar por el regulador de 3,3V. Si el módulo está conectado por USB, esta tensión será la del USB y si está conectada la batería, será la tensión de la batería. Se puede alimentar el circuito a través de este pin pero la tensión de entrada no debe superar los 5,5V ya que puede dañar el circuito de cargador de la batería.
  • USB: Es el conector micro USB tipo B para alimentar y programar el módulo desde una computadora. Por este conector se alimentará el circuito. En caso de estar conectada la batería, esta se cargará con la alimentación del USB.
  • BATERÍA: Es el conector tipo JST de 2 pines y 2mm de separación donde se puede conectar una batería LiPo de 1 celda de 3,7V nominales. La batería está conectada a los pines VPOW para alimentar sensores, motores y el regulador de 3,3V que provee de energía al microcontrolador. Si se conecta al mismo tiempo el USB, un LED naranja incorporado se mantendrá encendido mientras se carga la batería. Al llegar a 4,2V el LED se apagará y la batería estará cargada. La tensión de la batería se puede monitorear desde el microcontrolador por el pin D9 o A7 gracias a un divisor de tensión integrado.

Leds

  • LED_BUILTIN: Es un LED rojo que se puede controlar de forma digital o por PWM por el pin D13. También se lo puede llamar por LED_BUILTIN en Circuitpython.
  • NEOPIXEL: Es un LED RGB que se puede controlar con la librería Neopixel por el pin D8 o A6. También se lo puede llamar por NEOPIXEL en Circuitpython.
  • 3.3V: Es un LED verde que está próximo al pin de 3.3V e indica que el regulador de esta tensión está funcionando y alimentando al microcontrolador.
  • CHARGE: Es un LED naranja que está junto al circuito cargador de la batería. Mientras la batería no está conectada este LED puede encenderse parcialmente o parpadear. Cuando la batería está conectada este LED se apagará. Si se conecta el USB, este LED se encenderá mientras la batería se este cargando. Cuando se cargue llegando a los 4,2V el LED se apagará.

Pines Digitales

  • D0: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D0 y en forma analógica como A10. Además es el pin RX (PIN_SERIAL1_RX desde Circuitpython) para usar una conexión Serial o UART por Hardware.
  • D1: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D1 y en forma analógica como A11. Además es el pin TX (PIN_SERIAL1_TX desde Circuitpython) para usar una conexión Serial o UART por Hardware.
  • D2: Es un pin de Entrada/Salida que funciona de forma digital como D2. Este pin esta conectado internamente al pin MISO de la memoria SPI Flash de 2Mb que se usa para Circuitpython.
  • D3 : Es un pin de Entrada/Salida que funciona de forma digital como D3. Este pin esta conectado internamente al pin SCK de la memoria SPI Flash de 2Mb que se usa para Circuitpython.
  • D4 : Es un pin de Entrada/Salida que funciona de forma digital como D4. Este pin esta conectado internamente al pin MOSI de la memoria SPI Flash de 2Mb que se usa para Circuitpython.
  • D5: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital o PWM como D5. Además se lo puede llamar como EN1 en Circuitpython para controlar uno de los drivers de motor.
  • D6: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital o PWM como D6. Además se lo puede llamar como PH1 en Circuitpython para controlar uno de los drivers de motor.
  • D7: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D7.
  • D8: Es un pin de Entrada/Salida que funciona de forma digital o PWM como D8 o en forma analógica como A6. Este pin esta conectado internamente al LED RGB Neopixel y se lo puede llamar por el nombre NEOPIXEL en Circuitpython.
  • D9: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital o PWM como D9 y en forma analógica como A7. Además este pin está conectado a un divisor de tensión que a su vez está conectado a la batería. Leyendo la entrada analógica de este pin, mientras la batería este conectada, podremos medir su tensión.
  • D10: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital o PWM como D10.
  • D11: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital o PWM como D11. Además se lo puede llamar como EN2 en Circuitpython para controlar uno de los drivers de motor.
  • D12: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital o PWM como D12. Además se lo puede llamar como PH2 en Circuitpython para controlar uno de los drivers de motor.
  • D13: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital o PWM como D13. Además se lo puede llamar como LED_BUILTIN en Circuitpython y está conectado a un LED rojo (junto al mismo pin) por lo que este LED se encenderá y apagará cada vez que usemos este pin como una salida.
  • D14: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D14 y en forma analógica como A0. Además este pin (se puede llamar como DAC0 en Circuitpython) tiene incorporado un DAC o Convertidor Digital-Analógico lo que le permite funcionar como una salida analógica real (a diferencia del PWM que genera pulsos).
  • D15: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital o PWM como D15 y en forma analógica como A1.
  • D16: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital o PWM como D16 y en forma analógica como A2. Además se lo puede llamar como SS en Circuitpython para funcionar como Chip Select en una conexión SPI.
  • D17: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D17 y en forma analógica como A3.
  • D18: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D18 y en forma analógica como A4.
  • D19: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D19 y en forma analógica como A5.
  • D26: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D26. Además se lo puede llamar como SDA en Circuitpython para ser usado en una conexión I²C.
  • D27: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D27. Además se lo puede llamar como SCL en Circuitpython para ser usado en una conexión I²C.
  • D28: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D28. Además se lo puede llamar como MISO en Circuitpython para ser usado en una conexión SPI.
  • D29: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D29. Además se lo puede llamar como MOSI en Circuitpython para ser usado en una conexión SPI.
  • D30: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D30. Además se lo puede llamar como SCK en Circuitpython para ser usado en una conexión SPI.
  • D31: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D31.
  • D32: Es un pin que se puede usar como Entrada/Salida. Se puede usar en forma digital como D32.

Pines Analógicos

  • A0: Es un pin que se puede usar como Entrada Analógica con el nombre A0, D14 o DAC0 (en Circuitpython) y el único pin que también se puede usar como Salida Analógica.
  • A1: Es un pin que se puede usar como Entrada Analógica con el nombre A1 o D15.
  • A2: Es un pin que se puede usar como Entrada Analógica con el nombre A2, D16 o SS (en Circuitpython).
  • A3: Es un pin que se puede usar como Entrada Analógica con el nombre A3 o D17.
  • A4: Es un pin que se puede usar como Entrada Analógica con el nombre A4 o D18.
  • A5: Es un pin que se puede usar como Entrada Analógica con el nombre A5 o D19.
  • A6: Es un pin que admite ser configurado como Entrada Analógica pero que se encuentra conectado internamente al LED RGB (Neopixel) y por ello solo se usa como Salida Digital.
  • A7: Es un pin que se puede usar como Entrada Analógica con el nombre A7 o D9. Al estar conectado mediante un divisor de tensión a la batería, se puede medir la tensión de esta desde un programa. Para otros usos como Entrada Analógica el divisor de tensión podría causar mediciones inesperadas.
  • A10: Es un pin que se puede usar como Entrada Analógica con el nombre A10, D0 o PIN_SERIAL1_RX (en Circuitpython).
  • A11: Es un pin que se puede usar como Entrada Analógica con el nombre A11, D1 o PIN_SERIAL1_TX (en Circuitpython).

Pines PWM

  • D5: Es un pin que se puede usar como Salida PWM con el nombre D5 o EN1 (en Circuitpython).
  • D6: Es un pin que se puede usar como Salida PWM con el nombre D6 o PH1 (en Circuitpython).
  • D8: Es un pin que admite ser configurado como Salida PWM pero que se encuentra conectado internamente al LED RGB (Neopixel) y por ello solo se usa como Salida Digital.
  • D9: Es un pin que se puede usar como Salida PWM con el nombre D9 o A7.
  • D10: Es un pin que se puede usar como Salida PWM con el nombre D10.
  • D11: Es un pin que se puede usar como Salida PWM con el nombre D11 o EN2 (en Circuitpython).
  • D12: Es un pin que se puede usar como Salida PWM con el nombre D12 o PH2 (en Circuitpython).
  • D13: Es un pin que se puede usar como Salida PWM con el nombre D13 o LED_BUILTIN(en Circuitpython).
  • D15: Es un pin que se puede usar como Salida PWM con el nombre D15 o A1.
  • D16: Es un pin que se puede usar como Salida PWM con el nombre D16, A2 o SS (en Circuitpython).

Pin DAC (Convertidor digital-analógico)

  • DAC0: Es un pin (el único en este módulo) que se puede usar como Salida Analógica lo que te permitirá, por ejemplo, reproducir un archivo de audio con un parlante. Te recomendamos que veas los ejemplos en Primeros Pasos con Circuitpython. Este pin se puede llamar como D14, A0 o DAC0 (en Circuitpython).

Serial

  • RX: Este es el pin predeterminado en el firmware para ser usado como receptor en una comunicación Serial o UART. Se lo puede llamar como D0, A10 o PIN_SERIAL1_RX (en Circuitpython). En algunas librerías de Arduino y Circuitpython no será necesario definirlo ya que está definido por el hardware. Este microcontrolador puede tener múltiples conexiones seriales que se pueden configurar en el firmware y por este motivo los módulos que utilizan este microcontrolador no funcionan con la librería de Arduino: SoftwareSerial.
  • TX: Este es el pin predeterminado en el firmware para ser usado como transmisor en una comunicación Serial o UART. Se lo puede llamar como D1, A11 o PIN_SERIAL1_TX (en Circuitpython). En algunas librerías de Arduino y Circuitpython no será necesario definirlo ya que está definido por el hardware. Este microcontrolador puede tener múltiples conexiones seriales que se pueden configurar en el firmware y por este motivo los módulos que utilizan este microcontrolador no funcionan con la librería de Arduino: SoftwareSerial.

I²C

  • SCL: Este pin es uno de los dos pines (CLOCK) necesarios para una conexión del tipo I²C. Se lo puede puede llamar como D27 o SCL (en Circuitpython). En algunas librerías de Arduino y Circuitpython no será necesario definirlo ya que está definido por el hardware. Nuestro módulo ya tiene integrada una resistencia PULL-UP de 10K para este tipo de conexión, no es necesario agregarla por separado.
  • SDA : Este pin es uno de los dos pines (DATA) necesarios para una conexión del tipo I²C. Se lo puede puede llamar como D26 o SDA (en Circuitpython). En algunas librerías de Arduino y Circuitpython no será necesario definirlo ya que está definido por el hardware. Nuestro módulo ya tiene integrada una resistencia PULL-UP de 10K para este tipo de conexión, no es necesario agregarla por separado.

SPI

  • SS: Este es el pin definido por hardware que se usa como selección de chip en una conexión SPI. Se lo puede llamar como D16, A2 o SS (en Circuitpython)
  • SCK: Este es el pin definido por hardware que se usa como reloj (CLOCK) en una conexión SPI. Se lo puede llamar como D30 o SCK (en Circuitpython).
  • MOSI: Este es el pin definido por hardware que se usa como Master Out Slave In en una conexión SPI. Se lo puede llamar como D29 o MOSI (en Circuitpython).
  • MISO: Este es el pin definido por hardware que se usa como Master In Slave Out en una conexión SPI. Se lo puede llamar como D28 o MISO (en Circuitpython).

Motor

  • PH1
  • EN1
  • PH2
  • EN2
  • M11
  • M12
  • M21
  • M22

Ensamble

Opciones de ensamble y conexión. Pines para usar en protoboard, para conectar con módulos expansión, cajas compatibles con LEGO

Arduino

CircuitPython

Descargas

Firmware

Presiona 2 veces reset para activar el modulo en modo NONTHUEBOOT. Haz click derecho sobre el link y descargalo a NONTHUEBOOT para programarlo y usarlo con CircuitPython.

Utiliza este link para agregarlo en Arduino -> Preferencias -> Gestor de URLs Adicionales de Tarjetas. Luego podrás ir Herramientas -> Placa -> Gestor de tarjetas y buscar «ELTECH» para encontrar y agregar este modulo.

Este es el paquete de archivos para Arduino si deseas instalarlo de forma manual. En Windows la ubicación sera C:\Users\<usuario>\AppData\Local\Arduino15\packages\eltech\hardware\samd y debes descomprimirlo alli. Es conveniente que la carpeta la renombres de «eltech-samd-1.5.0» a «1.5.0»

Estos son los bootloaders de la placa Nonthue M0. Ya se encuentran en el core de Arduino pero desde aquí puedes descargarlos en caso que necesitas hacer una instalación limpia del mismo.