¿Qué hace que una plataforma en particular sea adecuada o no para el uso en producción? [cerrado]

Supongamos que el costo de los bienes es un factor insignificante. Si una empresa carece de un equipo para producir una placa personalizada para un producto en particular, pero tiene éxito con una plataforma de desarrollo lista para usar como Arduino / Netduino / mbed, ¿qué tipo de cosas se deben considerar antes de seguir adelante?

Si no me equivoco, Arduino originalmente estaba dirigido a estudiantes universitarios debido a su bajo precio y facilidad de uso. Naturalmente, se convirtió en una plataforma popular para artistas y creadores. Veo Netduino como una extensión lógica de Arduino: permite a las personas usar un IDE robusto y rico (Visual Studio 2010) y hacer las cosas rápidamente a través de .NET Micro Framework. mbed es otra buena plataforma para aficionados debido a su facilidad de uso, herramientas gratuitas (compilador en línea) y periféricos de hardware.

Entonces mi pregunta es, ¿por qué las empresas no deberían adoptar estas plataformas de desarrollo para su uso en producción? En otras palabras, ¿es una mala idea comprar varias placas de Sparkfun, programar cada una de ellas con el código y luego distribuir el producto a los clientes?

Estoy específicamente interesado en Netduino, pero los argumentos a favor o en contra de Arduino y mbed también son bienvenidos. Por otro lado, ¿lo harías o lo has hecho antes?

Personalmente, veo el desarrollo de Netduino como un "módulo central" que otros fabricantes de procesadores venden para integraciones de productos, pero tal vez me estoy perdiendo algo importante aquí.

Respuestas (6)

Algunas de las cosas que puede considerar al obtener un módulo de controlador son problemas como la seguridad del suministro a lo largo del tiempo, cualquier problema de licencia, cualquier ineficiencia en el proceso de carga de firmware para la producción, cualquier problema de seguridad del código y cualquier problema de calidad de fabricación o cumplimiento normativo. Algunos de ellos serán más preocupantes para un módulo propietario que para uno relativamente abierto que podría hacer que otra persona haga un equivalente o eventualmente se fusione con otra funcionalidad en su producto.

El suministro podría ser un problema, pero al menos los diseños para *duino son de código abierto.
@Dave - Te perdiste el punto. Chris (creo) hablaba principalmente de problemas con .NET, no con el hardware.
@reemrevnivek - hmm... Seguro que me sonó como problemas de hardware. ¿Por qué habría problemas de suministro, carga de firmware y mfg. calidad tiene algo que ver con .NET?
Es posible que pueda o no obtener una licencia para cargar un tiempo de ejecución en particular en una placa de origen alternativo. Los diversos temas que estaba sugiriendo son una variedad no necesariamente relacionados entre sí.

¡Ay! O estás completamente confundido o tu idea de producción es diferente a la mía. Considero que la producción significa vender un producto al público en general en cantidades de miles o más, y luego respaldar y actualizar el diseño. Los productos que no van al público en general son trabajos internos o por contrato, y los productos que se venden en cantidades más pequeñas son para fines especiales o diferentes. 'Varias placas de Sparkfun' no satisfarían una necesidad de producción.

Primero, el costo de los bienes es siempre un factor significativo. Su importancia puede diferir de un producto a otro, y puede ser menos significativa si el artículo en particular es solo un pequeño componente de un sistema más grande que ha sido optimizado por costo. Sin embargo, en cualquier entorno en el que esté en competencia con otros productores (lo que debe ser porque si está en el gobierno o tiene un monopolio no estaría haciendo esta pregunta), el costo será un factor. Los $ 35 para Netduino (solo en costo) generalmente podrían reducirse a $ 10 o menos para la mayoría de las aplicaciones con un diseño personalizado. Si está convencido de que el costo no importa, hay otras razones en contra de comprar un diseño de este tipo.

Sí, las tres placas fueron diseñadas para estudiantes, diseñadores y aficionados. Están diseñados para ser lo suficientemente confiables para un kit de desarrollo que se encuentra en un escritorio. Ese estudiante debe saber algunas cosas sobre los procedimientos de manejo seguro que la población general no conoce o practica. Problemas como ESD, disipación de energía a largo plazo y reducción de componentes probablemente se degradaron por debajo de cosas que son menos importantes para la producción, como la soldabilidad y la simplicidad.

Su afinidad por los IDE y las soluciones preempaquetadas es aterradora. En mi opinión, confías demasiado en tus proveedores de herramientas. Si las placas se vuelven más caras, si se modifican los términos de la licencia, si el servidor se cae, el software se declara obsoleto, el fabricante de la placa cierra (etc., etc., etc.), su negocio está arruinado. Además, carece de comprensión de lo que sucede detrás de escena. Si algo no funciona como dice la documentación, ¿cuál es su plan? Su idea de comprar algunos Arduinos, programarlos e implementar el producto, por ejemplo, carece de un plan para la protección del código. Alguien más podría copiar su código del microcontrolador, duplicar las partes relevantes del diseño por un tercio del precio y vender más que usted.
Confiar en un IDE y un lenguaje para las cosas que no entiendes es una receta para el desastre.

El uso de un kit de desarrollo en su diseño hará que su producto sea demasiado caro, frágil, voluminoso, hambriento de energía e ineficiente. También será difícil de depurar, complicado de mantener y estará a merced de sus proveedores. Te hará parecer un incompetente.

Sin embargo, no todo está perdido. Si implementa su diseño en una placa de desarrollo, será fácil que alguien (ya sea dentro o fuera de su equipo) lo personalice para eliminar estas deficiencias. Si no tiene un equipo, debe contratar uno, traer un contratista o hacer que lo haga una empresa de diseño.

La producción no tiene que significar miles. Hay mucha ingeniería en equipos altamente especializados que pueden venderse en pedidos de unas pocas docenas a unos cientos de piezas, y obviamente se venden a precios bastante altos o nadie ganaría dinero haciéndolo. Estas industrias se enfocan en satisfacer la necesidad rápidamente, no en pasar meses sacando hasta el último dólar de la lista de materiales.
@reemrevnivek - Creo que tú y yo estamos trabajando en mundos completamente diferentes. Cuando me refiero a una parte de producción, es cualquier cosa que se entrega a un cliente, y puede ser en cantidades de 1 a 20, no en decenas de miles, miles o incluso cientos. No me importaría menos si pudiera reducir una parte de $ 50 a 5 dólares, si eso significa que tendré que pasar 3 meses adicionales en el desarrollo. Tampoco me importa si alguien copia el código.
Sin embargo, ha sacado a relucir puntos muy buenos y valoro su aporte. Creo que su respuesta fue un poco extrema y claramente tiene opiniones sobre este tema, pero puedo extraer los puntos clave de ella.
@Dave - Lo siento, conscientemente traté de que no fuera obstinado ni extremo. Así es como se ve después de algunas relecturas y ediciones: P. Sin embargo, mantengo mi afirmación de que la palabra 'producción' significa (en todos los contextos en los que he operado, que es principalmente como proveedor OEM de automóviles) miles de piezas. ¿Te imaginas abrir el capó y ver un Arduino pirateado en el controlador de tu ventilador? No, y por una buena razón. Traté de dar algunas de esas razones.
@reemrevinek - jaja! sin ofender. Esperaba obtener muchos puntos de vista con esta pregunta. Mi entorno es totalmente diferente. Vendemos algunos productos personalizados que son bastante caros, por lo que una parte como una placa integrada está bien si cuesta más y compensa el tiempo de desarrollo. Estoy usando Netduino en este momento solo para crear prototipos de conceptos, pero luego se me ocurrió que probablemente podríamos ponerlo en el producto, ya que de todos modos solo se usa con un controlador de pantalla. Ciertamente estoy de acuerdo en que es mejor/más profesional tener una placa personalizada, pero quería escuchar opiniones.
@reemrevnivek Podría imaginar fácilmente ver un arduino en un recinto debajo del capó de un auto de carreras.
@Chris Estoy pensando en poner uno en el mío, pero solo para mostrar datos del sensor, no algo como la gestión del motor. :)
@Chris y Dave: Lo mismo aquí. Estoy restaurando un viejo Corvette y estoy en proceso de instalar sensores y analizadores adicionales. Estoy usando el equipo de prueba FEZ Panda (compatible con Arduino) y estoy considerando usar una versión mini de una de las placas de desarrollo "en producción" . No veo nada de malo en esa aplicación y ni siquiera vería nada de malo en venderlos. Por supuesto, la producción en masa estaría limitada debido a las razones enumeradas por reemrevnivek.
@reemrevnivek: No puedo decir que estoy de acuerdo con su desdén por las herramientas y el entorno de desarrollo. La paranoia de que Microsoft cierre o no admita el marco .Net en el futuro es indebida.
Por cierto... el .Net Micro Framework 4 es de código abierto
@Kihoffer: ¿se requiere que todos los puertos para una placa de destino dada sean de código abierto, o solo la distribución ascendente de Microsoft?
@Chris Stratton, la respuesta a esa pregunta es No, los porteros individuales no están obligados a abrir su puerto. El código fuente principal de .NET MF es de código abierto de Microsoft y cualquiera es libre de transferirlo a un destino en particular; esto a menudo significa agregar sus propias bibliotecas propietarias también. Un buen ejemplo sería la oferta de Fez de GHI frente a Netduino de Secret Lab. Uno ha optado por cerrar el código fuente de su puerto y cargarlo desde la fábrica, mientras que el otro ha optado por abrir el código fuente de su puerto. Es un esfuerzo significativo portar .NET MF y algunos han optado por proteger lo que han agregado.
@Jon: es un beneficio de soporte limitado para que el marco .Net ascendente sea de código abierto si las implementaciones reales que se ejecutan en una placa en particular no lo son.

He usado una placa Arduino en un producto (no en producción a gran escala) y no lo volvería a hacer. Las placas Arduino están orientadas a un ecosistema muy cerrado (en el sentido de la palabra que no es software de código abierto). Por ejemplo, si 'sale' del ecosistema Arduino al necesitar usar un pin que no está en un encabezado en la placa de desarrollo, inmediatamente perderá todos los beneficios del Arduino. Debe modificar el tablero para llevar el pin a un encabezado existente o agregar un nuevo encabezado de alguna manera. Esto probablemente significa que no podrá usar ningún escudo existente o posiblemente incluso las bibliotecas de software para Arduino. Esa es la mayor parte del beneficio de la junta. He tenido que hacer esto con un Arduino Mega.

Además, las placas son enormes y no son fáciles de integrar con otras PCB. Hice la placa principal para mi aplicación equivalente a un escudo para el Arduino Mega que tenía orificios de montaje para la carcasa que elegí. Así que conecté el Arduino Mega a los encabezados que puse en mi tablero. Sin embargo, este era un gran tamaño para acomodar, y había mucho espacio desperdiciado debido al tamaño de la placa de desarrollo. No necesitaba la mitad de lo que había allí y solo ocupaba espacio. Esto me obligaba a tener una placa de circuito impreso y una carcasa más grandes de lo que hubiera necesitado de otro modo. Eso es dinero desperdiciado.

Los diseños de arduino (e incluso alimentados por brazo) son lo suficientemente simples como para que, si va a fabricar una PCB adecuada para la lógica digital para personalizarlos, también podría incluir el procesador. Serían más tentadores si no fuera a hacer una placa de circuito impreso en absoluto, o si la hiciera de un solo lado o con una tecnología especial analógica o de RF en la que no quisiera partes digitales en esa placa, y tuviera que hacer una la placa del controlador también sería más costosa que comprarlos (e incluso volver a trabajarlos).
Chris- definitivamente. Todo el mundo debería saber que si está haciendo una PCB usted mismo, no tiene mucho sentido agregar una placa Arduino en lugar de simplemente recrear una en su PCB.
Si el entorno Arduino se convierte en un factor limitante, siempre puede usar cualquier otro compilador AVR como GCC, BASCOM, AvrCo y producir firmware que residirá en la misma placa Arduino...

Arduinos &co son plataformas de prototipado y evaluación . Como tales, simplemente no son económicamente viables como base para series de producción relativamente pequeñas. Son excelentes para la educación y la simulación de ideas, pero un producto se hundiría muy rápidamente si tuviera que soportar el costo de un subensamblaje listo para usar que no era óptimo para su uso final.

Sería mucho mejor crear una nueva placa que incluya los elementos necesarios del 'duino y cualquier circuito auxiliar que tener el costo de dos placas y el riesgo de fallas en las conexiones.

Con respecto a Visual Studio y cualquier cosa .net, no los tocaría con los de otra persona. Elija algo independiente de la plataforma y el fabricante, algo así como el espíritu del propio proyecto Arduino.

Todavía creo que todo depende del costo de su producto. Digamos que es posible crear algo realmente convincente con el *duino, y es una pequeña parte de un proyecto de 1 millón de dólares, y solo vas a vender 3 de ellos. ¿Por qué eso no sería económicamente viable? ¿Preferirías gastar miles en el desarrollo de algo que se usará dos veces?
Con respecto al comentario de .NET, con frecuencia me encuentro con personas a las que no les gusta usar Visual Studio y/o .NET solo porque sí. Yo personalmente no lo entiendo. Visual Studio es, con mucho, uno de los mejores IDE que he usado. Reconozco que estoy inclinado hacia las herramientas de Microsoft porque me permiten hacer mi trabajo rápidamente y el 99% de las veces, simplemente funcionan. Aunque realmente debería aprender a usar placas de desarrollo con un ICE, definitivamente aprecio la facilidad de usar un entorno familiar que me permite establecer puntos de interrupción durante la depuración. AFAIK no puedes hacer eso con Arduino.
WRT tu primer comentario, dije tiradas relativamente pequeñas. Vería una serie de tres desarrollos de gran presupuesto como prototipos en curso. Me imagino que el cliente también lo haría. En esa situación, felizmente usaría un Arduino.
Lo de MS/.net se basa en la experiencia personal. Durante los últimos veinte años, más o menos, he usado casi todas las plataformas que existen. Los mayores dolores de cabeza provienen invariablemente de los productos para la EM. MS parece asumir que su camino es el único camino correcto. Actualmente estoy usando OS X, Ubuntu y Windows 7, todo en un entorno de desarrollo. ¿Adivina cuál tengo que reiniciar (en absoluto)?
@Dave: puede realizar la depuración en el chip si tiene soporte JTAG con OpenOCD y GDB. Tienes razón, el Arduino no es compatible con esto. Necesitará un procesador con JTAG: la mayoría de las variantes de ARM funcionan con OpenOCD. Netduino tiene esto, pero eso se debe a que aprovecha la compatibilidad con JTAG en el procesador ARM que está utilizando.
@reemrevnivek: Definitivamente necesito aprender a usar JTAG. ¿Conoce algún micro que lo admita con una interfaz relativamente barata y una cadena de herramientas gcc/gdb que sea fácil de configurar? Sé que mencionaste ARM, pero no sé si esas herramientas JTAG son económicas o no. Cualquier recomendación es bienvenida ya que me gusta estar al día con las últimas opciones.
Los ATMegas utilizados en Arduino admiten la depuración a través de debugwire; no estoy seguro de si el hardware del pin de reinicio de Arduino es compatible, pero si no, no se necesitaría mucho para piratear, ya que es solo un pin. Otro problema potencialmente importante sobre el uso de los tableros de otras personas es si le importan las cosas como EMC, la certificación de la FCC, etc.
@Dave: la depuración de destino de punto de interrupción no es exclusiva de Visual Studio, es realmente una característica de la mayoría de los IDE y las herramientas integradas una vez que se aleja de los procesadores de destino más pequeños y con recursos más limitados, por ejemplo, cualquier plataforma que pueda manejar gdb/gdbserver funcionará con cualquier IDE que pueda hablar el lenguaje de comandos de GDB.
@Chris Sí, me doy cuenta de eso. Creo que es solo que nunca antes había experimentado algo tan fácil. Solo tiene que entender que mi experiencia no es la programación integrada (y la configuración de cadenas de herramientas gcc / gdb), y obtener las herramientas integradas en el pasado (en Linux, por ejemplo) realmente ha sacado lo mejor de mí. Pero en el mundo del desarrollo de software para PC, Visual Studio lo mimará.
@Dave: hasta que desee hacer algo que no puede hacer, o ejecutar o desarrollar para una plataforma que no puede manejar. Pero estoy de acuerdo en que las herramientas OSS pueden ser un verdadero dolor de cabeza para configurarlas perfectamente.

En términos generales, no hay nada de malo en usar productos listos para usar. Todos hacemos esto en algún nivel, supongo que los que odian Arduino no diseñan sus propios chips, incluso a un nivel de volumen más alto que tendría sentido económico.

Siempre se reduce al costo, el cronograma y la calidad (y tal vez también a la disponibilidad a largo plazo). Si un Arduino cumple estos criterios mejor que una placa personalizada, la elección es obvia.

La parte difícil es obtener las cifras correctas, especialmente para su volumen. Pero el uso de las cifras correctas y un poco de matemática le dará el volumen de equilibrio para la elección entre usar, digamos, Arduino versus una placa personalizada. Si eso está mucho más allá de lo que espera, o muy por debajo, la elección es fácil. Así que olvídese de todos los consejos que dicen "por todos los medios, use un Arduino" o "siempre busque una placa personalizada", ambos están bloqueados en una mentalidad que pertenece a un nivel de volumen específico. Haz tus propios cálculos.

Tenga en cuenta que no tengo ningún conocimiento específico del Arduino. Tendrá que decidir por sí mismo si cumple, por ejemplo, con sus requisitos de calidad.

Los tableros personalizados son buenos si tiene un presupuesto para esto y una producción lo suficientemente grande como para justificar el trabajo. De lo contrario, se queda con los productos del estante, como placas Arduino, Netduino, Fez Domino y SBC (como en PC104 y varios formatos ITX). Hacer una placa AVR/Arduino personalizada no es demasiado complejo, pero las modificaciones importantes a Netduino o incluso el diseño (y posterior soporte) de algunas placas Linux (como Gumstix) necesitan especialistas y cuestan decenas de miles de dólares y más. Si desea que otra persona realice la mayor parte del trabajo duro y desea personalizar solo algunas partes, entonces el módulo es la palabra mágica para usted.

Definitivamente estoy de acuerdo contigo, pero en algún momento todavía necesitas una PCB. Tengo la habilidad suficiente para hacer uno para *duino y otros para crear un PCB simple para desglosar señales y energía, por lo que al menos sigue siendo bastante barato.
Es barato si no necesita miles, y si necesita más potencia, entonces los módulos como el del enlace anterior también son buenos. Tenga en cuenta que probablemente tendrá que lidiar con la detección de apagones, perturbaciones de energía si escribe en eeprom, fuente de alimentación confiable y muchas otras cosas que dependen de su aplicación específica.