práctica 5-arduino

11
 http://www.sh erkhan.net/blog s/frikadas/? cat=1 checar LM35 practica  Práctica Arduino pines son grandes para controlar directamente los pequeños artículos eléctricos como los LEDs. Sin embargo, cuando se trata de los artículos más grandes (como un mot or de juguete o una máquina de lavar), un transistor externo es necesario. Un transistor es increíblemente útil. Se enciende una gran cantidad de corriente con un mucho menor actual. Un transistor tiene 3 patas. Para un tipo negativo (NPN) del transistor se conecta la carga al colector y el emisor a tierra. Entonces, cuando una corriente fluye pequeña de la base al emisor una corriente fluirá a través del transistor y el motor hará girar (esto sucede cuando fijamos nuestra Arduino PIN de alto). Hay literalmente miles de diferentes tipos de transistores, permitiendo que todas las situaciones que se adapta perfectamente. Hemos elegido un P2N2222AG un propósito común general y no del transistor. Los factores importantes en nuestro caso es que la tensión máxima (40 V) y su máxima corriente (600 mA) son lo suficientemente alta para nuestro motor de juguete (los detalles se pueden encontrar en su hoja de datos http://ardx.org/2222 ). Material necesario: Esquemático, de conexión:

Upload: jg-tello

Post on 14-Jul-2015

183 views

Category:

Documents


0 download

TRANSCRIPT

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 1/11

 

http://www.sherkhan.net/blogs/frikadas/?cat=1 checar LM35 practica 

Práctica

Arduino pines son grandes para controlar directamente los pequeños artículos eléctricos como los LEDs.

Sin embargo, cuando se trata de los artículos más grandes (como un motor de juguete o una máquina delavar), un transistor externo es necesario. Un transistor es increíblemente útil. Se enciende una grancantidad de corriente con un mucho menor actual. Un transistor tiene 3 patas. Para un tipo negativo(NPN) del transistor se conecta la carga al colector y el emisor a tierra. Entonces, cuando una corrientefluye pequeña de la base al emisor una corriente fluirá a través del transistor y el motor hará girar (estosucede cuando fijamos nuestra Arduino PIN de alto). Hay literalmente miles de diferentes tipos detransistores, permitiendo que todas las situaciones que se adapta perfectamente. Hemos elegido unP2N2222AG un propósito común general y no del transistor. Los factores importantes en nuestro casoes que la tensión máxima (40 V) y su máxima corriente (600 mA) son lo suficientemente alta paranuestro motor de juguete (los detalles se pueden encontrar en su hoja de datos http://ardx.org/2222).

Material necesario:

Esquemático, de conexión:

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 2/11

 

 Otro vista de la conexión:

Código:

/* -----------------------------------------------------------* | Arduino Experimentation Kit Example Code |* | CIRC-03 .: Spin Motor Spin :. (Transistor and Motor) |

* -----------------------------------------------------------** The Arduinos pins are great for driving LEDs however if you hook* up something that requires more power you will quickly break them.* To control bigger items we need the help of a transistor.* Here we will use a transistor to control a small toy motor** http://tinyurl.com/d4wht7**/

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 3/11

 

 int motorPin = 9; // define the pin the motor is connected to

// (if you use pin 9,10,11 or 3you can also control speed)

/** setup() - this function runs once when you turn your Arduino on* We set the motors pin to be an output (turning the pin high (+5v) or low(ground) (-))* rather than an input (checking whether a pin is high or low)*/void setup(){pinMode(motorPin, OUTPUT);}

/** loop() - this function will start after setup finishes and then repeat* we call a function called motorOnThenOff()*/

void loop() // run over and over again{motorOnThenOff();//motorOnThenOffWithSpeed();//motorAcceleration();}

/** motorOnThenOff() - turns motor on then off* (notice this code is identical to the code we used for* the blinking LED)*/void motorOnThenOff(){int onTime = 2500; //the number of milliseconds for the motor to turn on

forint offTime = 1000; //the number of milliseconds for the motor to turn off

for

digitalWrite(motorPin, HIGH); // turns the motor Ondelay(onTime); // waits for onTime millisecondsdigitalWrite(motorPin, LOW); // turns the motor Offdelay(offTime); // waits for offTime milliseconds

}

/** motorOnThenOffWithSpeed() - turns motor on then off but uses speed values

as well* (notice this code is identical to the code we used for* the blinking LED)*/void motorOnThenOffWithSpeed(){

int onSpeed = 200; // a number between 0 (stopped) and 255 (full speed)int onTime = 2500; //the number of milliseconds for the motor to turn on

for

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 4/11

 

int offSpeed = 50; // a number between 0 (stopped) and 255 (full speed)int offTime = 1000; //the number of milliseconds for the motor to turn off

for

analogWrite(motorPin, onSpeed); // turns the motor Ondelay(onTime); // waits for onTime millisecondsanalogWrite(motorPin, offSpeed); // turns the motor Offdelay(offTime); // waits for offTime milliseconds

}

/** motorAcceleration() - accelerates the motor to full speed then* back down to zero*/void motorAcceleration(){int delayTime = 50; //milliseconds between each speed step

//Accelerates the motorfor(int i = 0; i < 256; i++){ //goes through each speed from 0 to 255analogWrite(motorPin, i); //sets the new speed

delay(delayTime); // waits for delayTime milliseconds}

//Decelerates the motorfor(int i = 255; i >= 0; i--){ //goes through each speed from 255 to 0analogWrite(motorPin, i); //sets the new speeddelay(delayTime); // waits for delayTime milliseconds

}}

Para mejorar y extender un poco más la práctica con los mismos componentes y la misma conexión,controlaremos la velocidad, con solo aumentar las l íneas del programa.

Control de velocidad: Jugamos con Arduino la capacidad de controlar el brillo de un LED a principios deahora vamos a utilizar la misma característica para controlar la velocidad de nuestro motor. El Arduinohace algo utilizando llamada modulación por ancho de pulso (PWM). Esto se basa en la capacidad delArduino para operar muy, muy rápido. En lugar de controlar directamente la tensión procedente de laclavija de la Arduino cambiará el pasador de encendido y apagado muy rápidamente. En el mundo de lainformática se trata de pasar de 0 a 5 voltios muchas veces por segundo, pero en el mundo humano lovemos como un voltaje. Por ejemplo, si el Arduino es PWM'ing el 50% vemos la luz tenue del 50%,

porque nuestros ojos no son lo suficientemente rápido como para ver que parpadeando. La mismacaracterística funciona con transistores. Entonces hagámoslo:

Las líneas de programación que se aumentarían son:

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 5/11

 

In the loop() section change it to this

// motorOnThenOff();

motorOnThenOffWithSpeed();

//motorAcceleration();

A continuación, cargar el programa. Puede cambiar la velocidad al cambiar las variables ONSPEED ycambios de velocidad

Aceleración y desaceleración: ¿Por qué parar a dos velocidades, ¿por qué no acelerar y desacelerar elmotor. Para ello basta con modificar el loop () el código para leer

// motorOnThenOff();

// motorOnThenOffWithSpeed();

motorAcceleration();

A continuación, cargar el programa y ver como poco a poco el motor se acelera hasta la velocidadmáxima luego disminuye de nuevo. Si desea cambiar la velocidad de la aceleración del cambioDelayTime variable (más grande significa un tiempo de aceleración más).

Práctica

Girar un motor es muy divertido, pero cuando se trata de proyectos en control de movimiento es necesario quetienden a dejarnos con ganas de más. ¿La respuesta? Hobby servos. Ellos son producidos en masa, ampliamentedisponible y cuesta cualquier cosa de un par de dólares a cientos de personas. En el interior es una caja de cambiospequeños (para hacer el movimiento más poderoso) y la electrónica de algunos (para que sea más fácil decontrolar). Un servo estándar es posicionable 0 a 180 grados. El posicionamiento es controlado a través de unpulso de tiempo, entre 1,25 milisegundos (0 grados) y 1,75 milisegundos (180 grados) (1,5 milisegundos por 90grados). El tiempo varía entre el fabricante. Si el pulso se envía cada 25 a 50 milisegundos el servo se ejecutará sinproblemas. Una de las grandes características de la Arduino es que tiene una biblioteca de software que le permitecontrolar dos servos (conectado al pin 9 o 10) con una sola línea de código.

Material necesario:

Esquemático, de conexión:

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 6/11

 

 

Código de programación:

File > Examples > Library-Servo > Sweep(example from the great arduino.cc site check it out for other great ideas) // Sweep// by BARRAGAN <http://barraganstudio.com>#include <Servo.h>Servo myservo; // create servo object to control a servoint pos = 0; // variable to store the servo positionvoid setup() {myservo.attach(9); // attaches the servo on pin 9 to the servo object}void loop() {for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees{ // in steps of 1 degreemyservo.write(pos); // tell servo to go to position in variable 'pos'delay(15); // waits 15ms for the servo to reach the position}for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees{myservo.write(pos); // tell servo to go to position in variable 'pos'delay(15); // waits 15ms for the servo to reach the position}}

Práctica

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 7/11

 

 

Es hora de empezar a jugar con fichas. O de circuitos integrados (CI), como les gusta llamarse. El embalaje exteriorde un chip puede ser muy engañosa, por ejemplo, el chip de la placa Arduino (un microcontrolador) y la vamos autilizar en este circuito (un registro de cambio) son muy similares pero en realidad son bastante diferentes, porejemplo, la precio de los chips Atmega en la placa Arduino es un par de dólares, mientras que el 74HC595 es un parde docenas de centavos. Es un chip de introducción buena, y una vez que su cómodo jugando un rato con él y suhoja de datos (disponible en línea http://ardx.org/74HC595) el mundo de los chips será su ostra. El registro decambio (también llamado convertidor de serie a paralelo), le dará un adicional de 8 salidas (para controlar los LEDs,etc) usando solamente tres pernos Arduino. También se pueden unir para darle un número casi ilimitado de losresultados utilizando los mismos cuatro pernos. Para usarlo "reloj" de los datos y, a continuación del cierre debloqueo en (se cierre). Para ello se establece el pin de datos a alta o baja, el pulso del reloj, a continuación,establecer los datos de anclaje y el pulso de nuevo el reloj de repetición hasta que se han desplazado a 8 bits dedatos. A continuación, el pulso de la cerradura y los 8 bits se transfieren a los registros de cambio alfileres. Suenacomplicado, pero es muy simple una vez que la caída de ella.

Material necesario:

Esquemático, de conexión:

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 8/11

 

 

Mejor vista del esquema de conexión:

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 9/11

 

 

Código de programación:

/* ---------------------------------------------------------* | Arduino Experimentation Kit Example Code |* | CIRC-05 .: 8 More LEDs :. (74HC595 Shift Register) |* ---------------------------------------------------------

** We have already controlled 8 LEDs however this does it in a slightly* different manner. Rather than using 8 pins we will use just three* and an additional chip.***/

//Pin Definitions//The 74HC595 using a protocol called SPI (for more detailshttp://www.arduino.cc/en/Tutorial/ShiftOut)//Which has three pins

int data = 2;int clock = 3;int latch = 4;

//Used for single LED manipulationint ledState = 0;const int ON = HIGH;const int OFF = LOW;

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 10/11

 

/** setup() - this function runs once when you turn your Arduino on* We set the three control pins to outputs*/void setup(){pinMode(data, OUTPUT);pinMode(clock, OUTPUT);pinMode(latch, OUTPUT);

}

/** loop() - this function will start after setup finishes and then repeat* we set which LEDs we want on then call a routine which sends the states tothe 74HC595*/void loop() // run over and over again{int delayTime = 100; //the number of milliseconds to delay between LED

updates

for(int i = 0; i < 256; i++){updateLEDs(i);delay(delayTime);}

}

/** updateLEDs() - sends the LED states set in ledStates to the 74HC595* sequence*/void updateLEDs(int value){digitalWrite(latch, LOW); //Pulls the chips latch lowshiftOut(data, clock, MSBFIRST, value); //Shifts out the 8 bits to the

shift registerdigitalWrite(latch, HIGH); //Pulls the latch high displaying the data

}

/** updateLEDsLong() - sends the LED states set in ledStates to the 74HC595* sequence. Same as updateLEDs except the shifting out is done in software* so you can see what is happening.*/void updateLEDsLong(int value){digitalWrite(latch, LOW); //Pulls the chips latch lowfor(int i = 0; i < 8; i++){ //Will repeat 8 times (once for each bit)

int bit = value & B10000000; //We use a "bitmask" to select only the eighth//bit in our number (the one we are addressing

this time throughvalue = value << 1; //we move our number up one bit value so next

time bit 7 will be//bit 8 and we will do our math on it

if(bit == 128){digitalWrite(data, HIGH);} //if bit 8 is set then set ourdata pin highelse{digitalWrite(data, LOW);} //if bit 8 is unset then set the

data pin low

5/12/2018 Práctica 5-Arduino - slidepdf.com

http://slidepdf.com/reader/full/practica-5-arduino 11/11

 

digitalWrite(clock, HIGH); //the next three lines pulse theclock pindelay(1);digitalWrite(clock, LOW);}digitalWrite(latch, HIGH); //pulls the latch high shifting our data into

being displayed}

//These are used in the bitwise math that we use to change individual LEDs//For more details http://en.wikipedia.org/wiki/Bitwise_operationint bits[] = {B00000001, B00000010, B00000100, B00001000, B00010000,B00100000, B01000000, B10000000};int masks[] = {B11111110, B11111101, B11111011, B11110111, B11101111,B11011111, B10111111, B01111111};/** changeLED(int led, int state) - changes an individual LED* LEDs are 0 to 7 and state is either 0 - OFF or 1 - ON*/

void changeLED(int led, int state){ledState = ledState & masks[led]; //clears ledState of the bit we are

addressingif(state == ON){ledState = ledState | bits[led];} //if the bit is on we

will add it to ledStateupdateLEDs(ledState); //send the new LED state to the shift

register}