Simulador de Arduino


En el mundo del modelado 3D, Tinkercad se ha establecido como una valiosa introducción al diseño asistido por computadora (CAD) . Es un programa CAD gratuito e intuitivo basado en la web que cualquiera puede usar. De hecho, si desea comenzar con Tinkercad, incluso tenemos un tutorial para principiantes para que pueda comenzar .

Recientemente, Tinkercad ha introducido algo nuevo: una expansión para incluir circuitos en su capacidad de diseño llamada Tinkercad Circuits. Esto aporta un lado completamente nuevo a Tinkercad, que gira en torno a la simulación de circuitos con Arduino.

Arduino es una plataforma de creación de prototipos electrónicos de código abierto que también vende microcontroladores. Tinkercad Circuits permite a cualquiera crear y programar virtualmente proyectos Arduino sin la necesidad de hardware físico.

En este artículo, le mostraremos cómo programar un Arduino básico en Tinkercad, pero primero, echemos un vistazo más de cerca a las nuevas capacidades que ofrece Tinkercad Circuits.

Vamos a utilizar una herramienta de Autodesk gratuita y en la red: Tinkercad , pues en efecto de servir como una herramienta excelente de diseño en 3d también incluye un editor de componentes electrónicos, y lo que es aun mas interesante : un simulador

Una vez que decida crear un circuito, utilizará el nuevo entorno de Tinkercad Circuits. Puede parecer mucho al principio, pero no se deje intimidar: tenemos toda la información que necesita para tener éxito. Verá rápidamente que esta plataforma creativa es una excelente herramienta de creación de prototipos.

Área de construcción

En el lado derecho de la pantalla, verá un grupo de componentes electrónicos de arrastrar y soltar. Además, puede buscar y filtrar a través de una cantidad impresionante de componentes disponibles: hay de todo, desde LED hasta circuitos integrados (IC), e incluso algunas herramientas de instrumentos.

El área de construcción abierta es donde diseñas su creación. La barra de herramientas superior que comienza a la izquierda le brinda las operaciones generales para rotar, eliminar e incluso tomar notas sobre sus diferentes componentes. Una característica interesante es que, además de exportar y compartir su trabajo, puede descargar la lista de componentes. Esto hace que sea más fácil llevar sus creaciones al mundo real.

Para hacer las cosas fáciles vamos a usar un simple arduino al que conectaremos 4 entradas analógicas, y 5 digitales

Las entradas analógicas las conectaremos a 4 potenciómetros cuyo punto central lo enviaremos a los GPIO simulando asi 4 señales analógicas por lo que conectaremos también estos a 4 instrumentos analógicos para que de este modo podamos comprobar el valor de las salidas.

Las entradas digitales las conectaremos a un conmutador DIP y sus salidas conectaremos también a 4 leds con sus correspondientes resistencias con el fin de poder comprobar de este modo el estado de dichos interruptores.

Por ultimo conectaremos un pulsador y un led que no indica que el circuito esta funcionando,

Mas en detalle este es el esquema del montaje:

El diseño lo p uede descargar desde https://www.tinkercad.com/things/5P9LP1tlS9O-panel-osciloscopio-con-arduino-/

Área de programación

Una vez que tenga un componente programable en su diseño, puede abrir el visor de «Código» haciendo clic en el botón en la parte superior derecha de la barra de herramientas. Actualmente, los únicos dos dispositivos disponibles son el Arduino Uno R3 y el ATTiny. (El ATTiny es un Arduino más limitado y miniaturizado).

El área de programación es un entorno de desarrollo integrado (IDE) simplificado que hace que la programación del Arduino sea muy sencilla. El método predeterminado es a través de bloques de código, que veremos más adelante, y también hay una vista dual para aprender cómo los bloques de código se traducen en código real. Para aquellos que ya están familiarizados con la biblioteca Arduino, incluso hay una vista de texto.

En cuanto al código Arduino, simplemente hay que pulsar en el botón «Código» y justo ahí copiaremos el código de mas abajo ( ojo porque debe ser correcto sintácticamente hablando, porque en caso de que cometamos un error nos dará un error)

Este es el código para probar el montaje:

#define Sel1 7 // el potenciometro  P1 LO conectamos al GPIO7
#define Sel2 8 // el potenciometro  P2 LO conectamos al GPIO8
#define Sel3 9 // el potenciometro  P3 LO conectamos al GPIO9  
#define Sel4 10 //el potenciometro  P4 LO conectamos al GPIO10

#define trigger 3 // el pin al que conectamos el pulsador

int val = 0; //val se emplea para almacenar el estado del boton
int state = 0; // 0 se muestrean las señales de los ADC
int old_val = 0; // almacena el antiguo valor de val

int y1;  //Variable donde se guardara el valor leido del pin A0
int y2;  //Variable donde se guardara el valor leido del pin A1
int y3;  //Variable donde se guardara el valor leido del pin A2
int y4;  //Variable donde se guardara el valor leido del pin A3


void setup() {
  
  Serial.begin(115200);
  pinMode(Sel1,INPUT_PULLUP);
  pinMode(Sel2,INPUT_PULLUP);
  pinMode(Sel3,INPUT_PULLUP);
  pinMode(Sel4,INPUT_PULLUP);

  pinMode(trigger,INPUT_PULLUP);
  Serial.println("Empezando la simulacion");
}

void loop() {

   val = digitalRead(trigger); // lee el estado del Boton
    if ((val == HIGH) && (old_val == LOW)) {  //Detectamos flanco de subida
        state = 1 - state;           //Cambiamos el valor de state de 0 a 1 ó de 1 a 0            
        delay(10);               //pausa de 10ms
    }
    old_val = val; // actualizamos el valor del antiguo estado


  if (!state) {  //si la variable state es 0 escribimos en el serial


        if (!digitalRead(Sel1) && !digitalRead(Sel2)&& !digitalRead(Sel3) && !digitalRead(Sel4)) {
            
            y1 = analogRead(A0);  //Leemos el conversor A1 y guardamos la lectura en sensor1
            Serial.print(y1);      //Imprimimos en el serial el valor de sensor1
            Serial.print(",");          //Imprimimos en el serial , 
            delay(10);                 //Pausa de 10ms

            y2 = analogRead(A1);  //Leemos el conversor A1 y guardamos la lectura en sensor1
            Serial.print(y2);      //Imprimimos en el serial el valor de sensor1
            Serial.print(",");          //Imprimimos en el serial , 
            delay(10);                 //Pausa de 10ms

            y3 = analogRead(A2);  //Leemos el conversor A1 y guardamos la lectura en sensor1
            Serial.print(y3);      //Imprimimos en el serial el valor de sensor1
            Serial.print(",");          //Imprimimos en el serial , 
            delay(10);                 //Pausa de 10ms

            y4 = analogRead(A3);  //Leemos el conversor A1 y guardamos la lectura en sensor1
            Serial.println(y4);      //Imprimimos en el serial el valor de sensor1
            //Serial.println(" ");          //Imprimimos en el serial , 
            delay(10);                 //Pausa de 10ms
        }

    
          if (digitalRead(Sel1) && !digitalRead(Sel2)&& digitalRead(Sel3) && digitalRead(Sel4)) {
            
           // y1 = analogRead(A0);  //Leemos el conversor A1 y guardamos la lectura en sensor1
           // Serial.print(y1);      //Imprimimos en el serial el valor de sensor1
            Serial.print("");
            Serial.print(",");          //Imprimimos en el serial , 
            delay(10);                 //Pausa de 10ms

            y2 = analogRead(A1);  //Leemos el conversor A1 y guardamos la lectura en sensor1
            Serial.print(y2);      //Imprimimos en el serial el valor de sensor1
            Serial.print(",");          //Imprimimos en el serial , 
            delay(10);                 //Pausa de 10ms

           // y3 = analogRead(A2);  //Leemos el conversor A1 y guardamos la lectura en sensor1
          //  Serial.print(y3);      //Imprimimos en el serial el valor de sensor1
            Serial.print("");
            Serial.print(",");          //Imprimimos en el serial , 
            delay(10);                 //Pausa de 10ms

            //y4 = analogRead(A3);  //Leemos el conversor A1 y guardamos la lectura en sensor1
           // Serial.println(y4);      //Imprimimos en el serial el valor de sensor1
            Serial.println(" ");          //Imprimimos en el serial , 
            delay(10);                 //Pausa de 10ms
        }
        


    }

}

Solución de problemas:  si su programa no se comporta como se esperaba, verifique su cableado y programación. Asegúrese de que todos los pines estén conectados correctamente y de que cada bloque esté escrito correctamente.

Si todo parece funcionar, ¡enhorabuena! Siempre puede seguir jugando con el código y los diferentes componentes para aprender más sobre cómo funciona todo.

Entorno abierto y gratuito para simulacion


MyOpenlab es un entorno orientado a la simulación y modelado de sistemas físicos, electrónicos y de control con un amplio campo de aplicaciones: Simulación de Circuitos digitales y/o Analógicos,Simulación de Instrumentos, Simulación de Automatismos, Modelado de Fenómenos Físicos, Simulación de Automatismos, Simulación de Robots, Control de Elementos Físicos mediante Interfaces, Tratamiento de Imágenes y Sonidos, Operaciones con matrices y vectores 2D y 3D,etcMyOpenLab es una plataforma libre, licencia LGPL ,gratuita y en la que son  soportados los idiomas  Ingles ,alemán y español.

Esta herramienta esta recomendada para estudiantes de prácticamente todos los niveles  , estando desarrollada en el lenguaje JAVA  y  Netbeans (no afecta a las plataformas hw) siendo por ello  portable a distintas plataformas  tanto  para Linux ,Mac como para Windows.

En el campo del modelado y simulación es muy interesante contar con una herramienta flexible que a partir de una amplia biblioteca de bloques funcionales permita realizar modelos a base de conectar bloques funcionales.

MyOpenLab es capaz de conectarse al mundo físico mediante una interface de amplia difusión en el mercado como es la Tarjeta Experimental (USB) K8055 de Valleman. También soporta Velleman (R) PCS10 / grabador K8047 / registrador, USB CompuLab Interfaz (bus de módulo),Arduino (actualmente con los componentes «IO de interface» y «Firmata IO Interface» disponibles) y en general  cualquier hardware que implementa el protocolo Firmata y Balón por encima del RS232.

La  placa HQ K8055N – Tarjeta interfaz USB de experimentación de Velleman( unos 36€ en Amazon.es )  es muy útil para la realización de aplicaciones de adquisición de datos y control con PC pues la conexión al PC es mediante USB. La K8055 no es programable lo que significa que para que funcione debe estar siempre conectada al puerto. El control, pues, lo realiza siempre el PC con la aplicación de MyOpenLab que esté en ejecución.

HQ K8055N - Tarjeta interfaz USB de experimentación

La presentación de los resultados y/o el control de las simulaciones se hacen mediante un potente conjunto de bloques de función de visualización y/o interacción capaz de manejar todo tipo de datos (analógicos, digitales, matrices, vectores, imágenes, sonidos, etc.)

A la facilidad de uso se  une una amplia biblioteca de funciones tanto para manejo de señales analógicas como digitales como por ejemplo librerías de elementos de Visualización y Control (Panel Frontal):Elementos de Decoración, Elementos de visualización numérica ,Elementos de activación digital ,Elementos de Entrada y salida de cadenas de caracteres,Elementos de entrada y salida tipo vectores y matrices de datos,Elementos de visualización gráfica en ejes coordenados I ,Elementos de visualización gráfica en ejes coordenados II,Librería de Extras,Elementos de Automatización ,Elementos de librería de usuario ,Robot 2D  
y también  librerías de Elementos Funcionales (Panel Lógico) : Elementos de decoración ,Operadores Digitales,Operadores Numéricos,Tratamiento de Caracteres,Elementos Analógicos,Utilidades,Ficheros de Entrada/Salida,Comparadores,Tratamiento de Imágenes,Tratamiento de Sonidos,Color,Pines de E/S,Vectores y matrices,Agrupación de Elementos,Objetos Gráficos “canvas”,Librería de Física,Librería de Diagramas de Flujo,Librería de Extras,Librería de Conexiones entre aplicaciones,Librería definida por el Usuario,Automation+librería de Automatización Interfaces  así como  otra  potente biblioteca de objetos gráficos tipo «canvas» mediante la que se puede dotar de       movimiento cualquier objeto o imagen asociándola a variables de los modelos a simular.

Incluso es posible la ampliación de su librería de componentes, editándolos en código JAVA , así como  creando  «submodelos de panel» y «submodelos de circuito» encapsulados.

Otras de las facilidades del programa es el tratamiento de los tipos de datos ,permitiendo crear pantallas de visualización que recojan el estado de las variables y eventos de las simulaciones y operaciones con estos,  llegando incluso a la realización de las aplicaciones mediante el uso de bloques de función con la posibilidad de encapsularlos en «macros».
myopen

El programa puede funcionar en plataformas Linux y sus requerimientos de sistema son muy poco restrictivos, lo cual lo hace ideal para usar en casi cualquier equipo, bastando con  que se instale el runtime de JAVA JRE o JDK.

Para instalar este programa  puede seguir los siguientes pasos:

  1. Descargar MyOpenLab ,para conseguir el programa diríjase a : http://es.myopenlab.de

  2. Si no lo tiene ya descargue Java SE 7 o posterior del http://java.com/de/.

  3. Descomprimir el Archivo de distribución con Winzip o WinRar. (Precaución: no se ejecutan directamente desde el archivo)

  4. En el directorio descomprimido el archivo Ejecutar «start.bat»

  5. Confirmar licencias (sólo la primera vez)

  6. Ahora puede cargar un proyecto de ejemplo y ejecutar (estos están en el directorio MyOpenLab: por ejemplo: ejemplos)

  7. Nota para los usuarios de Linux:Antes de empezar a MyOpenLab usted deberá ejecutar  chmod + x start_linux en el directorio de distribución de otro modo run.

  8. Nota para los usuarios de Ma3 RS232 no funciona en el Mac .

Requisitos:

  • Desde Windows XP 32/64, 32/64 Linux
  • Java 7

  • Para aplicaciones 3D: (Sólo para Java 7) Java3D

  • Mínimo espacio en disco duro minuto 50 MB

  • Pantalla de activación min. 1024×768 píxeles

Ahora puede unirse al grupo de trabajo de MyOpenLab. El código fuente y compilado esta disponible enhttps://sourceforge.net/p/myopenlab3/