Tecla mecánica Grove
La tecla mecánica Grove es un interruptor mecánico con un LED integrado. El LED RGB de 255 colores completos hace que sea simple y fácil mostrar los estados de tu interruptor. Esta tecla es muy confiable con 20,000,000 veces de vida útil de operación por presión.
Encontrarás que este es un módulo interesante y estable para hacer algunos proyectos o productos realmente divertidos. De hecho, incluso puedes hacer un teclado mecánico usando varias teclas mecánicas Grove.
20,000,000 ciclos de operación deben realizarse continuamente a una velocidad de 300 ciclos por minuto sin carga.
Características
- LED programable
- Estructura mecánica confiable
- Vida útil de operación extremadamente larga
Especificaciones
Elemento | Valor |
---|---|
Voltaje de Trabajo | 3v-5v |
Resistencia de Aislamiento | 100MΩ Mín. |
Resistencia de Contacto | 200 mΩ Máx. |
Vida Útil de Operación sin Carga | 20,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, el SIG1 será llevado a bajo por R2, entonces la salida de SIG1 debería ser baja. Una vez que el botón es presionado, el K1 se cerrará y el SIG1 se conectará a VCC, entonces la salida de SIG1 se vuelve alta.
En esta sección solo te mostramos parte del esquemático, para el documento completo por favor consulta los Recursos
Plataformas Soportadas
Arduino | Raspberry Pi | |||
---|---|---|---|---|
![]() | ![]() | ![]() | ![]() | ![]() |
Las plataformas mencionadas anteriormente como compatibles son una indicación de la compatibilidad de software o teórica del módulo. Solo proporcionamos biblioteca de software o ejemplos de código para la plataforma Arduino en la mayoría de los casos. No es posible proporcionar biblioteca de software / código de demostración para todas las plataformas MCU posibles. Por lo tanto, los usuarios tienen que escribir su propia biblioteca de software.
Primeros Pasos
Si esta es la primera vez que trabajas con Arduino, te recomendamos encarecidamente que veas Primeros Pasos con Arduino antes de comenzar.
Jugar Con Arduino
Hardware
Materiales requeridos
Seeeduino V4.2 | Base Shield | Grove-Mech keycap |
---|---|---|
![]() | ![]() | ![]() |
Obtener Uno Ahora | Obtener Uno Ahora | Obtener Uno Ahora |
1 Por favor conecta el cable USB con cuidado, de lo contrario podrías dañar el puerto. Por favor usa el cable USB con 4 cables en el interior, el cable de 2 cables no puede transferir datos. Si no estás seguro sobre el cable que tienes, puedes hacer clic aquí para comprar
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 comprar.
-
Paso 1. Grove-Mech keycap al puerto D2 del Grove-Base Shield.
-
Paso 2. Conecta Grove - Base Shield al Seeeduino.
-
Paso 3. Conecta Seeeduino a la PC mediante un cable USB.
Si no tenemos Grove Base Shield, también podemos conectar directamente Grove-Mech keycap al Seeeduino como se muestra a continuación.
Seeeduino | Grove-Mech keycap |
---|---|
5V | Rojo |
GND | Negro |
D3 | Blanco |
D2 | Amarillo |
Software
-
Paso 1. Descarga la librería Adafruit_NeoPixel-master desde Github.
-
Paso 2. Consulta Cómo instalar librería para instalar la librería para Arduino.
-
Paso 3. Abre el IDE de Arduino y crea un nuevo archivo, luego copia el siguiente código en el nuevo archivo.
/**
* 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, por favor revisa Cómo subir código.
-
Paso 5. Cada vez que presiones el Grove-Mech Keycap, verás cambiar el color del LED. Si presionas y mantienes el botón por aproximadamente 2 segundos, verás el efecto de luz respiratoria.
Jugar Con Raspberry Pi
Hardware
- Paso 1. Elementos utilizados en este proyecto:
Raspberry pi | Grove Base Hat para RasPi | Grove - Mech Keycap |
---|---|---|
![]() | ![]() | ![]() |
Obtén UNO Ahora | Obtén UNO Ahora | Obtén UNO Ahora |
- Paso 2. Conecta el Grove Base Hat al Raspberry.
- Paso 3. Conecta el Grove - Mech Keycap al puerto PWM (puerto 12) del Base Hat.
el pin puede ser uno de los valores siguientes en la columna de pin para la función PWM y conecta el dispositivo al slot correspondiente.
Pin | Slot |
---|---|
18 | D18 |
12 | PWM |
- Paso 4. Conecta el Raspberry Pi a la PC a través del 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 ejecutar el código.
cd grove.py/grove
sudo python grove_mech_keycap.py 12
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 "/dev/mem" permite mucho, mucho más "travesuras" que solo cambiar un GPIO. Por eso es que /dev/mem debe estar protegido contra usuarios normales. Por lo tanto, para ejecutar este código, deberías escribir sudo python grove_mech_keycap.py en la línea de comandos
A continuación está 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()
Si todo va bien, podrás ver el siguiente resultado. Si haces un solo clic en la tecla, verás "turn on LED", si haces doble clic en la tecla, verás "blink LED". Mantener presionada la tecla 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 Esquemático Online
Recursos
- [Zip] Archivo eagle de Grove-Mech Keycap
- [Zip] Adafruit_NeoPixel-master
- [PDF] Resumen del producto del interruptor
Proyecto
Este es el video de introducción de este producto, demostraciones simples, puedes intentarlo.
Soporte Técnico y Discusión del Producto
¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.