Vocabulario técnico inglés-español – Technical Glossary

Recursos para técnicos y estudiantes – Technical and student resources

Buscar en www.sapiensman.com:


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.

Vídeo del desarrollo subido a : https://www.youtube.com/watch?v=dX3XwAKWfVw

 

 

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.

  1. 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)

// Pines del 28BYJ-48 (ULN2003)
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11

// Secuencia FULL-STEP (2 bobinas energizadas)
int paso[4][4] = {
{1, 1, 0, 0}, // IN1+IN2
{0, 1, 1, 0}, // IN2+IN3
{0, 0, 1, 1}, // IN3+IN4
{1, 0, 0, 1} // IN4+IN1
};

void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);

// Si NO tenés resistencias externas, usar PULLUP e invertir lógica
pinMode(inPin1, INPUT_PULLUP);
pinMode(inPin2, INPUT_PULLUP);

pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

// 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();
}
}

void apagarBobinas() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}

 

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.

 

https://youtu.be/ytL8cxNlrLs

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.

https://youtu.be/dW5c0bvuq0k

 

 

Arduino TFT 2.2 SPI 240*320
D8 -> 470 Ω - > RESET
D9 - > 470 Ω - > DC/RS
D10 - > 470 Ω - > CS
D11 - > 470 Ω - > SDI/MOSI
D12 -> 470 Ω - > SDO/MISO
D13 - > 470 Ω - > SCK
3.3 V VCC
GND GND

Sketch Arduino :


#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <DHT.h>

// ----- DHT11 -----
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

// ----- ILI9341 (HW SPI en Arduino UNO) -----
const uint8_t TFT_CS = 10;
const uint8_t TFT_DC = 9;
const uint8_t TFT_RST = 8;
Adafruit_ILI9341 tft(TFT_CS, TFT_DC, TFT_RST);

// Á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);
}

void imprimirLinea(int y, const char* etiqueta, float valor, uint8_t decimales = 1, const char* sufijo = "") {
tft.setCursor(X_VAL, y);
tft.setTextColor(ILI9341_YELLOW);
tft.setTextSize(2);
tft.print(etiqueta);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(3);
tft.print(valor, decimales);
tft.setTextSize(2);
tft.print(sufijo);
}

void setup() {
dht.begin();
Serial.begin(9600);

tft.begin();
tft.setRotation(3); // Apaisado
tft.fillScreen(ILI9341_BLACK);
tft.setTextWrap(true);

// Título fijo
tft.setCursor(0, 0);
tft.setTextColor(ILI9341_YELLOW);
tft.setTextSize(3);
tft.println("CLIMA ACTUAL");
tft.drawLine(0, 32, 319, 32, ILI9341_DARKGREY);

// Pequeña espera inicial para el DHT
delay(2000);
}

void loop() {
// El DHT11 necesita ~2 s entre lecturas
float h = dht.readHumidity();
float t = dht.readTemperature(); // Celsius

if (isnan(h) || isnan(t)) {
Serial.println("Error obteniendo los datos del sensor DHT11");
borrarLineasValores();
tft.setCursor(0, 50);
tft.setTextColor(ILI9341_RED);
tft.setTextSize(2);
tft.println("Error DHT11 - Revisar cableado");
tft.println("Vcc=5V, GND, DATA pin 2");
tft.println("Pull-up 10k entre Vcc y DATA");
delay(2000);
return;
}

// Índice de calor (sensación térmica) en °C
float hic = dht.computeHeatIndex(t, h, false);

// Limpio solo el área de datos para reescribir sin parpadeo
borrarLineasValores();

// Mostrar datos
// Nota: DHT11 tiene resolución entera; uso 0 decimales para valores “limpios”
imprimirLinea(45, "Temperatura: ", t, 0, " \xDF""C"); // \xDF ~ símbolo °
imprimirLinea(45 + H_LINE + 10, "Humedad: ", h, 0, " %");
imprimirLinea(45 + 2*(H_LINE + 10), "Sens. termica:", hic, 0, " \xDF""C");

// Log por Serial (opcional)
Serial.print("T=");
Serial.print(t, 1);
Serial.print("C H=");
Serial.print(h, 1);
Serial.print("% HI=");
Serial.print(hic, 1);
Serial.println("C");

delay(2000); // Próxima muestra (DHT11 ~1 Hz)
}