Saltar al contenido principal

Grove-Mech keycap

El Grove-Mech keycap es un interruptor mecánico con un LED integrado. El LED RGB de 255 colores completos hace que sea simple y fácil mostrar el estado de tu interruptor. Esta tecla es muy fiable, con una vida útil de funcionamiento de 20.000.000 de pulsaciones.

Verás que este es un módulo interesante y estable para hacer proyectos o productos realmente divertidos. De hecho, incluso puedes hacer un teclado mecánico usando varios Grove-Mech keycaps.

tip

Se deben realizar 20.000.000 ciclos de funcionamiento de forma continua a una velocidad de 300 ciclos por minuto sin carga.

Consigue uno ahora

Características

  • LED programable
  • Estructura mecánica fiable
  • Vida útil de funcionamiento extremadamente larga

Especificación

ElementoValor
Voltaje de trabajo3v-5v
Resistencia de aislamiento100MΩ mín.
Resistencia de contacto200 mΩ máx.
Vida útil de funcionamiento sin carga20.000.000

Aplicaciones

  • dispositivos automotrices
  • dispositivos visuales
  • electrodomésticos
  • dispositivos de información

Hardware

Mapa de pines

Esquemático

El K1 está conectado al botón; cuando la tecla está abierta, SIG1 será arrastrado a nivel bajo por R2, entonces la salida de SIG1 debería ser baja. Una vez que se pulsa el botón, el K1 se cerrará y SIG1 se conectará a VCC, entonces la salida de SIG1 se vuelve alta.

nota

En esta sección solo te mostramos parte del esquemático; para el documento completo, consulta los Resources

Plataformas compatibles

ArduinoRaspberry Pi
precaución

Las plataformas mencionadas arriba como compatibles son una indicación de la compatibilidad teórica o del software del módulo. En la mayoría de los casos solo proporcionamos librerías de software o ejemplos de código para la plataforma Arduino. No es posible proporcionar librerías de software o código de demostración para todas las posibles plataformas MCU. Por lo tanto, los usuarios tienen que escribir sus propias librerías de software.

Primeros pasos

nota

Si esta es la primera vez que trabajas con Arduino, te recomendamos encarecidamente que veas Getting Started with Arduino antes de comenzar.

Jugar con PlatformIO

Hardware

XIAO nRF52840 SenseSeeed Studio Grove Base para XIAOGrove-Mech keycap
Consigue uno ahoraConsigue uno ahoraConsigue uno ahora
  • Paso 1. Conecta los pines de señal del Grove-Mech keycap: S1 -> D1, S2 -> D2 en la Seeed Studio Grove Base para XIAO. (VCC/GND como de costumbre)
  • Paso 2. Inserta la Grove Base en la XIAO nRF52840 Sense.
  • Paso 3. Conecta la XIAO a tu PC mediante USB.

Software

  • Paso 1. Instala la librería Adafruit_NeoPixel en PlatformIO.
  • Paso 2. Crea un nuevo sketch / proyecto y pega el código de abajo.
  • Paso 3. Carga a la XIAO y abre el Monitor Serie (baud 115200) para ver el estado.

Qué hace

  • Cada pulsación del Grove-Mech keycap hace que el LED RGB integrado recorra una lista de colores.

Código

/*
Grove-Mech Keycap demo for XIAO (nRF52840 Sense)
Wiring: S1 -> D1 (button), S2 -> D2 (pixel data)
*/
#include <Adafruit_NeoPixel.h>

#define BUTTON_PIN 1 // D1
#define PIXEL_PIN 2 // D2
#define PIXEL_COUNT 1

Adafruit_NeoPixel strip(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

uint8_t colorPos = 0;
bool lastState = LOW;
unsigned long lastDebounce = 0;
const unsigned long debounceDelay = 50;

void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin();
strip.show();
Serial.begin(115200);
Serial.println("Grove-Mech Keycap: ready");
}

uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

void cycleColor() {
colorPos += 32; // step size
strip.setPixelColor(0, Wheel(colorPos));
strip.show();
Serial.print("Color pos: "); Serial.println(colorPos);
}

void loop() {
bool reading = digitalRead(BUTTON_PIN) == LOW ? true : false; // pressed = LOW for INPUT_PULLUP

if (reading != lastState) {
lastDebounce = millis();
}

if ((millis() - lastDebounce) > debounceDelay) {
// stable state
static bool pressed = false;
if (reading && !pressed) {
// button pressed (edge)
cycleColor();
pressed = true;
} else if (!reading) {
pressed = false;
}
}

lastState = reading;
}
nota

Si tu cableado o asignación de pines es diferente, cambia BUTTON_PIN y PIXEL_PIN en consecuencia.

Jugar con Arduino

Hardware

Materiales requeridos

Seeeduino V4.2Base ShieldGrove-Mech keycap
enter image description hereenter image description hereenter image description here
Consigue uno ahoraConsigue uno ahoraConsigue uno ahora
nota

1 Inserta el cable USB suavemente, de lo contrario podrías dañar el puerto. Utiliza un cable USB con 4 hilos internos; los cables de 2 hilos no pueden transferir datos. Si no estás seguro del cable que tienes, puedes hacer clic aquí para comprarlo.

2 Cada módulo Grove viene con un cable Grove cuando lo compras. En caso de que pierdas el cable Grove, puedes hacer clic aquí para comprarlo.

  • Paso 1. Conecta el Grove-Mech keycap al puerto D2 del Grove-Base Shield.

  • Paso 2. Inserta el Grove - Base Shield en el Seeeduino.

  • Paso 3. Conecta el Seeeduino al PC mediante un cable USB.

nota

Si no tenemos Grove Base Shield, también podemos conectar directamente el Grove-Mech keycap al Seeeduino como se muestra a continuación.

SeeeduinoGrove-Mech keycap
5VRojo
GNDNegro
D3Blanco
D2Amarillo

Software

  • Paso 1. Descarga la librería Adafruit_NeoPixel-master desde Github.

  • Paso 2. Consulta How to install library para instalar la librería para Arduino.

  • Paso 3. Abre el Arduino IDE y crea un archivo nuevo, luego copia el siguiente código en el archivo nuevo.

/**
* This is an exmaple of the Grove - Mech Keycap.
* Every press of the key will change the color the SK6805 RGB LED. The SK6805 is a NeoPixel compatible chip.
*
* Credit:
* Adafruit_NeoPixel - https://github.com/adafruit/Adafruit_NeoPixel/blob/master/COPYING
*/

#include <Adafruit_NeoPixel.h>

#define BUTTON_PIN 2 // Digital IO pin connected to the button. This will be
// driven with a pull-up resistor so the switch should
// pull the pin to ground momentarily. On a high -> low
// transition the button press logic will execute.

#define PIXEL_PIN 3 // Digital IO pin connected to the NeoPixels.

#define PIXEL_COUNT 60

// Parameter 1 = number of pixels in strip, neopixel stick has 8
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_RGB Pixels are wired for RGB bitstream
// NEO_GRB Pixels are wired for GRB bitstream, correct for neopixel stick
// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels)
// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

bool oldState = LOW;
uint8_t color_pos = 0;
int i=0;
int longpress=2000;
long timecheck;

void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
strip.begin();
strip.clear();
strip.show(); // Initialize all pixels to 'off'
Serial.begin(9600);
}

void loop()
{

// Get current button state.
bool newState = digitalRead(BUTTON_PIN);

// Check if state changed from low to high (button press).
if (newState == HIGH && oldState == LOW) {
timecheck = millis();
// Short delay to debounce button.
delay(20);
// Check if button is still low after debounce.
newState = digitalRead(BUTTON_PIN);
if (newState == HIGH){
color_pos+=8;
strip.setPixelColor(0, Wheel(color_pos));
strip.show();
}
}

if( millis()-timecheck > 300)
{
if (digitalRead(BUTTON_PIN)==HIGH)
{
if(millis()-timecheck > longpress)
{
while(digitalRead(BUTTON_PIN) == HIGH)
{
strip.setPixelColor(0,Wheel(color_pos));
strip.show();
delay(300);

strip.setPixelColor(0,0,0,0);
strip.show();
delay(300);
bool newState = digitalRead(BUTTON_PIN);
}
strip.setPixelColor(0,0,0,0);
strip.show();
timecheck = millis();
}
}
}

// Set the last button state to the old state.
oldState = newState;
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

  • Paso 4. Sube la demostración. Si no sabes cómo subir el código, consulta How to upload code.

  • Paso 5. Cada vez que presiones el Grove-Mech Keycap, verás que el color del LED cambia. Si mantienes presionado el botón durante unos 2 segundos, verás el efecto de luz respiratoria.

Jugar con Raspberry Pi

Hardware

  • Paso 1. Elementos utilizados en este proyecto:
Raspberry piGrove Base Hat para RasPiGrove - Mech Keycap
enter image description hereenter image description hereenter image description here
Consigue uno ahoraConsigue uno ahoraConsigue uno ahora
  • Paso 2. Conecta el Grove Base Hat a la Raspberry.
  • Paso 3. Conecta el Grove - Mech Keycap al puerto PWM (puerto 12) del Base Hat.
nota

el pin puede ser uno de los siguientes valores en la columna de pines para la función PWM y conecta el dispositivo a la ranura correspondiente.

PinRanura
18D18
12PWM
  • Paso 4. Conecta la Raspberry Pi al PC mediante un cable USB.

Software

  • Paso 1. Sigue Setting Software para configurar el entorno de desarrollo.
  • Paso 2. Descarga el archivo fuente clonando la biblioteca grove.py.
cd ~
git clone https://github.com/Seeed-Studio/grove.py

  • Paso 3. Ejecuta los siguientes comandos para correr el código.
cd grove.py/grove
sudo python grove_mech_keycap.py 12

precaución

Unix tiene un "modelo de seguridad". Como usuario normal puedes hacer cosas, pero no deberías poder acceder a los archivos de otras personas en la misma computadora. Y como usuario no deberías poder hacer que la computadora deje de funcionar. Ahora bien, "/dev/mem" te permite hacer mucho, mucho más "trastornos" que solo cambiar un GPIO. Por eso /dev/mem debe estar protegido contra usuarios normales. Así que, para ejecutar este código, debes escribir sudo python grove_mech_keycap.py en la línea de comandos

A continuación se muestra el código grove_mech_keycap.py.


import time
from grove.button import Button
from grove.factory import Factory

class GroveKeycap(object):
def __init__(self, pin):
# High = pressed
self.__btn = Factory.getButton("GPIO-HIGH", pin)
# single WS2812 LED
self.__led = Factory.getOneLed("WS2812-PWM", pin + 1)
self.__on_event = None
self.__btn.on_event(self, GroveKeycap.__handle_event)

@property
def on_event(self):
return self.__on_event

@on_event.setter
def on_event(self, callback):
if not callable(callback):
return
self.__on_event = callback

def __handle_event(self, evt):
# print("event index:{} event:{} pressed:{}".format(evt['index'], evt['code'], evt['presesed']))
if callable(self.__on_event):
self.__on_event(evt['index'], evt['code'], evt['time'])
return

self.__led.brightness = self.__led.MAX_BRIGHT
event = evt['code']
if event & Button.EV_SINGLE_CLICK:
self.__led.light(True)
print("turn on LED")
elif event & Button.EV_DOUBLE_CLICK:
self.__led.blink()
print("blink LED")
elif event & Button.EV_LONG_PRESS:
self.__led.light(False)
print("turn off LED")


Grove = GroveKeycap

def main():
from grove.helper import SlotHelper
sh = SlotHelper(SlotHelper.PWM)
pin = sh.argv2pin()

ledbtn = GroveKeycap(pin)

# remove ''' pairs below to begin your experiment
'''
# define a customized event handle your self
def cust_on_event(index, event, tm):
print("event with code {}, time {}".format(event, tm))

ledbtn.on_event = cust_on_event
'''
while True:
time.sleep(1)


if __name__ == '__main__':
main()


tip

Si todo va bien, podrás ver el siguiente resultado. Si haces un solo clic en el keycap, verás "turn on LED", si haces doble clic en el keycap, verás "blink LED". Una pulsación larga en el keycap dará "turn off LED".


pi@raspberrypi:~/grove.py/grove $ sudo python grove_mech_keycap.py 12
Hat Name = 'Grove Base Hat RPi'
turn on LED
turn on LED
blink LED
turn on LED
turn off LED
^CTraceback (most recent call last):
File "grove_mech_keycap.py", line 98, in <module>
main()
File "grove_mech_keycap.py", line 94, in main
time.sleep(1)
KeyboardInterrupt


Puedes salir de este programa simplemente presionando ++ctrl+c++.

Visor de esquemas en línea

Recursos

Proyecto

Este es el video de introducción de este producto, demostraciones sencillas, puedes probarlo.

Soporte técnico y debate sobre el producto

Gracias por elegir nuestros productos. Estamos aquí para ofrecerte diferentes tipos de soporte para garantizar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.

Loading Comments...