Mostrando entradas con la etiqueta Tecno 4º-ardu3. Mostrar todas las entradas
Mostrando entradas con la etiqueta Tecno 4º-ardu3. Mostrar todas las entradas

3 jun 2014

Arduino CNC (drived by adafruit motorshield) with DVD drives.

I am documenting how to build a simple structure for a 2 axis CNC.
I've used 2 DVD-ROM drives for the stepper motors (I'm assuming about 23 steps/revolution). (pictures below)
The motor driver is adafruit motorshield . It uses H-bridge for steppers so it's not supported by grbl directly.
You 'll need other software to communicate the CAM software with arduino.
STEPS:
  1. Load CNC controller program into arduino.
  2. Design your model.
  3. Generate GCODE
  4. Transmit GCODE to Arduino
  5. MOVE!!
Now, the links with the software for each step:
  1. GCodeCNCDemo ( https://www.marginallyclever.com), for compiling you'll need this library (AFMotorDrawBot).
  2. I'm using a VERY simple gcode generator for 2 axis works online in HTML5. Here
  3. It's generated by the above http://simplegcoder.com/
  4. Transmit the code so GCodeCNCDemo understands it with GCodeSender. (Dan-Marginallyclever)
  5. Move (VIDEO)

BUILDING STEPS








20 mar 2012

TEC4ºESO. Arduino III. Prácticas. Display

Arduino y Display 7 segmentos
Para controlar una pequeña pantalla de leds utilizaremos el display de 7 segmentos que podemos ir configurando desde Arduino para que nos muestre letras o números.
Como los displays que tenemos en el taller son de ánodo común, debemos conectar sus patillas centrales (de la fila superior e inferior) a 5V (através de una resistencia de 220).

Cada Patilla del display se corresponde con uno de sus leds según puedes observar en la siguiente imagen:
Lo siguiente es conectar cada uno de los leds del display a un pin digital de Arduino que nos permitirá encenderlo o apagarlo según nos interese. Debido a la configuración de ánodo común, para encender un led determinado del display tendremos que escribir un LOW en el pin digital correspondiente (lo usual sería escribir un HIGH)
El código del programa podemos estructurarlo en subprogramas. En nuestro caso cada programa va a representar un número en la pantalla. Para crear un subprograma debemos ponerle un nombre (único que usaremos más adelante en la sección loop)
A continuación puedes ver el código para el subprograma cero , que enciende (y apaga) los leds necesarios para que se muestre el cero en el display:
void cero()
{
  digitalWrite(a, LOW); 
  digitalWrite(b,  LOW ); 
  digitalWrite(c,  LOW );
  digitalWrite(d,  LOW );
  digitalWrite(e,  LOW );
  digitalWrite(f,  LOW ); 
  digitalWrite(g, HIGH); 
  }
Del mismo modo hay que crear un subprograma por cada carácter que queramos mostrar en el display.
Una vez hechos los subprogramas sólo tenemos que utilizarlos desde loop, poniendo su nombre. De este modo Arduino sustituirá el nombre por todo el código que hayamos escrito en la función. Ejemplo:
void loop()
{
   cero();
   delay (500);
   uno();
   delay (500);
   dos();
}

1 ene 2012

TEC 4ºESO: Bluetooth + Arduino

El protocolo de red bluetooth permite conectar dispositivos de manera inalámbrica a cortas distancias y es mayormente utilizado para conectar entre si smartphones, tablets, impresoras, teclados o cámaras de fotos, entre otros. 

El rango de distancia, va desde 1 a 100 metros, aunque la distancia normal máxima de funcionamiento es de una decena de metros. 
La velocidad de transmisión no es muy alta, es muy inferior a la transmisión a través de WiFi o 3G. Suele ir desde 2 a 20Mb/s. 
El uso que le vamos a dar con Arduino, nos permite enviar y/o recibir datos desde/hacia la tarjeta, y por tanto podremos leer daots desde sensores conectados a Arduino y enviarlo a un teléfono o de manera inversa enviar datos desde una tablet a la tarjeta parta que realice alguna acción.

El módulo bluetooth se conecta a Arduino mediante 4 cables:
  • Alimentación (+5V)
  • GND 
  • TX (Para transmitir datos) -> PIN0
  • RX (Para recibir datos) -> PIN1





Para el control (enviar/recibir datos) podemos usar:
  • Ordenador con bluetooth
  • Dispositivo móvil (tlf, tablet...)
En nuestro ejemplo vamos a usar el SO Android para el control, podemos usar 2 aplicaciones sencillas:


Debes incluir los siguientes elementos en el código de tu programa:
INICIO

 byte dato;
 char* mensaje;
SETUP
  Serial.begin(9600);  
LOOP



  // mira si se ha recibido algo del puerto serie:
  if (Serial.available()) {
    // lee el ultimo byte recibido
    dato=Serial.read();
    switch(dato){    //Dependiendo del dato recibido....
      case 81: // q
        .....
        mensaje="ADELANTE";
        break;
      case 65: // a
        .....
        mensaje="ATRAS";
        break;
      case 85: // u
        ......
        mensaje="IZQ";
        break;
      .......      //Para cada tecla tenemos que definir lo que hace
      default:     //Si no es ninguna tecla de las definidas
        Serial.print(dato);
        Serial.print(": ");
        mensaje="Tecla no admitida !";
       }
    Serial.println(mensaje); //Envía al emisor el mensaje
  }


Para poder conectar por bluetooth con arduino hay que seguir los pasos:

  1. Descargar la aplicación android (o desde el ordenador)
  2. Desconectar el módulo bluetooth de la placa arduino.(interfiere al transmitir)
  3. Cargar el programa a la placa.
  4. Conectar el módulo a Arduino.
  5. Emparejar los dispositivos:
    1. Abrir el programa en Android
    2. Buscar dispositivos (su nombre es linvor)
    3. Conectar con el dispositivo (clave : 1234)
  6. A FUNCIONAR!!
Esquema del módulo:

31 dic 2011

Conectar 2 Arduino para comunicarse

Podemos conectar 2 Arduino para que se envíen datos uno al otro de muchas maneras, ya hemos visto el bluetooth, también mediante otros sistemas inalámbricos, como xbee, cable de red ethernet, etc.
Pero vamos a ver un método sencillo, mediante la conexión serie que todas las Arduino llevan y que normalmente usamos para cargar los programas o para ver por el monitor del IDE lo que ocurre en nuestra tarjeta.
El proceso es parecido al bluetooth. 

Aquí queremos que una Arduino envíe (MAESTRO) y que otra reciba (ESCLAVO), así que cada una correrá un programa distinto.
Podemos hacer también que ambas tarjetas envíen y reciban datos, para ello, la modificación sobre lo que expongo aquí serían muy sencillas, (básicamente copiar y pegar los trozos de código intercambiados.
Conexiones:
Usaremos los pines estándar de comunicación serie de Arduino:
0 : RX (pin por el que RECIBE los datos serie)
1 : TX (pin por el que ENVÍA los datos serie)

Para comunicación en 2 direcciones (los 2 pueden envíar/ recibir).
Las conexiones TX/RX se intercambian (lo que uno envía -TX- tiene que entrar en el otro -RX-).
Cualquiera de las 2 pueden ser Maestro o Esclavo.
IMPORTANTE: Para la correcta comunicación serie necesitamos unir los GND de las 2 Arduino

Para la comunicación en 1 dirección [  maestro(izquierda)->esclavo(derecha)  ] sólo necesitamos 1 conexión:


NOTA: Ocurre que esos pines también los usa para comunicarse por USB cuando está conectado al ordenador, de manera que si queremos tener ambas conexiones (USB/trasmisión serie) deberemos crear una nueva conexión serie (en una conexión software).
En este ejemplo, una de las Arduino la vamos a tener conectada al PC, por tanto, en el MAESTRO vamos a crear la conexión software serie sobre los pines 10(RX), 11(TX).


esclavomaestro

CÓDIGO:
En el siguiente ejemplo , el maestro, cada 3 segundos envía un carácter al esclavo.
Si envía una "r", el esclavo hará parpadear su led (d13) rápido.
Si envía una "l", el esclavo hará parpadear su led (d13) lento.

MAESTRO:
//MAESTRO
#include
int i=0; 
SoftwareSerial Serie2(10,11); //CREAMOS UN NUEVO PUERTO SERIE (RX, TX)

void setup()
{
  pinMode(13,OUTPUT);
  Serial.begin(9600);          //Inicializa puerto estándar
  Serie2.begin(9600);         //Inicializa nuevo puerto
  digitalWrite(13,LOW);
}

void loop()
{
  Serie2.write("r");
  delay(3000);
  Serie2.write("l");
  delay(3000);
}



ESCLAVO:
//ESCLAVO
void setup()
{
  pinMode(13,OUTPUT);
  Serial.begin(9600);
  //Apagamos el led 13
  digitalWrite(13,LOW);
}

void loop()
{
  while (Serial.available())
   {
      //Guardamos en la variable dato el valor leido
       char dato= Serial.read();
       //Comprobamos el dato
       switch(dato)
       {
         //Si recibimos una 'r' ...
         case 'r':
         {
           for(int i=0; i<20 font="" i="">
               digitalWrite(13,HIGH);
               delay(80);
               digitalWrite(13,LOW);
               delay(80);}
           break;
         }
         case 'l':
         {
             for(int i=0; i<10 font="" i="">
               digitalWrite(13,HIGH);
               delay(200);
               digitalWrite(13,LOW);
               delay(200);}
           break;
}}}}