dpto tecnología

26 feb. 2014

más ejercicios de motores eléctricos

De editorial Donostiarra, una muestra

ARDUINO EN EL AULA DE TECNOLOGÍAS

Os cuelgo el tutorial/manual/libreto titulado "ARDUINO EN EL AULA DE TECNOLOGÍAS"que he preparado para impartir la parte de Arduino. Es de libre uso y libre difusión, siempre que no se modifique sin conocimiento del autor. Si encuentras algún fallo -seguro- , o para cualquier sugerencia, te agradecería que lo dejases a modo de comentario en esta misma entrada. Disfrútalo!

19 feb. 2014

entradas y salidas iteaduino

Aquí os pongo las entradas y salidas de la placa ITEADUINO que vamos a usar en el aula. Atención especial a los pines PWM

Each of the 20 digital i/o pins on the Uno can be used as an input or output, using pinMode(), digitalWrite(), anddigitalRead() functions. They operate at 5 volts. Each pin can provide or receive a maximum of 40 mA and has an internal pull-up resistor (disconnected by default) of 20-50 kOhms. In addition, some pins have specialized functions:
  • Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data using the ATmega32U4hardware serial capability. Note that on the Leonardo, the Serial class refers to USB (CDC) communication; for TTL serial on pins 0 and 1, use the Serial1 class.
  • TWI: 2 (SDA) and 3 (SCL). Support TWI communication using the Wire library.
  • External Interrupts: 2 and 3. These pins can be configured to trigger an interrupt on a low value, a rising or falling edge, or a change in value. See the attachInterrupt() function for details.
  • PWM: 3, 5, 6, 9, 10, 11, and 13. Provide 8-bit PWM output with the analogWrite() function.
  • SPI: on the ICSP header. These pins support SPI communication using the SPI library. Note that the SPI pins are not connected to any of the digital I/O pins as they are on the Uno, They are only available on the ICSP connector. This means that if you have a shield that uses SPI, but does NOT have a 6-pin ICSP connector that connects to the Leonardo's 6-pin ICSP header, the shield will not work.
  • LED13. There is a built-in LED connected to digital pin 13. When the pin is HIGH value, the LED is on, when the pin is LOW, it's off.
  • Analog Inputs: A0-A5, A6 - A11 (on digital pins 4, 6, 8, 9, 10, and 12). The Leonardo has 12 analog inputs, labeled A0 through A11, all of which can also be used as digital i/o. Pins A0-A5 appear in the same locations as on the Uno; inputs A6-A11 are on digital i/o pins 4, 6, 8, 9, 10, and 12 respectively. Each analog input provides 10 bits of resolution (i.e. 1024 different values). By default the analog inputs measure from ground to 5 volts, though is it possible to change the upper end of their range using the AREF pin and the analogReference() function.
There are a couple of other pins on the board:
  • AREF. Reference voltage for the analog inputs. Used with analogReference().
  • Reset. Bring this line LOW to reset the microcontroller. Typically used to add a reset button to shields which block the one on the board.

Controlando motores con el driver tb6612fng

Como ya hemos dicho, las salidas de nuestra placa nos proporcionan una intensidad baja. Esa intensidad se queda corta a la hora de accionar muchos elementos, como por ejemplo los motores de cc que tanto usamos en el aula.

Podemos amplificar fácilmente esta señal por medio de un transistor, pero vamos a aprender a usar un driver que nos ofrece más posibilidades. Se trata del TB6612FNG.

El driver TB6612FNG nos permite controlar dos motores basándose en un doble puente-H. Con él podemos fijar el sentido de giro e incluso gracias a una salida tipo PWM ajustar la velocidad de giro. Recuerda que las salidas PWM son aquellas que delante del su número tienen el símbolo ~.

El aspecto que presenta el fabricado por POLOLU es el siguiente:




A pesar de su aspecto, la conexión es sencilla. Como siempre, lo primero que deberíamos hacer es ir al datasheet del componente. Allí encontraremos todos los datos que nos hacen falta. Como se te nota poco motivado, vamos a ir conectando cables y verás que no era tan complicado. Empezando por la izquierda:

  • GND y VCC: es la alimentación de micro. Podemos sacarla de un GND y del +5V de la Arduino, o de otro sitio siempre que esté entre 2.5 y 13v.

  • AO1 y AO2: aquí conectaremos los dos bornes del motor A.

  • BO1 y BO2: o, de output, salida, b del motor y 1 y 2 de cada una de ellas. Salidas para el motor B.

  • Vmot y GND: alimentación externa para los motores, baterías, fuente de alimentación…

 Ya llevamos 8 pines y no tenemos bajas, seguimos con la parte derecha:

  • PWMA: controla la velocidad por medio de una salida digital con PWM (modulación por ancho de pulsos) del motor A. Recuerda que tiene que tener el símbolo ~ delante.

  • AIN2 y AIN1: para controlar el sentido de giro de un motor necesitamos dos salidas digitales de la placa. Usaremos dos cualquiera para el motor A.

  • STBY, standby: poniéndolo en LOW conseguimos parar los motores. Lo conectaremos a otra salida digital.

  • BIN1 y BIN2, in, entrada, b, del motor B, 1 y 2, cada una de las dos. Las  conectaremos a  dos salidas digitales de la placa.

  • PWMB: control de velocidad del motor B. 0 parado, 255 velocidad máxima.

Ya lo tenemos conectado. Vamos con el código.


//CONTROLANDO MOTORES CC CON UN DRIVER 6612
//motor A conectado a A01y A02
//motor B conectado a B01 y B02

int STBY = 10;           // definimos el pin de standby

//Motor A
int PWMA = 3;          // Control de velocidad
int AIN1 = 9;             // Dirección
int AIN2 = 8;             // Dirección

//Motor B
int PWMB = 5;           // Control de velocidad
int BIN1 = 11;                       // Dirección
int BIN2 = 12;            // Direccion

void setup(){
  pinMode(STBY, OUTPUT);

  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);

  pinMode(PWMB, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
}

void loop(){
  mover(1, 255, 1);                  // acciona el motor 1, velocidad máxima, adelante
  mover(2, 255, 1);                  // acciona el motor 2, velocidad máxima, adelante

  delay(1000);                                     // durante un segundo
  stop();                                   // para los motores
  delay(1000);                                     // espera  1 segundo

  mover(1, 128, 0);                  // acciona el motor 1, velocidad media , atrás
  mover(2, 128, 0);                  // acciona el motor 2, velocidad media , atrás
  delay(1000);
  stop();
  delay(1000);
}

void mover(int motor, int velocidad, int direccion){

//Vamos a definir la funcion move, que va a acciona un motor, fijar su velocidad y el sentido de giro. Definimos:    //motor: 1 para el motor A,  2 para el motor B
//velocidad: desde 0 a 255
//direccion: 0 sentido horario, 1 sentido antihorario

  digitalWrite(STBY, HIGH);                       //deshabilitar standby

  boolean inPin1 = LOW;
  boolean inPin2 = HIGH;

  if(direction == 1){
    inPin1 = HIGH;
    inPin2 = LOW;
  }

  if(motor == 1){
    digitalWrite(AIN1, inPin1);
    digitalWrite(AIN2, inPin2);
    analogWrite(PWMA, speed);
  }else{
    digitalWrite(BIN1, inPin1);
    digitalWrite(BIN2, inPin2);
    analogWrite(PWMB, speed);
  }
}
void stop(){
//enable standby 
  digitalWrite(STBY, LOW);

}

llegando las últimas piezas para la bestia....


No es un error de imagen.... sino el material del chasis... Gracias a Ignacio.

Ejercicios resueltos de motores eléctricos

Os paso el enlace de los ejercicios resueltos de la Junta de Andalucía que estamos haciendo en clase.

http://www.juntadeandalucia.es/averroes/ies_sierra_magina/d_tecnologia/LIBRO/pdf/maquipro.pdf

13 feb. 2014

Cubo de led 3x3x3 Arduino

Hemos realizado un cubo de led 3x3x3 con una placa Arduino Uno, nos ha hecho falta los siguientes materiales:

- 27 led de color blanco
- Cables para realizar las conexiones entre placa y led.
- 11 resistencias en la union de la placa con los led.
- Estaño para soldar todas las conexiones.
- 3 Transistores de referencia BD 135
- 1 Placa de ArduinoUno
- 1 placa de conexiones


Pasos realizados para hacer el montaje:

1) Realizamos el cubo con los led, soldando los leds entre ellos.
Cubo de Leds 3x3x3
2) Insertamos las resistencias, transistores y el cubo de led a la placa de conexiones.
3) Unimos con los cables la placa arduino a la placa de conexiones.
4) Soldamos las conexiones.
5) Conectamos la placa arduino al ordenador y transferimos el codigo.

Este seria el esquema a seguir para realizar las conexiones:


 Uno de los muchos codigos que se pueden utilizar:

int Columnas[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int Filas[] = {12, 11, 10};
int RandFila;     //Variable para fila aleatoria
int RandColumna;  //Variable para columna aleatoria
void setup()
{
  int contador;
  for (int contador = 1; contador < 10; contador++){
    pinMode(Columnas[contador], OUTPUT); }
  for (int contador = 1; contador < 4; contador++){
    pinMode(Filas[contador], OUTPUT); }
}
void loop()
{
  RandLed();
}
void RandLed()
{
  RandFila = random(0,3);
  RandColumna = random(0,9);
  digitalWrite(Filas[RandFila], HIGH);
  digitalWrite(Columnas[RandColumna], HIGH);
  delay(75);
  digitalWrite(Filas[RandFila], LOW);
  digitalWrite(Columnas[RandColumna], LOW);
  delay(50);
}
Imágenes de nuestro proyecto ya terminado:









Aquí un vídeo de demostración del proyecto: