SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IoT Starter Studio

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

IoT Starter Studio 第23回

  • X ポスト
  • このエントリーをはてなブックマークに追加

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

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

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

 今回使う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)がきちんと光ったら通電しているので、次のステップにいきましょう。通電してない場合はどこか違う配線になっているか、違う配線同士が接触していないかなど、問題を探して解決していきましょう。

次のページ
最終ステップ、グルーガンで導電糸を保護っていこう

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
IoT Starter Studio連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10520 2017/11/17 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング