2016年1月31日日曜日

Fritzingのインストール

回路図作成アプリケーション"Fritzing*"をMac OS X (Yosemite)にインストールした際のメモです.

まずは,Fritzingのサイトから,アプリケーションのダウンロードを行います.
ダウンロードの際には,寄付をするかどうかを尋ねてきますが,まずは,"No Donation"を選択してダウンロードします(もちろん,寄付した方が良いと思います).
OSを選択して(この記事の場合はMac OS X Yosemite) ダウンロードを開始します.ダウンロードした.dmgファイルをダブルクリックして,アプリケーションフォルダにドラッグアンドドロップすれば,インストール完了です.アプリケーションフォルダから,Fritzingを立ち上げると,以下のような画面が立ち上がります.
上部のタブからブレッドボードタブをクリックすると,以下のようにブレッドボードが表示されます.

Raspberry Pi2を用いた回路図を作成したいので,CORE > Raspberry Pi1をドラッグアンドドロップすると,ブレッドボードが表示されている画面に,Raspberry Piの基盤が表示されます.
あとは,Parts欄から,使用するものをドラッグアンドドロップして,回路図を作成します.

* Fritzing:  Windows/Mac/Linuxといった様々な環境で動作するオープンソースの電子回路設計ツール.回路図の設計からシミュレーションが可能.ドキュメントやブレッドボードの図にCC ライセンスが適用されている.

R0001650
https://www.flickr.com/photos/hidehikomurao/26856802802/in/dateposted-public/

2016年1月30日土曜日

[Raspberry Pi] 電気の基本

Raspberry Pi などを使って,LEDやスイッチなどの一つの部品のみであれば制御できても,複数の部品を組み合わせて使うと上手くうごかないことがあります.
そのような時に,電気の基本的な知識があると役立つことがあります.

電気とは
電子回路では,電子部品を導線で接続すると電気が流れてLEDが点灯したりします.この電気とは一体何なのかを以下に記します.電気とは,電荷という電気的な特性を持った粒子が導線などの中を動くことで,電気素子に力を与えることができるものです.電荷にはエネルギーがあり,それを様々な素子に加えることで熱,光,磁気などを発するといった現象を引き起こします(LEDの場合には,電荷のエネルギーを光に変換して光らせています).

電荷には正の電荷と負の電荷があり,正の電荷は電源の+側から-側に流れ,負の電荷が-から+側に流れます*.この正の電荷の流れを電流といいます.電流は流れる量が多いほど素子に与えるエネルギーが大きくなります(LEDであれば,電流を多く流すほど明るくなります).電流の値はA(アンペア)で表します.

電気は電池などの電源から供給されます.この電源から供給されます.この電源から回路に電気を供給できる力のことを電圧といいます.電圧が高ければ回路に送り出す電荷が多くなるため,大きな電流を流すことができます.電圧の値はV(ボルト)で表します.

*実際には,負の電荷である電子が動き,正の電荷の陽子は動きません.しかし,擬似的に正の電荷が動いているように見えるために,プラス電荷が流れているとみなします.

直列接続と並列接続
回路のつなぎ方には大きく直列と並列の2種類があります.直列と並列を意識すると回路の状態を把握しやすくなります.

直列は,素子などを連続してつなげる形式です.この際,各素子の両端にかかる電圧を足し合わせると,接続した電源と同じになります.電流は電荷の流れなので,分岐しない限りは量が変わりません.そのため,各素子に流れる電流は同じになります.

並列では,素子などを並べてつなぎます.各素子の両端は直接電源とつながっている状態になります.つまり,各素子の両端にかかる電圧は電源と同じになります.電荷の流れである電流は,複数の経路があれば別れて流れます.つまり,分岐した配線に流れる電流を足し合わせると,別れる前に流れる電流と同じになります.

オームの法則
オームの法則は,抵抗にかかる電圧と蓮龍の関係を表すものです.
オームの法則は,以下の式で表せます.
V = IR
(V: 電圧,I: 電流,R: 抵抗)
上式から抵抗が一定のとき,電圧と電流は比例することがわかります.つまり,高い電圧がかかれば,その分電流も大きくなります.電圧を一定にして抵抗を大きくすると電流は小さくなります.

  R0001643
https://www.flickr.com/photos/hidehikomurao/26346684383/in/dateposted-public/

2016年1月29日金曜日

[gnuplot] gnuplotのデフォルトカラー

gnuplotで予め設定されている色は,以下の表のようになります.

■white ■black ■gray0 ■grey0 ■gray10 ■grey10
■gray20 ■grey20 ■gray30 ■grey30 ■gray40 ■grey40
■gray50 ■grey50 ■gray60 ■grey60 ■gray70 ■grey70
■gray80 ■grey80 ■gray90 ■grey90 ■gray100 ■grey100
■gray ■grey ■light-gray ■light-grey ■dark-gray ■dark-grey
■red ■light-red ■dark-red ■yellow ■light-yellow ■dark-yellow
■green ■light-green ■dark-green ■spring-green ■forest-green ■sea-green
■blue ■light-blue ■dark-blue ■midnight-blue ■navy ■medium-blue
■royalblue ■skyblue ■cyan ■light-cyan ■dark-cyan ■magenta
■light-magenta ■dark-magenta ■turquoise ■light-turquoise ■dark-turquoise ■pink
■light-pink ■dark-pink ■coral ■light-coral ■orange-red ■salmon
■light-salmon ■dark-salmon ■aquamarine ■khaki ■dark-khaki ■goldenrod
■light-goldenrod ■dark-goldenrod ■gold ■beige ■brown ■orange
■dark-orange ■violet ■dark-violet ■plum ■purple  

ターミナルから"show palette color"と入力すると,以下のようにリストを見ることができます.

gnuplot> show palette color
There are 111 predefined color names:
  white              #ffffff = 255 255 255
  black              #000000 =   0   0   0
  dark-grey          #a0a0a0 = 160 160 160
  red                #ff0000 = 255   0   0
  web-green          #00c000 =   0 192   0
  web-blue           #0080ff =   0 128 255
  dark-magenta       #c000ff = 192   0 255
  dark-cyan          #00eeee =   0 238 238
  dark-orange        #c04000 = 192  64   0
  dark-yellow        #c8c800 = 200 200   0
  royalblue          #4169e1 =  65 105 225
  goldenrod          #ffc020 = 255 192  32
  dark-spring-green  #008040 =   0 128  64
  purple             #c080ff = 192 128 255
  steelblue          #306080 =  48  96 128
  dark-red           #8b0000 = 139   0   0
  dark-chartreuse    #408000 =  64 128   0
  orchid             #ff80ff = 255 128 255
  aquamarine         #7fffd4 = 127 255 212
  brown              #a52a2a = 165  42  42
  yellow             #ffff00 = 255 255   0
  turquoise          #40e0d0 =  64 224 208
  grey0              #000000 =   0   0   0
  grey10             #1a1a1a =  26  26  26
  grey20             #333333 =  51  51  51
  grey30             #4d4d4d =  77  77  77
  grey40             #666666 = 102 102 102
  grey50             #7f7f7f = 127 127 127
  grey60             #999999 = 153 153 153
  grey70             #b3b3b3 = 179 179 179
  grey               #c0c0c0 = 192 192 192
  grey80             #cccccc = 204 204 204
  grey90             #e5e5e5 = 229 229 229
  grey100            #ffffff = 255 255 255
  light-red          #f03232 = 240  50  50
  light-green        #90ee90 = 144 238 144
  light-blue         #add8e6 = 173 216 230
  light-magenta      #f055f0 = 240  85 240
  light-cyan         #e0ffff = 224 255 255
  light-goldenrod    #eedd82 = 238 221 130
  light-pink         #ffb6c1 = 255 182 193
  light-turquoise    #afeeee = 175 238 238
  gold               #ffd700 = 255 215   0
  green              #00ff00 =   0 255   0
  dark-green         #006400 =   0 100   0
  spring-green       #00ff7f =   0 255 127
  forest-green       #228b22 =  34 139  34
  sea-green          #2e8b57 =  46 139  87
  blue               #0000ff =   0   0 255
  dark-blue          #00008b =   0   0 139
  midnight-blue      #191970 =  25  25 112
  navy               #000080 =   0   0 128
  medium-blue        #0000cd =   0   0 205
  skyblue            #87ceeb = 135 206 235
  cyan               #00ffff =   0 255 255
  magenta            #ff00ff = 255   0 255
  dark-turquoise     #00ced1 =   0 206 209
  dark-pink          #ff1493 = 255  20 147
  coral              #ff7f50 = 255 127  80
  light-coral        #f08080 = 240 128 128
  orange-red         #ff4500 = 255  69   0
  salmon             #fa8072 = 250 128 114
  dark-salmon        #e9967a = 233 150 122
  khaki              #f0e68c = 240 230 140
  dark-khaki         #bdb76b = 189 183 107
  dark-goldenrod     #b8860b = 184 134  11
  beige              #f5f5dc = 245 245 220
  olive              #a08020 = 160 128  32
  orange             #ffa500 = 255 165   0
  violet             #ee82ee = 238 130 238
  dark-violet        #9400d3 = 148   0 211
  plum               #dda0dd = 221 160 221
  dark-plum          #905040 = 144  80  64
  dark-olivegreen    #556b2f =  85 107  47
  orangered4         #801400 = 128  20   0
  brown4             #801414 = 128  20  20
  sienna4            #804014 = 128  64  20
  orchid4            #804080 = 128  64 128
  mediumpurple3      #8060c0 = 128  96 192
  slateblue1         #8060ff = 128  96 255
  yellow4            #808000 = 128 128   0
  sienna1            #ff8040 = 255 128  64
  tan1               #ffa040 = 255 160  64
  sandybrown         #ffa060 = 255 160  96
  light-salmon       #ffa070 = 255 160 112
  pink               #ffc0c0 = 255 192 192
  khaki1             #ffff80 = 255 255 128
  lemonchiffon       #ffffc0 = 255 255 192
  bisque             #cdb79e = 205 183 158
  honeydew           #f0fff0 = 240 255 240
  slategrey          #a0b6cd = 160 182 205
  seagreen           #c1ffc1 = 193 255 193
  antiquewhite       #cdc0b0 = 205 192 176
  chartreuse         #7cff40 = 124 255  64
  greenyellow        #a0ff20 = 160 255  32
  gray               #bebebe = 190 190 190
  light-gray         #d3d3d3 = 211 211 211
  light-grey         #d3d3d3 = 211 211 211
  dark-gray          #a0a0a0 = 160 160 160
  slategray          #a0b6cd = 160 182 205
  gray0              #000000 =   0   0   0
  gray10             #1a1a1a =  26  26  26
  gray20             #333333 =  51  51  51
  gray30             #4d4d4d =  77  77  77
  gray40             #666666 = 102 102 102
  gray50             #7f7f7f = 127 127 127
  gray60             #999999 = 153 153 153
  gray70             #b3b3b3 = 179 179 179
  gray80             #cccccc = 204 204 204
  gray90             #e5e5e5 = 229 229 229
  gray100            #ffffff = 255 255 255


gnuplot> 


カレーうどん 大盛
https://flic.kr/p/xTacte

2016年1月28日木曜日

[gnuplot] 対数関数のプロット

gnuplot において準備されているのは,常用対数(log10(x))と自然対数(log(x))のみです.

$y = \log_{a}x$

といった対数関数をプロットするには
gnuplot> plot log(x)/log(a)
とします.

これには,対数関数の性質

を利用しています.

簡単な表示例:

gnuplot> set xrange [0:3]
gnuplot> set yrange [-5:5]
gnuplot> plot log(x)/log(1.25)
gnuplot> 

上記のようにプロットすると,以下のようなグラフが得られます.



5377234408_c53cd8c898_o
https://flic.kr/p/wZypP6

2016年1月27日水曜日

[gnuplot] 三角関数のプロット

gnuplotでは,デフォルトで以下の三角関数が準備されています.

sin(x) 任意正弦関数
cos(x)任意余弦関数
tan(x)任意正接関数
asin(x)任意逆正弦関数
acos(x)任意逆余弦関数
atan(x)任意逆正接関数
atan2(y,x)整数,実数$ \tan^{-1}\frac{yの実部}{xの実部}$を返す

デフォルトでは,単位はラディアンですが,度に変更することが可能です.

以下に,sin(x), cos(x), tan(x)をプロットする例を示します.
まずは,下記のようなスクリプトを作成し,

set terminal postscript eps color enhanced "Arial" 25
set output "fig215.eps"

set angle degree

set xrange [0:720]
set yrange [-5:5]

set xlabel "{/=30 angle(degree)}"
set ylabel "{/=30 y}"

set key right bottom

plot sin(x) title "sin{/Symbol q}", cos(x) title "cos{/Symbol q}", tan(x) title "tan{/Symbol q}"

set output
set terminal aqua

このスクリプトを'fig.gp'という名前で保存し,ターミナルから実行すると'figxx.eps'ファイルが作成されます.
gnuplot> load 'fig.gp'
gnuplot> 


arcsin, arccosのスクリプト例:
set terminal postscript eps color enhanced "Arial" 25
set output "fig216.eps"

set xrange [-1:1]
set yrange [-90:180]

set xlabel "{/=30 y}"
set ylabel "{/=30 angle(degree)}"

set key right bottom

plot asin(x) title "arcsin y", acos(x) title "arccos y"

set output
set terminal aqua


arctanのスクリプト例:
set terminal postscript eps color enhanced "Arial" 25
set output "fig216-2.eps"

set xrange [-50:50]
set yrange [-90:90]

set xlabel "{/=30 y}"
set ylabel "{/=30 angle(degree)}"

set key right bottom

plot atan(x) title "arctan y"

set output
set terminal aqua


「俺のブラック」特盛
https://flic.kr/p/xvfoPs

2016年1月23日土曜日

Water swaying in vibration(50Hz).

土槽の中に土を入れ,飽和させた後に,加振した際の水面の振動状況です.


みくりが池 Mikuriga Pond
https://flic.kr/p/wZrCM3

2016年1月1日金曜日

[Python] 方程式を解くプログラム

方程式(今回の例では f(x) = x^2 - a )を解くプログラム例を示します.

特別なモジュールを利用せずに,Python単体の言語機能のみで,2分法(Bisection method)アルゴリズムを使ったプログラム例:

# -*- coding: utf-8 -*-

# Global variable
a = 2   # f(x) = x*x - a
LIMIT = 1e-20   # Exit condition

def f(x):       # Function definition
    return x*x - a

# Main execution unit
xp = float(input("Input xp: "))
xn = float(input("Input xn: "))

# Iterative processing
while (xp - xn) * (xp - xn) > LIMIT:    # Repeat until the exit condition is satisfied
    xmid = (xp + xn) / 2                # Computation of new intermediate value
    if f(xmid) > 0:
        xp = xmid                       # Update xp if intermediate value is positive
    else:
        xn = xmid                       # Update xn unless the intermediate value is positive

    print("{:.15f} {:.15f}".format(xn, xp))

実行例:
$ python bisec.py
Input xp: 1.5
Input xn: 1.3
1.400000000000000 1.500000000000000
1.400000000000000 1.450000000000000
1.400000000000000 1.425000000000000
1.412500000000000 1.425000000000000
1.412500000000000 1.418750000000000
1.412500000000000 1.415625000000000
1.414062500000000 1.415625000000000
1.414062500000000 1.414843750000000
1.414062500000000 1.414453125000000
1.414062500000000 1.414257812500000
1.414160156250000 1.414257812500000
1.414208984375000 1.414257812500000
1.414208984375000 1.414233398437500
1.414208984375000 1.414221191406250
1.414208984375000 1.414215087890625
1.414212036132813 1.414215087890625
1.414213562011719 1.414215087890625
1.414213562011719 1.414214324951172
1.414213562011719 1.414213943481445
1.414213562011719 1.414213752746582
1.414213562011719 1.414213657379150
1.414213562011719 1.414213609695435
1.414213562011719 1.414213585853576
1.414213562011719 1.414213573932648
1.414213562011719 1.414213567972183
1.414213562011719 1.414213564991951
1.414213562011719 1.414213563501835
1.414213562011719 1.414213562756777
1.414213562011719 1.414213562384248
1.414213562197983 1.414213562384248
1.414213562291116 1.414213562384248

2分法のアルゴリズムを使わずに,Pythonモジュール(math モジュール)を用いて平方根を求めるプログラム例.

# -*- coding: utf-8 -*-

import math     # Import module

# Main execution unit
x = float(input("Input a value to find a positive square root: "))  # input

print("sqrt(", x, ") = ", math.sqrt(x))

実行例:
$ python sqrt.py
Input a value to find a positive square root: 2
sqrt( 2.0 ) =  1.4142135623730951
$ python sqrt.py
Input a value to find a positive square root: 3
sqrt( 3.0 ) =  1.7320508075688772

Pythonモジュール(simply モジュール)を用いて方程式の解を求めるプログラム例:

# -*- coding: utf-8 -*-

from sympy import *     # Import module

var("x")    # Use variable x
equation = Eq(x**2 - 2, 0# Setting equation
answer = solve(equation)    # Solve equation

print(answer)               # Output result

実行例:
$ python solve.py
[-sqrt(2), sqrt(2)]

上記の例だと答えが

と表示されています.試しに,

    x**3 + 2 * x**2 - 5 * x - 6

という方程式を解くプログラム例を以下に示します.
# -*- coding: utf-8 -*-

from sympy import *     # Import module

var("x")    # Use variable x
equation = Eq(x**3 + 2 * x**2 - 5 * x - 6, 0# Setting equation
answer = solve(equation)    # Solve equation

print(answer)               # Output result

実行例:
$ python solve2.py
[-3, -1, 2]
ちゃんと,-3, -1, 2 という答えが得られています.