FC2ブログ

日々の戯言 Audio Computer

オーディオやパソコンなど

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Raspberry Piで音楽に合わせてLEDを光らせる

100円ショップダイソーで偶然見つけた、LEDイルミネーションライトを
Raspberry Piで音楽に合わせて光らせました。

好きな音楽を流して眺めるだけでも楽しいですよ。


【準備物】
・Raspberry Pi
・ダイソーLEDイルミネーションライト
・USB-DAC

【ハード面】
NPNトランジスタでLEDドライバ回路を作りました。
今回は3chで20mAくらい流す設計です。
2SC1815とかで十分です。

【コードは以下の通り】
https://www.raspberrypi.org/forums/viewtopic.php?t=35838&start=25
を参考にさせて頂きました。

〈ポイントなど〉
・最初はPyAudioを使用する予定でしたが、エラーを吐いてうまく動作しなかったため
ALSAAudioを使いました。
ALSAAudioもデバイスの設定で苦労しました。(48行目)←環境によって異なります。

・動作フローは、8×8マトリクスLED用にFFT処理したデータをランダムに抽出して
条件分岐で光らせているだけです。
音圧によって青⇒緑⇒赤と光ります。
#!/usr/bin/env python

import alsaaudio as aa
from time import sleep
from struct import unpack
import numpy as np
import RPi.GPIO as GPIO
import random

GPIO.setmode(GPIO.BCM) 
GPIO.setup(13, GPIO.OUT)
GPIO.setup(19, GPIO.OUT)
GPIO.setup(26, GPIO.OUT)

def TurnOffLEDS ():
   GPIO.output(13, GPIO.LOW)
   GPIO.output(19, GPIO.LOW)
   GPIO.output(26, GPIO.LOW)

def Set_Column(row):
	TurnOffLEDS()
	#print(row)
	if row == 0:
		GPIO.output(26, GPIO.HIGH)
	elif row == 1:
		GPIO.output(26, GPIO.HIGH)
	elif row == 2:
		GPIO.output(26, GPIO.HIGH)
		GPIO.output(19, GPIO.HIGH)
	elif row == 3:
		#GPIO.output(26, GPIO.HIGH)
		GPIO.output(19, GPIO.HIGH)
		GPIO.output(13, GPIO.HIGH)
	elif row == 4:
		GPIO.output(19, GPIO.HIGH)
	else:
		GPIO.output(13, GPIO.HIGH)
	#print(col)
			
# Initialise matrix
TurnOffLEDS()

# Set up audio
#device = "CARD=0,DEV=0"
sample_rate = 44100
no_channels = 2
chunk = 512 # Use a multiple of 8
data_in = aa.PCM(aa.PCM_CAPTURE, aa.PCM_NORMAL, "plughw:CARD=Audio,DEV=0")
data_in.setchannels(no_channels)
data_in.setrate(sample_rate)
data_in.setformat(aa.PCM_FORMAT_S16_LE)
data_in.setperiodsize(chunk)

def calculate_levels(data, chunk,sample_rate):
	# Convert raw data to numpy array
	data = unpack("%dh"%(len(data)/2),data)
	data = np.array(data, dtype='h')
	# Apply FFT - real data so rfft used
	fourier=np.fft.rfft(data)
	# Remove last element in array to make it the same size as chunk
	fourier=np.delete(fourier,len(fourier)-1)
	# Find amplitude
	power = np.log10(np.abs(fourier))**2
	# Araange array into 8 rows for the 8 bars on LED matrix
	power = np.reshape(power,(8,chunk/8))
	matrix= np.int_(np.average(power,axis=1)/4)
	return matrix

print "Processing....."

while True:
	TurnOffLEDS()
	# Read data from device	
	l,data = data_in.read()
	data_in.pause(1) # Pause capture whilst RPi processes data
	if l:
		# catch frame error
		try:
			  matrix=calculate_levels(data, chunk,sample_rate)
			  #print(matrix)
			  for i in range (2,3):
						#Set_Column((1<<matrix[i])-1)
						 Set_Column(random.choice(matrix))

		except audioop.error, e:
			  if e.message !="not a whole number of frames":
				raise e
				GPIO.cleanup()
	sleep(0.001)
	data_in.pause(0) # Resume capture
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。

【改善点とか】
・音を出してから光るまでに遅延があるため、処理を軽くしたい。
・せっかくなので規模を大きくして光らせたい。(10chくらい)
スポンサーサイト

テーマ:電子工作 - ジャンル:趣味・実用

  1. 2018/07/31(火) 20:21:46|
  2. SBC
  3. | トラックバック:0
  4. | コメント:0

13.3インチ液晶タッチパネルキットレビュー

DSC_1072_result.jpg 
無事完成しましたが、一発目映らず。。。。
eDP-FPCの向きを間違えました。挿し直して無事映りました!

細かい作業が好きでしたら楽しく組み立てできますよ。

Tinker Board + 13.3インチ液晶タッチパネルで現在連続稼働中
電源は12V5AクラスのACアダプターです。

発色良好、6bit液晶との事ですが私には十分な画質です。


このボードのICが型番不明で気になってしょうがない。
割と熱持ちます。4時間動かして50℃台かな?
ヒートシンク無いと怖いかも。
DSC_1014_result.jpg 
※『改良したい箇所が多いため、今後の基板変更と合わせて改良する予定』との事ですので
現在のレビューは参考までにお考えください。
  1. 2018/06/19(火) 17:13:00|
  2. パソコン
  3. | トラックバック:0
  4. | コメント:0

13.3インチ液晶タッチパネルキットの組み立て②

①の記事に引き続き、組み立てていきます。

液晶パネルの裏面に両面テープを貼り付けます。
私は2列にぐるっと貼りました。
DSC_1027_result.jpg 

タッチパネルのフレキは、内側にクセをつけると枠を取り付け易くなります。
DSC_1023_result.jpg 

液晶パネルFPCを挿し込みます。
DSC_1029_result.jpg 

順番に重ねていきます。
DSC_1031_result.jpg 

タッチパネルのI/Fコネクタはぐにゅっと入ります。
DSC_1033_result.jpg 

ボードの溝に這わせて、テープ止めです。
DSC_1034_result.jpg 

どんどん重ねます。
DSC_1035_result.jpg 

microUSBコネクタ基板を固定、ワイヤは付属のホルダーで固定します。
ホルダーは左右にこじりながら押し込みます。
DSC_1040_result.jpg 

I/Oパネル圧入します。
DSC_1041_result.jpg 

ハーネスを這わせますが、こちらは一回失敗したもの。
角にハーネスが乗り上げました。。。
DSC_1046_result.jpg 

このように角で折りクセをつけると良いです。
DSC_1051_result.jpg 

VESAマウントのナットをのせます。
DSC_1052_result.jpg 

※私の判断でこちらを準備しました。
 ヒートシンクと熱伝導テープです。
DSC_1053_result.jpg 


チップが熱を持つので取り付けました。
DSC_1054_result.jpg 

完成です!!
DSC_1055_result.jpg 
  1. 2018/06/19(火) 16:47:20|
  2. パソコン
  3. | トラックバック:0
  4. | コメント:0

13.3インチ液晶タッチパネルキットの組み立て①

島根鳥取様の液晶タッチパネルキットの組み立てを行いました。

作業時間:2.5時間
【工具類】
+ドライバー、六角レンチ、ハサミ

組み立ての部材はこちら。
DSC_1004_result.jpg 
各層組み上がった状態ですので、順番にばらしていきます。
保護シートに使用するビスが明記されています。
1.
DSC_1008_result.jpg 
2.
DSC_1010_result.jpg

3.
DSC_1011_result.jpg 
4.
DSC_1012_result.jpg 
5.
DSC_1016_result.jpg 
6.
DSC_1017_result.jpg 
7.
DSC_1018_result.jpg 
8.
DSC_1020_result.jpg 
②の記事へ続きます。
  1. 2018/06/19(火) 15:40:00|
  2. パソコン
  3. | トラックバック:0
  4. | コメント:0

ASUS tinker boardへOpen GAppsをインストール

ASUS製シングルボードコンピュータtinker boardでAndroidを動かし
Open GAppsをインストールしたメモ

Screenshot_20180201-195203.jpg 

【用意するもの】
Linuxマシン(今回はVirtualMachine上のUbuntuを使った)
adbツール類(adb , lzip)

【全体の流れ】
Linux上でOpen GAppsを展開、再構成しadb pushする。
その後、パーミッションの設定と微調整で完了。

【インストール】
<ツールのインストール>
$sudo apt-get install -y android-tools-adb android-tools-fastboot git rsync lzip

<作業フォルダの作成>
$mkdir ~/tinker
$mkdir ~/tinker/gapps
$mkdir ~/tinker/gapps/pkg
$mkdir ~/tinker/gapps/tmp
$mkdir ~/tinker/gapps/sys

<Open GAppsの展開>
https://github.com/opengapps/arm/releases/からGAppsをダウンロード
今回は「open_gapps-arm-6.0-pico-20180131.zip」
作業フォルダへ展開する。

$unzip open_gapps-arm-6.0-pico-20180131.zip -d gapps/pkg
$find . -name "*.tar.[g|l|x]z" -exec tar -xf {} -C ~/tinker/gapps/tmp/ \;

<シェルスクリプト作成>
GAppsを再構築するため以下内容のスクリプトを作成する。
適当な名前で「tinker」フォルダへ保存。「gap.sh」

#!/bin/bash
for dir in gapps/tmp/*/
    do
      pkg=${dir%*/}
      dpi=$(ls -1 $pkg | head -1)

      echo "Preparing $pkg/$dpi"
      rsync -aq $pkg/$dpi/ gapps/sys/
    done

<シェルスクリプト実行>
chmodで権限を与えるか、sh gap.shで実行

<tinker boardへ転送>
以下、「tinker」フォルダで実行する。
同じDHCPサーバ内にtinker boardは接続し、IPアドレスを確認しておく。

$adb connect 192.168.1.23
$adb root
$adb connect 192.168.1.23
$adb remount
$adb push gapps/sys/. /system/.

<パッケージインストーラの削除>
$adb shell
#rm -rf /system/priv-app/PackageInstaller

実行したら「Ctrl+D」で抜ける。

<tinker board再起動>
$adb reboot

adb root shellに入る
$adb connect 192.168.1.23
$adb root
$adb connect 192.168.1.23
$adb shell

<パーミッションとセットアップウィザードの問題を修正>
#pm grant com.google.android.gms android.permission.ACCESS_COARSE_LOCATION
#pm grant com.google.android.gms android.permission.ACCESS_FINE_LOCATION
#pm grant com.google.android.setupwizard android.permission.READ_PHONE_STATE

<参考URL>
https://tinkerboarding.co.uk/forum/thread-553.html
  1. 2018/02/01(木) 19:58:00|
  2. パソコン
  3. | トラックバック:0
  4. | コメント:0
次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。