Archivo de la categoría: pulsador

Arduino Joystick Shield Nrf24l01 Wireless

En este proyecto, estamos construyendo un robot de control remoto de dos ruedas utilizando módulos nRF24L01, un shield con joystick, un Ardunio UNO y un Arduino nano con un controlador de motor L298N para controlar los motores de CC.

arduino-joystick-schutzschild-arduino-5878-450x450

Los controladores de motor nRF24L01 y L298N juntos impulsarán el robot con el arduino nano como controlador. Además, para controlar este robot, estamos utilizando Arduino UNO con el módulo de joystick.

El shield proporciona una entrada analógica simple con el joystick y cuatro botones separados. También se incluyen dos pequeños botones adicionales.

El chip transceptor RF nRF24L01

El nRF24L01 es un chip transceptor de RF realmente rápido y económico. Funciona a 2,4 GHz a hasta 2 Mbps y tiene un consumo de energía ultra bajo, lo que significa que una batería AA/AAA se puede alimentar durante mucho tiempo. Funciona en un rango de suministro de 1,9 a 3,6 V con una corriente máxima de RX/TX de menos de 14 mA.

modulo-nrf24l01

Hardware requerido.

ArduinoUNO-300x300
  • Arduino UNO
nano
  • arduino nano
arduino-joystick-schutzschild-arduino-5878-450x450
  • Shield de joystick
l294n
  • Controlador de motor L298N
modulo-nrf24l01_bas
  • nRF24L01 x 2
chasis-de-vehiculo-robotico-para-arduino-pic-avr-etc-11690-MLM20046960131_022014-O
  • chasis y motores

Montaje del hardware emisor

Ensamblar el Arduino Uno y el shield juntos (con el nrf24).

arduino-robot-car-joystick

Esquema del robot

Siga el esquema de Fritzing y conecte todo al Arduino Nano como se muestra a continuación.

esquema

esq2esq1

Código emisor:

Pâra controlar al robot vams a mandar los mensajes «up», «down», «left», «right», «start», «select» y «analgobut». Con estos mensajes podremos tomar decisiones en nuestro robot, para ir hacia delante, atras, derecha, izquierda,…

//Arduino Joystick shield Code
#include <nRF24L01.h>
#include <RF24.h>
#include <SPI.h>


#define CE_PIN  9
#define CSN_PIN 10

int up_button     = 2; // Boton Amarillo - A
int down_button   = 4; // Boton Amarillo - C 
int left_button   = 5; // Boton Azul     - D 
int right_button  = 3; // Boton Azul     - B
int start_button  = 6; // Boton F
int select_button = 7; // Boton E
int analog_button = 8; // 
int x_axis = A0;
int y_axis = A1;
int buttons[]={up_button, down_button,left_button,
    right_button,start_button,select_button,analog_button};


const uint64_t pipe = 0xE8E8F0F0E1LL;
RF24 radio(CE_PIN,CSN_PIN);
char msg[20] = "";

void setup(){
     for(int i; i <7 ; i++){
         pinMode(buttons[i],INPUT);
         digitalWrite(buttons[i],HIGH);  
     } 
     Serial.begin(9600);
     radio.begin();
     radio.openWritingPipe(pipe);
}

void loop(){
      if(digitalRead(up_button)==LOW){
        char msg[]="up";
      radio.write(&msg,sizeof(msg));
      delay(300);
        Serial.println("UP Button Pressed");
      }
       if(digitalRead(down_button)==LOW){
        char msg[]="down";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Down Button Pressed");
      }
       if(digitalRead(left_button)==LOW){
        char msg[]="left";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Left Button Pressed");
      }
       if(digitalRead(right_button)==LOW){
        char msg[]="right";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Rigth Button Pressed");
      }
       if(digitalRead(start_button)==LOW){
        char msg[]="start";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Start Button Pressed");
      }
       if(digitalRead(select_button)==LOW){
        char msg[]="select";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Select Button Pressed");
      }
       if(digitalRead(analog_button)==LOW){
        char msg[]="analgobut";
        radio.write(&msg,sizeof(msg));
        delay(300);
        Serial.println("Analog Button Pressed");
      }
      Serial.print("\n X = ");
      Serial.print(analogRead(x_axis));
      Serial.print(" \n Y = ");
      Serial.print(analogRead(y_axis));
      Serial.print("  ");
      delay(500);
}
Código robot receptor

// Arduino Car Code 
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>


#define CE_PIN  9
#define CSN_PIN 10

const int RightMotorF= 3;
const int RightMotorB= 4;
const int LeftMotorF= 5;
const int LeftMotorB= 6;

char data[20]="";

RF24 radio(CE_PIN,CSN_PIN);
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup(){
  pinMode(RightMotorF,OUTPUT);
  pinMode(RightMotorB,OUTPUT);
  pinMode(LeftMotorF,OUTPUT);
  pinMode(LeftMotorB,OUTPUT);
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(1,pipe);
  radio.startListening();
}
 
void loop(){
  String msg="";
  if ( radio.available() ){
    radio.read( data,sizeof(data) );
    Serial.println(data);
    msg=data;
    if(msg=="up"){
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,HIGH);
  digitalWrite(LeftMotorF,HIGH);
  Serial.println("Motor forward");
  }
  else if(msg=="down"){
  digitalWrite(RightMotorB,HIGH);
  digitalWrite(LeftMotorB,HIGH);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,LOW);
  Serial.println("Motor Back");
  }
   else if(msg=="left"){
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,HIGH);
  digitalWrite(RightMotorF,HIGH);
  digitalWrite(LeftMotorF,LOW);
  Serial.println("Left");
  delay(300);
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,LOW);
  }
   else if(msg=="right"){
  digitalWrite(RightMotorB,HIGH);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,HIGH);
  Serial.println("right");
  delay(300);
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,LOW);
  }
  else if(msg=="analgobut"){
  digitalWrite(RightMotorB,LOW);
  digitalWrite(LeftMotorB,LOW);
  digitalWrite(RightMotorF,LOW);
  digitalWrite(LeftMotorF,LOW);
  Serial.println("STOP it");
  }
  }
}

Probando el robot

Después de cargar el código tanto para el control remoto como para el robot, ¡es hora de probarlo! Aquí están los controles para el coche.

shieldexplica

Fuente:

https://maker.pro/arduino/projects/funduino-arduino-joystick-shield-controlled-robot

NodeMcu Esp3266 y display TFT ST7789

Objetivos

  • probar el display desde un nodemcu y visualizar diferentes mensajes e imágenes

Material requerido

esp8266.jpg
  • NodeMCU
shieldNodeMCU
  • shield NodeMCU
AR1717-TFT-Display-LCD-1.3-ST7735-v3-500x500
  • Pantalla TFT
Img_3_6-300x185
  • Cables

Repasemos funcionamientos

Para comenzar vamos a poner el enlace a la entrada donde se explican algunos conceptos para programar un NODEMCU.

Esquema.

El esquema del circuito del proyecto se muestra a continuación.

El módulo TFT ST7789 que se muestra en el esquema de circuito tiene 7 pines: (de derecha a izquierda):

  • GND (tierra),
  • VCC,
  • SCL (reloj en serie),
  • SDA (datos en serie),
  • RES (restablecimiento),
  • DC (o D/C : datos/comando)
  • BLK (luz de fondo).
  • La conexión del pin BLK es opcional. La luz de fondo se apaga cuando el pin BLK se conecta a tierra (GND).

esp8266-nodemcu-st7789-spi-tft-circuit

El módulo de pantalla TFT ST7789 está conectado a la placa NodeMCU de la siguiente manera:

  • GND está conectado al pin GND de la placa NodeMCU,
  • VCC y BL están conectados al pin 3V3,
  • El pin SCL está conectado a D5 (ESP8266EX GPIO14),
  • El pin SDA está conectado a D7 (ESP8266EX GPIO13),
  • El pin RES está conectado a D2 (ESP8266EX GPIO4),
  • El pin de CC está conectado a D1 (ESP8266EX GPIO5).

Si el módulo de visualización tiene un pin CS (selección de chip), debe conectarse al pin D8 de NodeMCU (GPIO15).

Los pines D5 (GPIO14) y D7 (GPIO13) son pines del módulo SPI de hardware del microcontrolador ESP8266EX respectivamente para SCK (reloj en serie) y MOSI (salida maestra-esclavo).

El programa de control

El siguiente código requiere dos bibliotecas de Adafruit Industries:

  • La primera biblioteca es un controlador para la pantalla TFT ST7789 que se puede instalar desde el administrador de bibliotecas IDE de Arduino (Sketch -> Incluir biblioteca -> Administrar bibliotecas…, en el cuadro de búsqueda escriba «st7789» e instale el de Adafruit).
  • La segunda biblioteca es la biblioteca de gráficos Adafruit que también se puede instalar desde el administrador de la biblioteca Arduino IDE.

Las 2 bibliotecas estarán incluidas en el código principal.

#include <Adafruit_GFX.h> // Biblioteca de gráficos central
#include <Adafruit_ST7789.h> // Biblioteca específica de hardware para ST7789

Las conexiones de los pines del módulo ST7789 TFT (CS, RST y DC) se definen como se muestra a continuación:
// Conexiones del módulo TFT ST7789
#define TFT_DC   D1 // El pin TFT DC está conectado al pin NodeMCU D1 (GPIO5)
#define TFT_RST D2 // El pin TFT RST está conectado al pin NodeMCU D2 (GPIO4)
#define TFT_CS    D8 // El pin TFT CS está conectado al pin NodeMCU D8 (GPIO15)

Los otros pines de pantalla (SDA y SCL) están conectados a los pines SPI del hardware NodeMCU (respectivamente D7 y D5).

La biblioteca Adafruit ST7789 se inicializa con esta línea:
// Inicializar la biblioteca Adafruit ST7789 TFT
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

Y la pantalla TFT se inicializa con el siguiente comando:
// si la pantalla tiene un pin CS, intente con SPI_MODE0
tft.init(240, 240, SPI_MODE2); // Pantalla de inicio ST7789 240×240 píxeles

Es posible que la pantalla no funcione si tiene un pin CS, intente con SPI_MODE0, que es el modo predeterminado de la biblioteca, o simplemente use: tft.init (240, 240);

El resto del código se describe a través de comentarios.

 

Sigue leyendo

Dispensador de medicinas programable

Objetivos

  • construir un dispensador de pastillas.
  • que sea programable desde un móvil.

Material requerido

esp8266.jpg
  • NodeMCU
shieldNodeMCU
  • shield NodeMCU
FT68TVVHMMF4Z5P.LARGE_
  • Motor paso a paso 28BYJ-48 y adaptador
sg90
  • servo motor
Captura de pantalla 2022-01-24 a las 7.34.18
  • Display 16×2 con I2C
ds3231
  • Reloj RTC
pulsador
  • Un pulsador
buzzer
  • Un buzzer
D_NQ_NP_952506-MLM43973337619_112020-W
  • batería
cargador
  • Cargador de batería
Img_3_6-300x185
  • Cables

Repasemos funcionamientos

Para comenzar vamos a poner los enlaces a las entradas donde se explican los componentes por separado:

Esquema.

pilldispensor_bb

El programa de control

Paso 1: haremos un método o función para que cuando se le llame el motor paso a paso gire los grados deseados.

pill01

Sigue leyendo

Juego con multiples leds y un pulsador

En esta ocasión vamos a construir un circuito con un número impar de leds (5,7,9) y un pulsador.

  • Los leds se irán encendiendo de izquierda a derecha y vuelta a empezar.
  • El usuario debe pulsar el pulsador cuando este encendido el led del medio.
    • En caso de acierto encenderemos varias veces el led del medio
    • En caso de fallo encenderemos varias veces el primer led.

Posibles mejoras utilizar un buzzer para emitir una melodía.

Conocimiento previo

Sigue leyendo