22- Aplicaciones Electrónicas. Aplicación experimental de robótica con motor por pasos y Arduino. Simulación de una grúa para elevación de una carga. Motor por pasos 28BYJ-48, con módulo driver/controlador modelo ULN2003A, ejemplo de aplicación.
El desarrollo consiste en una grúa robótica experimental para levantar pequeñas cargas. Consta de dos pulsadores que permiten bajar o subir la carga, haciendo girar al motor por pasos en un sentido en el otro.
Cada pulsador está acompañado de un led amarillo que indica que el pulsador está siendo accionado, se probó con una carga de una batería, y la levanta sin problemas, y queda suspendida en el aire si se deja de accionar el pulsador.
El proyecto requiere 1 motor 20BYJ-48, 2 resistores 220 Ω, 2 resistores 120 K Ω, 2 pulsadores, 1 placa Arduino Uno, una placa ULN2003, 1 protoboard, cables.
motor PaP 20BYJ-48
Los motores paso a paso conocidos también como motores de pasos son dispositivos electromecánicos que convierten una serie de impulsos eléctricos en desplazamientos angulares discretos, esto permite que los motores giren una cantidad determinada de grados (pasos) dependiendo de la cantidad y orden de impulsos recibidos.
El motor PaP 20BYJ-48 es muy utilizado por principiantes por lo sencillo de usar. Para manejar el motor con nuestro Arduino/Pic es necesario utilizar un driver entre el Arduino y el motor. El driver recomendado es el Modulo ULN2003.
int ledPin1 = 13;
int ledPin2 = 12;
int inPin1 = 7;
int inPin2 = 2; // defino las variables como enteras, y les asigno a los pines 13, 12, 7 y 2
int val1 = 0;
int val2 = 0;// defino otras dos variables para ser usadas en el sentido de giro del motor
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11 // doy nombre a 4 constantes y les doy el valor de los pines, para ser usadas como los cuatro valores necesarios para mover el motor por pasos
int paso [4][4] = // declar un arreglo, o sea una colección de variables de 4 x 4, para que fije la secuencia de polarización de los bobinados al hacer rotar el motor.
{
{1, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 1},
{1, 0, 0, 1}
};
void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT); // ledPin1 y ledPin2 se usan como salidas para los LEDs
pinMode(inPin1, INPUT);
pinMode(inPin2, INPUT); // inPin1 y inPin2 como entradas de los pulsadores
Serial.begin( 9600 ); // Activo la velocidad de transferencia del monitor serie
}
void loop() { // activo el lazo infinito
val1 = digitalRead(inPin1); // leo el inPin1
digitalWrite(ledPin1, val1); // asigno el valor al ledPin1 para polarizar el LED
val2 = digitalRead(inPin2);
digitalWrite(ledPin2, val2);
if (val1 == 1){
for (int i = 0; i < 4; i++) // si val1= 1, activo un contador en un sentido
{
digitalWrite(IN1, paso[i][0]);
digitalWrite(IN2, paso[i][1]);
digitalWrite(IN3, paso[i][2]);
digitalWrite(IN4, paso[i][3]);
delay(10);
}
digitalWrite(IN1, 0); // al final pongo a cero las salidas,
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 0);
}// fin if
if (val2 == 1){
for (int j = 4; j > 0; j--) si val2= 1, activo un contador en otro sentido
{
digitalWrite(IN1, paso[j][0]);
digitalWrite(IN2, paso[j][1]);
digitalWrite(IN3, paso[j][2]);
digitalWrite(IN4, paso[j][3]);
delay(10);
}
digitalWrite(IN1, 0); // al final pongo a cero las salidas,
digitalWrite(IN2, 0);
digitalWrite(IN3, 0);
digitalWrite(IN4, 0);
}// fin if
} // fin void setup
23- Aplicaciones Electrónicas. Circuito electrónico experimental. Fuente regulada con CI LM317, voltímetro amperímetro KWS-DC121 (DSN-VC288), y lámpara de 12 voltios como carga. Regulación con potenciómetro, útil para proyectos de bajo consumo.
24- Medición de temperatura, humedad y sensación térmica con Arduino. Aplicaciones Electrónicas. Uso de sensor DHT11 y display TFT 2.2 SPI 240*320 con Arduino Uno para medir parámetros del clima. Desarrollo para proyectos de robótica o aplicaciones de electrónica en general.
#include <DHT.h> // incluimos la librería para el sensor de temperatura y humedad DHT11
#define DHTPIN 2 // Definimos el pin digital 2, donde se conecta el sensor DT11
// Dependiendo del tipo de sensor
#define DHTTYPE DHT11 // definimos el modelo de sensor, com DHT11
void setup() { ////////////////////
dht.begin();
delay (1000); //espera antes de acceder al sensor
Serial.begin(9600); // fijo en 9600 la velocidad de comunicación para el monitor serie
// Esperamos 5 segundos entre medidas
delay(100);
// Leemos la humedad relativa
float h = dht.readHumidity();
// Leemos la temperatura en grados centígrados (por defecto)
float t = dht.readTemperature();
// Leemos la temperatura en grados Fahrenheit
float f = dht.readTemperature(true);
// Comprobamos si ha habido algún error en la lectura
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Error obteniendo los datos del sensor DHT11");
return;
}
// Calcular el índice de calor o sensación térmica en grados centígrados
float hic = dht.computeHeatIndex(t, h, false);
/////////////////////////////////////////
tft.setCursor(0, 0);
tft.setTextColor(ILI9341_WHITE); tft.setTextSize(3);
tft.println("CLIMA ACTUAL");
tft.println(" ");
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
tft.println("Temperatura = ");
tft.print(t);
tft.println(" C ");
tft.println(" ");
tft.println("Humedad = ");
tft.print(h);
tft.println(" % ");
tft.println(" ");
tft.println("Sens. termica = ");
tft.print(hic);
tft.println(" C ");
delay(8000);
tft.fillScreen(ILI9341_BLACK);