Microcontroladores - Preguntas para principiantes

  • ¿Cómo se determina cuántos sensores puede usar un microcontrolador?
  • Tengo entendido que no puede usar C# directamente en ningún microcontrolador, pero puede usar C# y comunicarse a través del USB y buscar un puerto específico. ¿Es esto cierto?

En mi caso, me he reducido a los tres siguientes microcontroladores:

  • arduino
  • Netdurino
  • AVR

Esto es lo que intento hacer como primer proyecto y, por supuesto, puede que no sea un proyecto fácil.

Quiero poder conectar un termómetro y cuando los grados lleguen a +-3 de una temperatura base, abrir o cerrar una ventana de apoyo. Además, quiero poder almacenar la información del termómetro en una base de datos MySql.

Entonces, básicamente, si la temperatura base es 80, cuando la temperatura es superior a 83, quiero abrir la ventana. Y si es 77 quiero cerrar la ventana.

No me interesa el mecanismo exacto que abre y cierra las ventanas, solo cómo enviar las señales para abrirlas o cerrarlas.

Solo un FYI, Arduino y Netdurino son placas de desarrollo y no microcontroladores. Arduino se basa en el AVR y Netduino se basa en el microcontrolador STM32F
@ChrisStratton Sospecho que OP está preguntando acerca de activar una ventana física abierta de alguna manera y cerrada moviendo el accesorio/actuador.
Echa un vistazo a este kit de microcontrolador. Es inalámbrico y tiene un sensor de temperatura ya integrado que se puede enviar de forma inalámbrica a un receptor. Aún mejor, el código de ejemplo incluido hace esto por usted. ti.com/tool/ez430-rf2500

Respuestas (5)

Información del microcontrolador:

Si bien Netduino usa C #, la mayoría de los otros microcontroladores están programados en C; esos son dos lenguajes de programación totalmente diferentes. Además de eso, Arduino usa una versión de C++, que es aún diferente.

Los microcontroladores normalmente se programan en C o en ensamblaje (ASM). Si es nuevo, recomendaría C. Arduino no es un microcontrolador, es una placa de desarrollo (generalmente) basada en un microcontrolador AVR, aunque hay otras MCU en uso. Las MCU integradas (unidades de microcontrolador) tendrán un gestor de arranque instalado. Esta es una sección especial de código que altera el funcionamiento de la MCU. En el caso de Arduino, permite la programación a través del puerto serie en lugar de los métodos de programación estándar, así como el acceso a funciones especiales de la biblioteca. También en la placa habrá (típicamente) un convertidor de USB a serie porque muchos chips más pequeños no tienen hardware USB interno, por lo que el USB debe convertirse para una comunicación adecuada.

Pregunta 1:

Una MCU tendrá un número específico de pines de E/S. Estos son pines que pueden ser entradas o salidas. Puede conectar directamente tantos sensores digitales como pines de E/S haya, pero los sensores analógicos están limitados a la cantidad de pines ADC (convertidor analógico a digital) disponibles. No todas las MCU tienen una unidad ADC. También puede conectar muchos, muchos más sensores mediante el uso de expansores GPIO externos o registros de entrada en paralelo y salida en serie. Estos pueden controlarse usando unos pocos pines MCU y pueden expandir en gran medida la cantidad de pines de E/S disponibles.

Pregunta 2:

Escribirá un programa en la computadora que está instalada en la MCU. Si el código le permite tener comunicaciones externas (a través de USB, serie, SPI, I2C, etc.), entonces puede comunicarse con el chip mientras se está ejecutando. Pero esa capacidad depende del código que escriba. El idioma que usa para comunicarse con la MCU está bastante abierto a lo que quiera, ya que la comunicación real la realiza el hardware, no el lenguaje de programación. Tal vez eso es lo que quiso decir con la mención de "C#".

Tu proyecto:

De manera realista, su proyecto no parece tan complicado: lea un sensor de temperatura (suena como analógico) y maneje un motor para abrir/cerrar una ventana según la lectura de ese sensor. Cuándo detener el motor probablemente se basará en otro sensor conectado a la ventana. Esto se puede hacer con una MCU muy pequeña con pocos pines y poco espacio de programa (como ATtiny24 o ATtiny25). Pero creo que te encontrarás con muchos problemas si no trabajas primero en algo un poco más pequeño. El "hola mundo" estándar de las MCU es hacer parpadear un LED. Luego amplíe eso tratando de controlar la velocidad de parpadeo con un botón, luego accione un motor, etc.

Opinión personal...

Yo no, ni tengo ningún deseo de usar Arduino alguna vez. Construyo todos mis propios circuitos, generalmente con MCU AVR, pero entiendo la razón por la cual la gente los usa. Personalmente, creo que es mucho mejor aprender a diseñar su propio circuito y programarlo que copiar el código de otras personas y juntar cosas al azar, que es lo que veo que hacen la mayoría de los usuarios de Arduino. Hay MUCHOS tutoriales en línea para comenzar con los microcontroladores que no involucran Arduino, que es lo que le sugiero que investigue si tiene planes de diseñar su propio circuito en el futuro. Si no tiene ningún deseo de aprender nada, entonces, por supuesto, cópielo, pero tenga en cuenta que a menudo hay formas mucho más simples y efectivas de hacer las cosas que nunca comprenderá si no sabe lo que está sucediendo.

Almacenar la información puede ser un poco más complejo, pero no imposible. Comunicarse a través de USB no es fácil, pero se puede hacer si sabe lo que está haciendo. En lugar de tratar de escribir código para USB (es muy complicado...) sugeriría usar un chip convertidor de USB a serie y comunicarse a través de serie en su lugar. Es mucho, mucho más simple de codificar y viene como hardware interno estándar en bastantes microcontroladores. Pero como mencioné, un chip convertidor USB viene en muchas placas Arduino porque así es como están programados.
Esto comienza con una suposición equivocada. La presencia de Netduino en la lista de dispositivos es una referencia específica a un microcontrolador integrado que ejecuta código C#.
Buena llamada. No estoy familiarizado con ese.
-1 para la pizarra de arduino. Para aquellos que están más interesados ​​en software y cosas de tipo "fabricante", como artistas, etc., no hay nada de malo en no aprender todas las complejidades de las arquitecturas MCU, los circuitos físicos complejos, etc. Algunos aficionados se centran en el software, algunos en el hardware. -, algunos ambos, algunos solo quieren que algo funcione con un mínimo esfuerzo/comprensión. No hay nada de malo en hackear el código de otra persona para que algo funcione rápido, incluso si no lo entiendes todo.
@Brad: Nunca dije que hubiera algo malo en ello. Entiendo que a algunas personas no les importa el hardware, y eso está totalmente bien. Simplemente dije que si alguien estuviera interesado en diseñar circuitos (HARDWARE) en el futuro, valdría la pena el esfuerzo de comenzar con el chip desnudo en lugar de una placa de desarrollo. Además, las "complejidades de la arquitectura MCU" no tienen nada que ver con eso. No me importa lo que esté sucediendo en el silicio, pero a menos que mire la hoja de datos y aprenda un poco por sí mismo, no tendrá idea de lo que puede hacer un chip, solo lo que otras personas han hecho con él.
En términos de hardware, una plataforma compatible con Arduino no necesita esconderse más que cualquier otro circuito mínimo; consulte el tutorial de protoboarding. La mayor parte de la abstracción está en el lado del software .
@Chris Stratton, estaba pensando que...

La elección entre las plataformas.

  • Arduino es una plataforma de código abierto construida (principalmente) alrededor de chips AVR (ATmega), con una excepción: Arduino Due está construido alrededor de una CPU Cortex-M3. Está programado en C, C++.
  • Netduino es una plataforma construida alrededor de los chips Cortex-M3 y Cortex-M4. Esta programado en C#
  • AVR es una familia de microcontroladores de Atmel, programados en C, C++ o Assembly. Los microprocesadores están en el corazón de la mayoría (pero no de todos) los Arduinos.

Cuál elijas es una cuestión de gusto personal. AVR es un nivel más bajo que Arduino, por lo que si recién está comenzando, Arduino es definitivamente más fácil para comenzar rápidamente. Netduino está ahí si realmente quieres C#, sin embargo, Arduino es mejor compatible que Netduino.

Interfaz con el puerto serial/USB de la PC

En el lado de la PC, no importa lo que elija, podrá conectarse a su chip/circuito Arduino/Netduino/AVR desnudo a través del puerto serie/USB. En el lado de la PC, puede usar cualquier lenguaje de programación que desee, siempre que le dé acceso a los puertos serie. La forma en que esto funcionará es que Arduino/Netduino/bare AVR leerá/escribirá desde el puerto serie/USB y también lo hará su programa de PC. Se produce la comunicación.

En el lado integrado, la mayoría de las cosas que considerará tendrán un USART, lo que significa que la comunicación en serie está configurada. Sin embargo, los chips AVR puros no tienen un puerto USB, de por sí listos para usar: tendrá que construir un soporte USB a través de un circuito separado, aunque, como señala Kurt E Clothier , algunos chips AVR tienen soporte USB incorporado. . Algunos chips AVR no tienen un USART incorporado, pero no es probable que los elija.

Detección de temperatura

En cuanto a la detección de temperatura, todas las plataformas que sugirió le brindarán las capacidades para hacerlo. Leer una temperatura puede ser tan simple como leer un ADC si está utilizando un sensor de temperatura LM34 o LM35. En Arduino, esto se logra con una línea: myReading = analogRead(pinNumber);tendrá que transformar la lectura de temperatura en temperatura real, pero esto no es particularmente difícil.

motores

Los motores un poco más complicados: para la mayoría (casi todos) los motores, su chip Arduino/Netduino/AVR no podrá conducir el motor directamente. Necesitará al menos un interruptor MOSFET / BJT (consulte aquí para obtener más información) y un diodo amortiguador o, de manera más robusta, un circuito de controlador de motor. La plataforma Arduino tiene una gran variedad de periféricos (en general llamados protectores , aunque Olin prefiere el término placa secundaria ), incluido un protector de motor. Si está utilizando un motor de alta potencia, este es el camino a seguir.

Buena explicación, aunque no estoy de acuerdo con tus pensamientos acerca de que Arduino definitivamente es más fácil. Creo firmemente que tomarse un poco más de tiempo por adelantado para aprender lo que está sucediendo lo ayudará enormemente en el futuro. El uso de Arduino limita severamente las posibilidades de diseño. Pero, de nuevo, esa es solo mi opinión, no más válida que la tuya. Otra cosa, hay algunos chips AVR que tienen USB incorporado, por ejemplo: hackaday.com/2011/08/07/1-chip-usb-avr-development
¿Por qué hay un analogRead si digitalRead hace el mismo trabajo?
@KurtE.Clothier: Gracias por ese enlace. Redacción sobre cómo empezar ajustada: ¿qué opinas?
@jippie: Por supuesto, tiene razón, señor. Eso fue un error tipográfico (como un error tipográfico, pero cuando el cerebro funciona mal)
Me parece bien.

Netduino ejecuta una versión del tiempo de ejecución de .NET conocida como "micro runtime" IIRC. Usted escribe código en C# y se interpreta en Netduino. Netduino se envía con bibliotecas para acceder a las diversas funciones del microcontrolador, y esas bibliotecas están escritas en C. El código C# que escriba será muy lento de ejecutar, aunque el código de la biblioteca es rápido. Me gano la vida escribiendo código C#, pero no creo que netduino sea una gran opción para un microcontrolador; es más difícil de usar que un arduino en algunos aspectos, tiene mucho menos soporte (menos código de ejemplo, hardware menos compatible) y cuesta más. Tampoco creo que C# sea el lenguaje adecuado para los controladores.

He realizado proyectos con código personalizado para AVR y otros proyectos con Arduinos. Si recién está comenzando, el arduino tiene toneladas de ventajas, y la única desventaja es el costo más alto que un AVR sin formato.

Recomiendo mirar algunas de las introducciones para el AVR y para el arduino. Creo que eso te dará una buena idea de cuál es mejor para ti.

¿Cómo se determina cuántos sensores puede usar un microcontrolador?

Eso dependería de cuán creativo pueda ser y cuántos iopins tenga disponibles, y cuántos pines requiera el sensor. Si tiene 4 sensores de 3 pines, eso no significa necesariamente que necesite 12 pines para controlarlos, puede multiplexarlos y usar 5 pines y ahorrar 7 pines io. Así que todo realmente depende. Pero una forma de verlo es, cuántos pines io disponibles tiene y cuántos pines requieren sus sensores, eso le daría un límite bajo de cuántos puede tener. La creatividad, la experiencia y la comprensión de cómo funciona todo pueden aumentar la cantidad de sensores.

Tengo entendido que no puede incrustar C# directamente en ningún microcontrolador, pero puede usar C# y comunicarse a través del USB y buscar un puerto específico, ¿es esto cierto?

Si bien no he hecho mucho USB, sé que si está haciendo USB desde cero, eso implicaría escribir controladores en su máquina host. La forma más popular es usar un IC que ya maneja todo el protocolo USB y los controladores y se comporta como un puerto serie en su computadora. Básicamente, tiene un puente USB-Serie que puede conectarse a un puerto serie en su microcontrolador. Creo que el Arduino hace esto. No estoy seguro acerca de Netduino. Entonces, sí, puede usar C # para comunicarse a través de USB A TRAVÉS de un puerto específico (suponiendo que lo esté haciendo de la manera más fácil y usando un puente USB-Serial).

Lo que propones hacer es definitivamente posible. Puede escribir un programa que interactúe con su base de datos y que pueda enviar y recibir datos en serie a su microcontrolador.

gracias por la respuesta. Puedo ver en sparkfun que tienen los controladores y el termómetro, pero ¿qué tipo de motores funcionan con un microcontrolador?
Cualquier motor en realidad. Cada motor tiene que ser controlado, y dependiendo del motor, eso puede variar entre modelos, tipos, etc. Una vez que sepa cómo se controla el motor, tendría que crear un circuito (un microcontrolador solo no es suficiente), que conecta su microcontrolador al motor.
@user2278106 Los motores requieren una corriente más alta que la que puede proporcionar un micro típico. Lo más probable es que necesite un controlador de motor o alguna solución similar (por ejemplo, un puente H). La selección del motor está dictada por los requisitos mecánicos del sistema (cuánto torque se requiere para abrir/cerrar la ventana y qué tan rápido desea que se abra/cierre), y los controladores se eligen/diseñan una vez que se selecciona un motor

Para responder a un punto específico, un microcontrolador presumiblemente podría tener un (número muy alto) de sensores conectados. El uso de sensores de bus, como i2c, spi, un cable, serie o cualquier otro protocolo de bus, le permitiría tener x muchos por bus, donde x es el límite para un bus determinado. Tendría que seguir algunas especificaciones técnicas para cablear el bus, y con múltiples del mismo bus, podría expandirse aún más.

El límite está realmente en términos de velocidad y practicidad. Podría tener mil sensores en un solo arduino, pero ¿podría encender, leer, procesar y mostrar esa información en un tiempo razonable? Tal vez, depende de lo bien que puedas codificar o de lo imaginativo que seas.

Incluso los sensores analógicos se pueden hacer así, usando multiplexores o circuitos integrados ADC. La mejor pregunta no es "cuántos sensores puede usar un microcontrolador", sino "cuántos sensores necesito" y continuar desde allí.