メインコンテンツまでスキップ

Grove-メカニカルキーキャップ

Grove-Mech keycap は、LED を内蔵したメカニカルスイッチです。255 色フルカラー RGB LED によって、スイッチの状態を簡単かつ直感的に表示できます。このキーキャップは 2,000 万回の押下動作寿命を持ち、とても信頼性が高いです。

このモジュールは、楽しくて実用的なプロジェクトや製品を作るのに適した、興味深く安定したモジュールであることが分かるでしょう。実際、複数の Grove-Mech keycap を使ってメカニカルキーボードを作ることもできます。

ヒント

負荷なしで、1 分間あたり 300 サイクルの速度で連続して 2,000 万サイクルの動作を行うことができます。

今すぐ入手

特徴

  • プログラム可能な LED
  • 信頼性の高いメカニカル構造
  • 非常に長い動作寿命

仕様

項目
動作電圧3v-5v
絶縁抵抗100MΩ 以上
接触抵抗200 mΩ 以下
無負荷での動作寿命20,000,000

応用例

  • 車載機器
  • 映像機器
  • 家庭用電気製品
  • 情報機器

ハードウェア

ピンマップ

回路図

K1 はボタンに接続されており、キーがオープンのときは SIG1 が R2 によってプルダウンされるため、SIG1 の出力は Low になります。 ボタンが押されると K1 がクローズし、SIG1VCC に接続されるので、SIG1 の出力は High になります。

注記

このセクションでは回路図の一部のみを示しています。完全なドキュメントについては Resources を参照してください。

対応プラットフォーム

ArduinoRaspberry Pi
注意

上記で対応として挙げたプラットフォームは、このモジュールのソフトウェアまたは理論上の互換性を示すものです。ほとんどの場合、ソフトウェアライブラリやコード例は Arduino プラットフォーム向けのみ提供しています。存在しうるすべての MCU プラットフォーム向けにソフトウェアライブラリやデモコードを提供することは不可能なため、ユーザー自身でソフトウェアライブラリを作成する必要があります。

入門ガイド

注記

Arduino を扱うのが初めての場合は、始める前に Getting Started with Arduino を読むことを強くお勧めします。

PlatformIO で遊ぶ

ハードウェア

XIAO nRF52840 SenseSeeed Studio Grove Base for XIAOGrove-Mech keycap
今すぐ入手今すぐ入手今すぐ入手
  • Step 1. Grove-Mech keycap の信号ピンを接続します: S1 -> D1, S2 -> D2 (VCC/GND は通常どおり)を Seeed Studio Grove Base for XIAO 上で接続します。
  • Step 2. Grove Base を XIAO nRF52840 Sense に挿し込みます。
  • Step 3. XIAO を USB で PC に接続します。

ソフトウェア

  • Step 1. PlatformIO に Adafruit_NeoPixel ライブラリをインストールします。
  • Step 2. 新しいスケッチ / プロジェクトを作成し、以下のコードを貼り付けます。
  • Step 3. XIAO に書き込み、シリアルモニタ(ボーレート 115200)を開いて状態を確認します。

動作内容

  • Grove-Mech keycap を 1 回押すごとに、内蔵 RGB LED の色がリスト内の色に順番に切り替わります。

コード

/*
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;
}
注記

配線やピンマッピングが異なる場合は、BUTTON_PINPIXEL_PIN をそれに応じて変更してください。

Arduino で遊ぶ

ハードウェア

必要な部材

Seeeduino V4.2Base ShieldGrove-Mech keycap
enter image description hereenter image description hereenter image description here
今すぐ入手今すぐ入手今すぐ入手
注記

1 USB ケーブルは優しく挿し込んでください。そうしないとポートを破損するおそれがあります。内部に 4 本の線が入っている USB ケーブルを使用してください。2 本線のケーブルではデータ転送ができません。お持ちのケーブルが確実でない場合は、こちら から購入できます。

2 各 Grove モジュールには、購入時に Grove ケーブルが 1 本付属しています。Grove ケーブルを紛失した場合は、こちら から購入できます。

  • Step 1. Grove-Mech keycap を Grove-Base Shield のポート D2 に接続します。

  • Step 2. Grove - Base Shield を Seeeduino に挿し込みます。

  • Step 3. Seeeduino を USB ケーブルで PC に接続します。

注記

Grove Base Shield がない場合でも、以下のように Grove-Mech keycap を Seeeduino に直接接続することができます。

SeeeduinoGrove-Mech keycap
5VRed
GNDBlack
D3White
D2Yellow

ソフトウェア

  • Step 1. Github から Adafruit_NeoPixel-master ライブラリをダウンロードします。

  • Step 2. Arduino 用のライブラリをインストールするには、How to install library を参照してください。

  • Step 3. Arduino IDE を開き、新しいファイルを作成してから、次のコードをその新しいファイルにコピーします。

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

  • Step 4. デモをアップロードします。コードのアップロード方法がわからない場合は、How to upload code を参照してください。

  • Step 5. Grove-Mech Keycap を押すたびに、LED の色が変化します。ボタンを約 2 秒間押し続けると、ブリージングライト効果が表示されます。

Raspberry Pi で遊ぶ

ハードウェア

  • Step 1. このプロジェクトで使用するもの:
Raspberry piGrove Base Hat for RasPiGrove - Mech Keycap
enter image description hereenter image description hereenter image description here
Get ONE NowGet ONE NowGet ONE Now
  • Step 2. Grove Base Hat を Raspberry に接続します。
  • Step 3. Grove - Mech Keycap を Base Hat の PWM ポート(ポート 12)に接続します。
注記

pin は PWM 機能用に、以下の値のいずれかを pin 列に指定し、対応するスロットにデバイスを接続してください。

PinSlot
18D18
12PWM
  • Step 4. Raspberry Pi を USB ケーブルで PC に接続します。

ソフトウェア

  • Step 1. 開発環境を構成するには、Setting Software に従ってください。
  • Step 2. grove.py ライブラリをクローンしてソースファイルをダウンロードします。
cd ~
git clone https://github.com/Seeed-Studio/grove.py

  • Step 3. 以下のコマンドを実行してコードを動かします。
cd grove.py/grove
sudo python grove_mech_keycap.py 12

注意

Unix には「セキュリティモデル」があります。通常のユーザーとして、いろいろな操作はできますが、同じコンピュータ上の他人のファイルにアクセスできてはいけません。また、ユーザーとしてコンピュータの動作を停止させることもできてはいけません。ところが "/dev/mem" を使うと、GPIO を変更するだけではなく、はるかに多くの「いたずら」が可能になります。そのため /dev/mem は一般ユーザーから保護されていなければなりません。したがってこのコードを実行するには、コマンドラインで sudo python grove_mech_keycap.py と入力する必要があります。

以下は 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()


ヒント

すべてがうまくいけば、次の結果が確認できます。キ―キャップをシングルクリックすると「turn on LED」が表示され、ダブルクリックすると「blink LED」が表示されます。長押しすると「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


++ctrl+c++ を押すだけで、このプログラムを終了できます。

回路図オンラインビューア

リソース

プロジェクト

これはこの製品の紹介ビデオで、簡単なデモを含んでいます。ぜひお試しください。

技術サポート & 製品ディスカッション

弊社製品をお選びいただきありがとうございます。私たちは、製品をできるだけスムーズにご利用いただけるよう、さまざまなサポートを提供しています。お好みやニーズに応じて選べる、複数のコミュニケーションチャネルをご用意しています。

Loading Comments...