¿Debo comprar un Netduino o Arduino?

Estoy considerando comprar un NetDuino para algunos proyectos divertidos de pasatiempos en el hogar.

¿Alguno de ustedes lo ha usado y cómo fue su experiencia?

¿Debería mirar el rango de Arduino o FreeDuino en su lugar (o algo totalmente diferente)?

Decidí apegarme a NetDuino debido a mi conocimiento de C#, pero eso no es un requisito.

Gracias

PD. No estoy seguro de si esto pertenece a la wiki de la comunidad o no (se agradece la orientación).

¿Qué quieres hacer con la pizarra? Eso afectará su elección.
El microcontrolador ARM7 en NetDuino y el AVR de 8 bits en Arduino pertenecen a una clase completamente diferente. Es como si estuvieras preguntando si comprar un servidor o una netbook. Sin embargo, está ralentizando su servidor al ejecutar una máquina virtual inadecuada: el rendimiento será similar y está utilizando ambas herramientas para la misma tarea. ¿Realmente necesitas esa capa de abstracción?
@reemrevnivek - "No adecuado" eh... es una capa de abstracción, pero ciertamente no es inadecuado (y tampoco es una máquina virtual).
Básicamente, obtienes la misma velocidad por el mismo precio, pero uno es mucho más fácil de programar que el otro.
@Fake Name Parece que netduino (TinyCLR) no tiene un compilador JIT. Entonces, es una máquina virtual/intérprete. tinyclr.com/faq/#13
@Fake Name: como señaló Joby, es una VM, y dije que no es adecuada porque la está usando para interactuar con hardware personalizado, que no es exactamente un punto fuerte de .NET
No sabía que los intérpretes se consideraban máquinas virtuales. Sin embargo, tiene sentido.
Las máquinas virtuales son en lo que se ejecutan Smalltalk, Java, Python, etc. Significa cualquier máquina abstraída, que ejecuta un conjunto de instrucciones diferente del "metal desnudo". No solo una PC virtualizada.

Respuestas (11)

Me encanta C# y considero que los beneficios de productividad de desarrollar en C# con Visual Studio son un factor muy importante a favor de Netduino. No despreciaría a Netduino porque "C # no es para microcontroladores/entornos integrados", como indican otras respuestas aquí.

Puede hacer proyectos muy divertidos y aprender mucho sobre la conexión de diferentes entradas físicas y dispositivos de salida usando Netduino tal como puede hacerlo con Arduino o yendo "bare metal" y haciendo la gestión directa de MCU del AVR, PIC u otros microcontroladores.

Dicho esto, me quedo con Arduino por las siguientes razones:

  • Mejor apoyo comunitario. Arduino solo tiene muchas más muestras, ejemplos y una comunidad más grande a la que puede recurrir.
  • Netduino no tiene una historia para ir más allá del costoso enfoque de kit/prototipo. ¿Va a implementar una exhibición de arte interactiva que requiera docenas de microcontroladores ejecutando su código? Prepárate para desembolsar $35 cada uno por los Netduinos. Con Arduino, puede crear prototipos en Arduino y luego implementar en una solución básica de solo MCU con el microcontrolador AVR por menos de $ 10 cada uno.

Entonces diría que si sus habilidades de C son polvorientas o inexistentes, le encantan C # y Visual Studio, y solo quiere jugar en algunos proyectos de pasatiempos que no necesitarán escalar a donde el costo se convierte en un problema mayor, vaya a Netduino.

Si se siente cómodo en C, o cómodo arreglándoselas con la ayuda de ejemplos de código y la comunidad, y desea estar más cerca del metal y buscar alejarse eventualmente del enfoque de "prototipo" de Netduino y Arduino, vaya Arduino para empezar.

Sé que esta es una respuesta un poco antigua, pero quería agregar que, dado que Netduino es completamente de código abierto (incluido el hardware), puede comprar el uC de cualquier persona y actualizar el firmware de Netduino. Entonces podría usar la plataforma Netduino en un producto de producción.
"Tu conocimiento de C# es casi inútil en una plataforma integrada de todos modos, así que no le des demasiada importancia". - Que tontería de decir. Netduino está incrustado, es genial y es C#...

De todos modos, su conocimiento de C# es casi inútil en una plataforma integrada, así que no ponga demasiado peso en eso.

Yo iría con un Arduino o uno de los clones, no porque .Net sea el demonio, sino porque eso es lo que todos los demás están usando, por lo que será mucho más fácil obtener ayuda y aprovechar el código de las personas.

Una vez que te hayas mojado los pies, por todos los medios ramifícate y prueba cosas diferentes.

¿Está defendiendo el lenguaje de cableado utilizado en Arduino, o está aprovechando (y contribuyendo) el código C en avrfreaks ?
@reemrevnivek Arduino es solo C ++ con algunas bibliotecas. No lo clasificaría como un "lenguaje": es C ++ con un encabezado y un pie de página adjuntos
Vaya, el cableado es lo que quise decir.
Encuentro esto un poco extraño, casi tomaría "Una vez que te hayas mojado los pies, ramifícate por todos los medios" como una sugerencia para comenzar con Netduino porque el elemento de programación debería ser un problema mucho menor, lo que permite que uno desarrollar las "otras" habilidades necesarias.
Mal comentario, dren.dk es simplemente incorrecto. Yo y muchos otros usamos netduino y C# todo el día.

Actualmente tengo un Arduino, mbed y, finalmente, un Netduino a mi disposición para uso de desarrollo/aficionado. Nunca me gustó trabajar con Arduino, quizás porque el editor no es muy bueno, y definitivamente estoy mimado como desarrollador de C#. Cuando recibí mi mbed, me gustó mucho más el desarrollo, pero la depuración sigue siendo dolorosa porque tienes que usar sentencias de impresión para averiguar qué está pasando.

Cuando está desarrollando un producto, o simplemente jugando, la gran mayoría de su tiempo al principio se dedica a la depuración... y cuando está depurando, desea tener puntos de interrupción. Me resulta muy difícil volver al hardware integrado que no ofrece ningún tipo de puntos de interrupción.

Todavía no tengo experiencia con JTAG, pero cada micro que he visto hasta ahora (además de los módulos RabbitCore) lo requiere para permitir la depuración a través de puntos de interrupción. ¡Imagínese mi sorpresa cuando conecté mi Netduino hoy y pude pasar un solo paso a través de mi código en VS2010! Estaba muy complacido con esto.

Personalmente, no me preocuparía por el tamaño de la huella, los males de .NET y Microsoft, etc., etc. Solo me preocuparía poder depurar de manera rápida y eficiente, para poder hacer las cosas .

Hacer las cosas es una lección que se aprende mejor de la manera difícil
@kurtnelle, ¿suena como si estuviera abogando por no usar .NET MF?
@Dave, sí lo soy. Esto es solo porque probé el viejo microcontrolador de 8 bits basado en c y logré muy poco con mucho esfuerzo.
@kurtnelle pero con .NET MF en realidad estoy haciendo mucho con muy poco esfuerzo.
@Dave, perdón por la respuesta disléctica anterior; Estoy abogando por .NET MF
@kurtnelle :) ¡np!
@kurtnelle, tu primera publicación no se ve como esperabas, en mi opinión...
@samsmith, es correcto, salió al revés.

Como usuario de BasicStamp durante casi 20 años y usuario de NetDuino durante solo 2 semanas (nunca he usado un Arduino), diría que NetDuino es una gran plataforma. Las dos características principales que disfruto: la facilidad de programación (¡y los puntos de interrupción!) en VisualStudio y el ADC de alta resolución en la placa son razones clave. Los pocos escudos Arduino que he probado de SparkFun han funcionado perfectamente con NetDuino.

Personalmente, no soy fanático de C# o .NET. Soy un ludita C. Por lo tanto, mi elección de plataforma se reduce a cuál tiene las características de hardware que quiero (flash, RAM, velocidad de reloj, número de ADC, número de temporizadores, etc.).

Dicho esto, puedo imaginar que C#/.NET sea útil para la creación rápida de prototipos:

  • El manejo de cadenas probablemente será mucho más simple
  • La serialización de objetos y RPC es probablemente fácil. Sospecho que puede simplemente enviar objetos de C# a través de un enlace en serie. RPC probablemente "simplemente funciona"
  • Portabilidad: .NET es una máquina virtual, por lo que el código debe ejecutarse en otras placas o incluso en PC
  • La recolección de basura simplifica la implementación de muchos algoritmos

Por supuesto, todo esto tiene un costo:

  • La huella del código es más grande (especialmente cuando se tienen en cuenta las bibliotecas estándar)
  • El uso de RAM es mayor (todo es un objeto, ¿está todo escrito?)
  • El recolector de basura probablemente se entromete con el rendimiento en tiempo real
  • Si una función de hardware no es compatible con las bibliotecas .NET, no puede usarla (a menos que implemente las funciones usted mismo, para lo cual necesitará C/C++, vea los comentarios)

Y, sobre todo, al utilizar sus conocimientos de C# en una plataforma integrada, en realidad no está aprendiendo nada acerca de los dispositivos integrados.

Sí, hará el trabajo, pero, ¿dónde está la diversión en eso?

Me pregunto qué tan difícil es parchear las bibliotecas .NET utilizadas en NetDuino con una nueva función. Parece que están usando C++ para construir su .NET SDK, muy abajo en SecretLabs.NETMF.Hardware/Stubs - source files . Suspiro.
@reemrevnivek No es mi idea de diversión. Si está parcheando el tiempo de ejecución, también podría comenzar con C/C++
@Joby: soy un ludita de C como usted, pero solo quería señalar que era posible: dijo "Si las bibliotecas .NET no admiten una función de hardware, no puede usarla", lo cual no es del todo cierto.
¿Has visto realmente algún punto de referencia? Es difícil para mí imaginar que un 8 bits de 16 MHz funcione a la misma velocidad que un micro de 32 bits de 60 MHz. Especialmente porque las bibliotecas de Arduino también ralentizan las cosas, ninguna de ellas está realmente optimizada para la velocidad. Y también tiene objetos (si no tantos como los que se usan en .NET). ¿Y es muy diferente de Arduino? Si no hay una biblioteca de Arduino compatible con una función... debe implementarla usted mismo (llamando directamente a los registros de hardware, etc.)
@davr Respuesta editada
"Y, sobre todo, al usar sus habilidades de C# en una plataforma integrada, en realidad no está aprendiendo nada sobre los dispositivos integrados". Te refieres a dispositivos integrados de la "vieja escuela", ¿no? Ojalá estos rápidos dispositivos ARM de 32 bits estuvieran disponibles cuando era más joven.

Descubrí que el mbed es un maravilloso sustituto del Arduino.

La biblioteca de software está más orientada a C ++, completa con todo el azúcar sintáctico de la sobrecarga del operador de asignación. Además, se configura un sistema para que los usuarios puedan publicar y documentar bibliotecas de códigos, que luego se pueden buscar e importar fácilmente a los proyectos.

Otra buena característica es la capacidad de tratar el dispositivo como una memoria USB y simplemente colocar los .binarchivos directamente en la unidad.

Desafortunadamente, el IDE es comparable al de arduino. Además, está en línea . Esto es realmente bueno (se puede usar en cualquier PC, no requiere instalación) y realmente malo (no se puede reprogramar fácilmente sin una conexión a Internet).

El costo de la placa es de $ 60, pero tienen un esquema de patrocinio, donde donarán placas a proyectos interesantes siempre que se documente el progreso y se haga público el código fuente.

Me encanta la idea del patrocinio. Tendré que analizarlo.

Soy principalmente un desarrollador de C#. Compré un Arduino en lugar de un Netduino debido a la disponibilidad del código fuente. No sería fácil integrar Netduino con ladrillos electrónicos Arduino porque tendrás que reescribir algunas de las muestras desde cero.

Cuando lea 'C# no es adecuado para plataformas integradas', recuerde que las personas mayores de cierta edad ya han escuchado eso al menos una vez sobre 'C' y luego otra vez sobre C++ en su vida...

Por supuesto, es un "despilfarro" monumental de las capacidades subyacentes del procesador, pero la capacidad de ejecutar su bucle inactivo 1000 veces más rápido de lo que necesita en lugar de 10 veces más rápido de lo que necesita nunca hizo rico a nadie.

Los bucles inactivos no son relevantes. Hay algunos usos de MCU donde los ciclos son importantes, como la captura o generación de señales de video, la creación de su propio osciloscopio, el análisis FFT en tiempo real de la señal de entrada y muchos otros. Puedes olvidarte de C# para estos. Por otro lado, si sus requisitos son más hacia la creación de "software similar a una PC en un paquete pequeño", entonces C # y .NET MF no son una mala opción en absoluto ...
... Para tal experiencia, preferiría elegir una placa ARM integrada basada en Linux, pero ese es un tema para otra discusión. El punto es que para alguien que acaba de ingresar al mundo integrado con experiencia en C#, .NET MF no es un mal primer paso en absoluto.

Si desea sentir el metal desnudo y, por ejemplo, poder generar o capturar una señal de video directamente, ahí es donde importa cada ciclo y AVR/Arduino le permitirá hacerlo. Si desea un mayor nivel de abstracción, programación de mayor nivel y comodidad de depuración, recolector de basura y puede vivir con el hecho de que, como en Windows, no controla todo, entonces elija NetDuino o FEZ Domino. Dado que ambos tienen ARM en su hogar, apuesto a que, si es necesario, puede matar .NET MF en la placa y flashear el código ARM GCC de metal desnudo directamente desde algún Eclipse como IDE con la ayuda de un pequeño depurador JTAG. Investiga un poco. El problema podría ser que si falta el encabezado JTAG, deberá soldar un poco.

C y C++ no son lo suficientemente buenos para video. Necesitarás Verilog para eso :)
Hay al menos 10 proyectos que crean videos solo con software. La mayoría son en blanco y negro o grises, pero incluso hay a color y sistemas de juego con solo video generado por software AVR. También existen proyectos OSD. También hay algunos ejemplos de captura de cuadros de video de baja resolución con AVR sin FPGA. Solo busca en Google...
Cuando digo vídeo me refiero a 1080p 24bit color. ¿Puede el C++ incrustado hacer eso?

Después de un paréntesis muy largo de la electrónica y la programación, he vuelto a ello debido a un proyecto que uno de mis hijos está haciendo en la universidad. Aprendí electrónica cuando los tubos eran la norma y programación con interruptores de palanca (establecer dirección, configurar datos, cargar, almacenar, en binario) y tarjetas perforadas. A lo largo de los años, aprendí y usé cada avance electrónico y de lenguaje de programación, lo que requirió mucho tiempo y esfuerzo concentrado. En consecuencia, estoy muy agradecido por los avances en microcontroladores y lo increíblemente baratos que son, incluidas las placas de desarrollo como Arduino, Netduino, etc. Los argumentos sobre Arduino vs Netduino, etc., me recuerdan las batallas de Microsoft vs Apple como como línea de comando vs GUI. No importa qué plataforma, lenguaje de programación, etc., se utilice siempre que sea adecuado al resultado.

Si .net MF proporcionó bibliotecas que son capaces de hacer lo que puede hacer el código puro de máquina/metal, entonces la única abstracción (. Net MF) se convierte en una buena. Además de ocupar más espacio y ejecutar un GC (¿lo que debería hacerlo eficiente?)