CodeZine(コードジン)

特集ページ一覧

半田付け不要?!縫い付けて使うArduinoで激iLLな音で光るニット帽作ってみた!

IoT Starter Studio 第23回

  • LINEで送る
  • このエントリーをはてなブックマークに追加

目次

プログラミングしていく!

 ここで一旦通電チェックも含め、プログラムを書き込んでいきます。

プログラミングするための環境設定

 今回使うLilyPad Arduino 328はプログラミングする際にArduino IDEというソフトウェアを使います。このArduino IDEはフリーソフトです。公式サイトから各自のパソコンにダウンロードしてください。

ライブラリのインストール

 LilyPad Arduino 328はもともとArduino IDEにボードがインストールされているため、今回はボードのインストールは行いません。よって、NeoPixel(LED)を光らせるためのライブラリのみインストールしていきます。

 まず[Arduino]>[Preferences]をクリックしてください。

 上記のAdafruitのURLをコピーして、追加のボードマネージャーのURLに貼り、OKをクリックしてください。

https://www.adafruit.com/package_adafruit_index.json

 コピー&ペーストが完了したら、NeoPixelを光らせるために必要なライブラリをインストールします。[スケッチ]>[ライブラリ]を[インクルード]>[ライブラリを管理]をクリックしてください。

 画面が表示されるので、検索欄に「Neopixel」と入力しましょう。下記のようになります。「Adafruit Neopixel by Adafruit」を選択してインストールしてください。

プログラミングを書き込む

 以下のプログラムをArduino IDEにコピー&ペーストしてください。

#include <Adafruit_NeoPixel.h>

#define N_PIXELS  4 // 使用するNeopixel LED の数
#define MIC_PIN   A0  // Mic Ampを接続するピン番号
#define LED_PIN    7  // NeoPixel LED を接続するピン番号
#define DC_OFFSET  0  // DC offset i
#define NOISE     80// Mic Amp 信号のNoise/hum/interference
#define SAMPLES   60  // ダイナミックレベル調節でブッファーの長さ設定
#define TOP       (N_PIXELS)

byte
  peak      = 0,
  dotCount  = 0,
  volCount  = 0;

int
  vol[SAMPLES],
  lvl       = 20,
  minLvlAvg = 0,
  maxLvlAvg = 1024;

Adafruit_NeoPixel  strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {

  memset(vol,0,sizeof(int)*SAMPLES);
  strip.begin();
}
void loop() {
  uint8_t  i;
  uint16_t minLvl, maxLvl;
  int      n, height;
  n   = analogRead(MIC_PIN);
  n   = abs(n - 512 - DC_OFFSET);
  n   = (n <= NOISE) ? 0 : (n - NOISE);
  lvl = ((lvl * 7) + n) >> 3;

  height = TOP * (lvl - minLvlAvg) / (long)(maxLvlAvg - minLvlAvg);

  if(height < 0L)       height = 0;
  else if(height > TOP) height = TOP;
  if(height > peak)     peak   = height;

  uint8_t bright = 255;
#ifdef POT_PIN
   bright = analogRead(POT_PIN);

#endif
  strip.setBrightness(bright);


  for(i=0; i<N_PIXELS; i++) {
    if(i >= height)
       strip.setPixelColor(i,   100,  0, 100);
    else
       strip.setPixelColor(i,Wheel(map(i,100,strip.numPixels()-1,30,150)));
    }

   strip.show();

  vol[volCount] = n;
  if(++volCount >= SAMPLES) volCount = 0;


  minLvl = maxLvl = vol[0];
  for(i=1; i<SAMPLES; i++) {
    if(vol[i] < minLvl)      minLvl = vol[i];
    else if(vol[i] > maxLvl) maxLvl = vol[i];
  }

  if((maxLvl - minLvl) < TOP) maxLvl = minLvl + TOP;
  minLvlAvg = (minLvlAvg * 63 + minLvl) >> 6;
  maxLvlAvg = (maxLvlAvg * 63 + maxLvl) >> 6;
}


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

 次にボード、プロセッサ、シリアルポート、書込装置を以下の写真と同じものに設定していきます。

  • ボード:LilyPad Arduino
  • プロセッサ:ATmega328P
  • シリアルポート:/dev/cu.usbserial-Al04HO4K ※Windowsの場合表記が異なります。
  • 書込装置:AVRISP mkll

 書き込みのボタン(→)をクリックするとプログラムがLilyPadマイコンに書き込まれます。

 書き込みが終了したら以下の写真のように表示されるので、そうなったらケーブルを外しても大丈夫です。

 ここでNeoPixel(LED)がきちんと光ったら通電しているので、次のステップにいきましょう。通電してない場合はどこか違う配線になっているか、違う配線同士が接触していないかなど、問題を探して解決していきましょう。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:IoT Starter Studio

もっと読む

著者プロフィール

  • ギャル電 まお (dotstudio株式会社)(ギャルデン マオ)

     現役大学生。 ドンキでアルドゥイーノが買える時代を夢見て、ギャル電というユニットで活動をしている。  渋谷のギャルが電子工作ブームを起こす未来を想定し、技術サポートができるよう大学では電気工を専攻。好きな食べ物は、焼肉とクレープ。  パーティーとファッションを楽しくするものづくりを頑張っていき...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5