Oficios Técnicos

www.sapiensman.com/tecnoficio


 


 

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.

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

// Todos los pines en modo salida

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

  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.

 

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> // 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

// Inicializamos el sensor DHT11
DHT dht(DHTPIN, DHTTYPE);
//////////// <<<<< librerías Sensor DHT11

// Estos pines son usados por Arduino UNO
#define _sclk 13
#define _miso 12
#define _mosi 11
#define _cs 10
#define _dc 9
#define _rst 8

 

Adafruit_ILI9341 tft = Adafruit_ILI9341(_cs, _dc, _rst);

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


tft.begin();
tft.setRotation(3);
tft.fillScreen(ILI9341_BLACK);
/*unsigned long start = micros();*/
tft.setCursor(0, 0);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(3);
tft.println("CLIMA ACTUAL");
}

void loop() {

 

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

}

 

 

 

 

 

 


 

 

 
Volver arriba