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.

Deja una respuesta