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.
// Pines LEDs y pulsadores
const int ledPin1 = 13;
const int ledPin2 = 12;
const int inPin1 = 7; // Botón 1 (horario)
const int inPin2 = 2; // Botón 2 (antihorario)
// Opcional: iniciar con todo apagado
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
// Serial.begin(9600); // descomentar si querés debug
}
void loop() {
// Con INPUT_PULLUP: pulsado = LOW
int val1 = digitalRead(inPin1);
int val2 = digitalRead(inPin2);
digitalWrite(ledPin1, (val1 == LOW) ? HIGH : LOW);
digitalWrite(ledPin2, (val2 == LOW) ? HIGH : LOW);
if (val1 == LOW) { // Giro horario
for (int i = 0; i < 4; i++) {
digitalWrite(IN1, paso[i][0] ? HIGH : LOW);
digitalWrite(IN2, paso[i][1] ? HIGH : LOW);
digitalWrite(IN3, paso[i][2] ? HIGH : LOW);
digitalWrite(IN4, paso[i][3] ? HIGH : LOW);
delay(10);
}
// Si no querés par de retención, descomenta:
// apagarBobinas();
}
if (val2 == LOW) { // Giro antihorario
for (int j = 3; j >= 0; j--) { // <-- índices válidos 3..0
digitalWrite(IN1, paso[j][0] ? HIGH : LOW);
digitalWrite(IN2, paso[j][1] ? HIGH : LOW);
digitalWrite(IN3, paso[j][2] ? HIGH : LOW);
digitalWrite(IN4, paso[j][3] ? HIGH : LOW);
delay(10);
}
// Si no querés par de retención, descomenta:
// apagarBobinas();
}
}
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.
// Áreas de borrado para evitar flicker (coordenadas y tamaños)
const int X_VAL = 0; // x inicial de los valores
const int W_VAL = 320; // ancho pantalla
const int H_LINE = 28; // alto aproximado de una línea con textSize=2..3
void borrarLineasValores() {
// Borra el bloque donde escribimos los números/etiquetas (debajo del título)
tft.fillRect(0, 40, W_VAL, 200, ILI9341_BLACK);
}