LilyPad研究会

作品置き場/光の三原色が学べるエプロン

目次

英語名

Apron to study three primary colors of light

カテゴリ

LilyPad Arduino

作品の概要

光の三原色を楽しく学べる手芸作品。
ハートが赤色のスナップボタンを留めればLEDが赤色に、
緑色のスナップボタンならLEDが緑色、
青色のスナップボタンならLEDが青色に光る。

複数のスナップボタンを留めることで色を混ぜることができる。

またボタンスイッチを利用することによって、
光っている色を覚えることができ
2秒以上押すことで覚えた色を順番に1秒ごとに光らせることもできる。

作品の写真

エプロン装着状態

作品置き場/光の三原色が学べるエプロン/RGBapron01.jpg

エプロン装着状態 後ろ姿

作品置き場/光の三原色が学べるエプロン/RGBapron04.jpg

エプロン展開状態

作品置き場/光の三原色が学べるエプロン/RGBapron02.jpg

エプロン展開状態 裏面

作品置き場/光の三原色が学べるエプロン/RGBapron03.jpg

ピン番号

機器名Dピン番号Aピン番号
入力専用出力専用
NeoPixel5
ボタンスイッチ6
スナップボタン(赤)19
スナップボタン(緑)18
スナップボタン(青)17

回路図

作品置き場/光の三原色が学べるエプロン/circuitDiagram.jpg

作品のプログラム

#include <Adafruit_NeoPixel.h>
#include <QueueList.h>

// 赤の留め具の接続PIN番号
#define RedPIN   19

// 緑の留め具の接続PIN番号
#define GreenPIN 18

// 青の留め具の接続PIN番号
#define BluePIN  17

// NeoPixelの接続PIN番号
#define NeoPIN   5

// ボタンスイッチの接続PIN番号
#define buttonPIN 6

// NeoPixelの初期設定
Adafruit_NeoPixel rgb = Adafruit_NeoPixel(1, NeoPIN, NEO_GRB + NEO_KHZ800);

// 色を記憶するためのキューリスト
QueueList <uint32_t> queueColor;

void setup() {
  // NeoPixelの初期化
  rgb.begin();

  // NeoPixelの明るさ調整
  rgb.setBrightness(80);
  rgb.show();

  // 留め具をデジタル入力として設定
  pinMode(RedPIN,   INPUT_PULLUP);
  pinMode(GreenPIN, INPUT_PULLUP);
  pinMode(BluePIN,  INPUT_PULLUP);

  // ボタンスイッチをデジタル入力として設定
  pinMode(buttonPIN,  INPUT_PULLUP);
}

void loop() {
  // 各留め具の状態取得
  int r = 255 * (1 - digitalRead(RedPIN));
  int g = 255 * (1 - digitalRead(GreenPIN));
  int b = 255 * (1 - digitalRead(BluePIN));

  // NeoPixelを光らせる
  rgb.setPixelColor(0, rgb.Color(r, g, b));
  rgb.show();

  // ボタンスイッチが押されていた時の処理
  if( digitalRead(buttonPIN) == 0 ){
    // ボタンを押した時に光っている色を記憶
    queueColor.push(rgb.Color(r, g, b));

    // ボタンが押されたという合図としてLEDを点滅させる
    for( int i = 0; i < 5; i++ ){
      rgb.setPixelColor(0, rgb.Color(r, g, b));
      rgb.show();
      delay(100);
      rgb.clear();
      rgb.show();
      delay(100);
    }

    // ボタンを押し続けている時間をカウント
    int t = 0;

    // ボタンのリリース待ちを行っている
    while( digitalRead(buttonPIN) == 0 ){
      delay(100);
      t += 100;
      
      // 2秒以上ボタンが押されたら記憶した色で順番に点灯していく
      if( t > 2000 ) {
        while( !queueColor.isEmpty() ) {
          rgb.setPixelColor(0, queueColor.pop());
          rgb.show();
          delay(1000);
        }
        break;
      }
    }
  }
}

作り方

http://www.notredame.ac.jp/~tyoshida/nclass/#!kuma.md

制作者

  • 設計:なかむらりょうた
  • 制作&刺繍:よしだともこ

Menu

ソフトウェア

サンプルプログラム

Wikiについて

最近の更新