{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"オリジナルの作成: 2014/02/23"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 04-Protosnapをバラして組み立てる\n",
"第4回目の勉強会の資料です。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ProtoSnap Pro Miniボードをバラバラにする\n",
"さあ、これまで難なく動いていたProtoSnap Pro Miniボードをバラバラにしてみましょう。\n",
"\n",
"ボードから部品を切り離すときには、ニッパを使うと便利です。 \n",
"[1](#Ref_1)\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ブレッドボードに組み立てる\n",
"私は、シリアルボードのL字ピンの付ける面を間違えてしまいました。 上ではなく下に付けた方が使いやすいです!\n",
"\n",
"\n",
"\n",
"ブレッドボードの配線は、以下の図をみてください。\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 動作確認\n",
"組み立てたボードがきちんと動くか確かめましょう。\n",
"\n",
"\n",
"\n",
"Blinkをボードに書き込んでArduino Pro Miniのボードが動作するか見てみましょう。 ファイル→スケッチの例→01.Basics→Blinkを選択して、Arduinoに書き込んで緑のLEDが点滅することを確認してください。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Arduino Pro miniをブレッドボードに差す\n",
"電源を入れる前に、もう一度ブレッドボードのVCCとGNDの位置が合っているか確認しましょう! 写真の赤い四角で囲まれたところがVCCのピンと合っているか確かめて下さい\n",
"\n",
"順番に動作を確認します。\n",
"\n",
"- 電源を入れます。先ほどのBlinkが同じように動くことを確認してください。\n",
"- カラーLEDの接続確認:pin2の値を、1個づつ5(緑)、6(青)、3(赤)に変えて書き込みLEDの点滅を確認してください。\n",
"```C++\n",
"int pin2 = 2;\n",
"```\n",
"- スイッチの確認:1回目に使ったスイッチのスケッチを使って動作を確かめてます。\n",
"\n",
"```C++\n",
"int buttonPin = 7; // ボタンは 7番ピンにつながっています\n",
"int ledPin = 13; // LEDは 13番ピンにつながっています\n",
"\n",
"int buttonStatus; // ボタンの状態を保持するための変数\n",
"\n",
"void setup() {\n",
" pinMode(buttonPin, INPUT); // ボタンピンを入力として初期設定\n",
" pinMode(ledPin, OUTPUT); // LEDピンを出力として初期設定\n",
"}\n",
"\n",
"void loop() {\n",
" /* 最初にボタンの状態を読み込みます\n",
" HIGH = ボタンが押されていない状態\n",
" LOW = ボタンが押されている状態 */\n",
" buttonStatus = digitalRead(buttonPin);\n",
" \n",
" if (buttonStatus == LOW) {\n",
" digitalWrite(ledPin, HIGH); // ボタンが押されていたらLEDを点灯する\n",
" }\n",
" else {\n",
" digitalWrite(ledPin, LOW); // そうでなければLEDを消す\n",
" }\n",
"}\n",
"```\n",
"\n",
"- スピーカー:スピーカーの例題を動かします。\n",
"\n",
"```C++\n",
"// Tone\n",
"int toneDuration = 40; // 音のでる間隔(40ミリ秒)\n",
"int speakerPin = 2; //ブザーのピン番号\n",
"int index = 0; // 何番目の配列かを示す値(配列の添え字を求める)\n",
"char ch; // パソコンから読み込んだ文字(コード)\n",
"int tones[]={262,294,330,392,440}; // ド、レ、ミ、ソ、ラ\n",
" \n",
"void setup() {\n",
" /* シリアル通信の速度を9600ボーにセットし、最初にHello…のメッセージを表示する */\n",
" Serial.begin(9600);\n",
" Serial.println(\"Input [1-5]!\");\n",
"}\n",
"\n",
"void loop() {\n",
" ch = Serial.read(); // パソコンから1文字読み込む\n",
" if (ch >= '1' && ch <= '5') { // 読み込んだ値が1から5の文字なら、音を鳴らす\n",
" index = ch - '1'; // 1の文字から0のインデックスを求めるために、'1'を引く\n",
" tone(speakerPin, tones[index], toneDuration);\n",
" }\n",
" delay(500); // 次の読み込みまで待つ\n",
"}\n",
"```\n",
"\n",
"- 光センサー:同様に光センサーの例題を動かします。シリアルモニターがセンサーの値がでてくることを確認してください。\n",
"\n",
"```C++\n",
"int lightPin = A0; // 光センサーはA0につながっている\n",
"\n",
"int lightReading; // 光センサーからの値を保持する変数\n",
"\n",
"void setup() {\n",
" /* シリアル通信の速度を9600ボーにセットし、最初にHello…のメッセージを表示する */\n",
" Serial.begin(9600);\n",
" Serial.println(\"Hello world, let's read some light sensors!\");\n",
"}\n",
"\n",
"void loop() {\n",
" lightReading = analogRead(lightPin); // 光センサーから値を読み込む\n",
" Serial.println(lightReading, DEC); // 読み込んだ値をシリアル通信を使ってシリアルモニターに送る\n",
" delay(250); // 次の読み込みまで待つ\n",
"}\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 温度センサーを使ってみる\n",
"温度センサーには、いろんなタイプがあります。\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### LM35を使ってみる\n",
"電圧を測るだけで、温度が分かるLM35はとても使いやすいセンサーです。\n",
"\n",
"\n",
"\n",
"シリアルモニターの出力は、44から46の値が出ています。\n",
"\n",
"\n",
"\n",
"テスターで電圧を測ってみると、以下の様に227.7mVとなりました。 温度は、22.7℃になります。\n",
"\n",
"$$\n",
"frac{46}{1023} \\times 4.78 V = 0.2149 V\n",
"$$\n",
"\n",
"Arduinoの出力した値も21.5℃と良い値を示しています。\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 半固定抵抗を使ってみる\n",
"今度は、LM35の代わりにスイッチサイエンスからブレッドボードにそのままささる、 \n",
"[つまみの大きい半固定抵抗10KΩ ](http://www.switch-science.com/catalog/1039/)\n",
"を使ってみます。\n",
"\n",
"\n",
"\n",
"先ほどと同じスケッチで動かしてみて下さい。 つまみを回すと値が0から1023に変わるのを確かめて下さい。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ハンダ付けの様子 \n",
"参加者の皆さんが、ハンダ付けに挑戦している様子をアップします\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 脚注\n",
"\n",
"- [1] 切り離すときは、部品を壊さないように気を付けましょう。"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 0
}