「Arduinoをはじめよう」その4 - プッシュボタンを押したらLEDが点灯、もう一回押したら消える

前回まではプッシュボタン押したときに点滅し続ける、離したら消える、ってを作ってました。今回は一回プッシュボタン押したら点灯し続け、もう一回押したら消える。また押したら点灯する。ってのを作ります。

コードは以下。

// ボタンを押したら点灯、もう一回押したら消える(はず、その3)
// ボタンの状態が変化(オフからオン、オンからオフ)したときのみstateを変更する
// バウンシング(ボタンが完全に押されていない状態)が生じるが50ms遅延させることで問題を解消

const int LED = 13;
const int BUTTON = 7;

int val = 0; // 入力ピンの状態を記憶しておく用
int old_val = 0; // 前回の入力ピンの状態を記憶
int state = 0; // LEDの状態(0ならオフ、1ならオン)

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);
}

void loop() {
  val = digitalRead(BUTTON);
  
  // ボタンの状態が変化したか?
  if ((val == HIGH) && (old_val == LOW)) {
    state = 1 - state;
    delay(50); // バウンシング解消用の遅延
  }
  
  old_val = val;
  
  if (state == 1) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

ボタンが完全に押されていない、中途半端な状態を「バウンシング」っていうらしい。
それによって挙動がちょっと変になる時がある。
1度押したら着く↔1度押したら消える
の繰り返しになって欲しいのにそうならなかったり。

で、10msから50msの遅延を入れると解消するって書いてあったんだが、それでもうまくいかない時がある。
なんでかはわからないからまあ放おって置こう。そのうちわかるだろう。


プッシュボタン押したらLED点灯、消灯を繰り返す

「Arduinoをはじめよう」その3 - プッシュボタンをつけてLEDをコントロール

ただの電子工作っぽいが、この間作ったものにプッシュボタンをつけてLEDをコントロールしてみる。

オームの法則の復習。

R(抵抗) = V(電圧) / I(電流)
V(電圧) = R(抵抗) * I(電流)
I(電流) = V(電圧) / R(抵抗)

「Aruduinoをはじめよう」の中ではこの数式だけ覚えれば良いって言っとります。

プッシュボタンを使ってLEDをコントロール

さて、やってみます。
回路はこんな感じ。って写真取ったけどさっぱりわからんね。 f:id:masamitsu001:20170316215507j:plain

回路用のサービスあったからそこで作ってみた。 f:id:masamitsu001:20170316222547p:plain

スケッチはこんな感じ。

// ボタンを押されている間、LEDを点灯する

const int LED = 13;
const int BUTTON = 7;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);
}

void loop() {
  boolean val = digitalRead(BUTTON);
  
  // 入力はHIGH(ボタンが押されている状態)か?
  if (val == HIGH) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
}

できた。


プッシュボタン押したらLEDが光るやーつ

抵抗の色の付いた線の意味ってなに?

抵抗にもいろいろ種類があるみたいで、抵抗に書かれている線の色で判別できるらしい。
多くて覚えきれる気がしないがまあこのサイトに載っている感じ。 カラー抵抗早見表!

↓この本で勉強してます。

Arduinoをはじめよう 第3版 (Make:PROJECTS)

Arduinoをはじめよう 第3版 (Make:PROJECTS)

「Arduinoをはじめよう」その2 - Lチカコードを読み解いてみる

先週書いたコードを読み解いてみる。
俺がわからないとことか、Arduino特有の箇所だけ。

以下、先週のコード。

const int LED = 13; //LEDはデジタルPINの13に接続

void setup() {
   pinMode(LED, OUTPUT); //デジタルPINを出力に設定
 } 

void loop() {
   digitalWrite(LED, HIGH);
   delay(1000);
   digitalWrite(LED, LOW);
   delay(1000); 
}

Arduinoではコードのまとまりのことを「スケッチ」と呼ぶらしい。
スケッチには必ずsetup()loop()がある。

setup()はスケッチが動き始めたときに一度だけ動くもの。
loop()はその後に繰り返し実行されるもの。

constはプログラム実行中に変更されない性質を持つ変数。

pinMode()はピンをどう設定すべきかを伝えるもの。

って感じかな。

Robi 第3号

f:id:masamitsu001:20170316125847j:image

はい、デアゴスティーニの「Robi」3号届きました。早速作って見ます。

 

2号まで作ったのがこちら。

f:id:masamitsu001:20170316125948j:image

まだ頭の半分って感じかな。

3号でもうちょっと形にできるのかなー、と思いきや。。。

 

f:id:masamitsu001:20170316130052j:image

なぜか今回は右胸&右腕らしいっす。

先に頭完成させてくれや。。。モヤモヤする。

まあ、それが最後まで買わせる作戦なんでしょうね。こんな中途半端な状態で置いとけないですもんね。

 

さて、作ってみました。

f:id:masamitsu001:20170316130229j:image

腕と胸をネジ2本で止めます。

 

f:id:masamitsu001:20170316130300j:image

次にサーボモータ用のコネクタにシールを貼って保護します。

 

 

 

で、終わり。。。

。。。楽しくない!!!

これだけで2000円は高い!!!

 

f:id:masamitsu001:20170316130218j:image

しかも、今回の分に同封されてたパーツも余ってるし。。。

どうしよう。。。でも中途半端で終わらせたくないしな。。。続けるしかないか。。。

 

と、まんまに戦略にはまる私です。

でもまあいいんです、完成したら楽しいだろうし、子供の身近にロボットいるって、子供の未来のためにも良い影響になるかもしれないし。

 

ってことで、4号はまた日を開けて購入します。

久しぶりに「Aruduinoをはじめよう」を読んでみる

ちゃんとやらないとな、ブログ。

 

ってことで、前に買ったと言っていた本。

 

まだ受け取れてないんす。。。

会社に送ればよかった。

 

ってことで、結構前に「Arduinoをはじめよう」を

買っていたのでそれを参考に電子工作してこうかなと思います。

(もう第3版出てるんだ。。。俺が持ってるのは第2版)

 

いつも勢いで本買うのは良いんだけど、1/3くらいで飽きてしまう自分。

 

今回は最後までやるぞ!!!!!ゆっくりな。。。

 

さっそくはじめよう。

前もって言っておくと、このブログではArduino学びたい人のために

懇切丁寧に説明するつもりもなく、自分が楽しんで作ったものを

ただ垂れ流したいだけなので、ちゃんと学びたい人は本でも買って

自分でやってください。

 

ってことで。

Arduino IDE消しちゃったから再インストール、と。

って思ったらweb版があるじゃん。

せっかくだからこれ使ってみよう。

 

会員登録して、プラグインインストール必要。

f:id:masamitsu001:20170316213522p:plain

 

インストール完了したらメニューにこんなに追加される。

f:id:masamitsu001:20170316213607p:plain

 

よしじゃあ、つないでみようかなー、って思ったらUSBケーブルね~し!!!

昔あんなに持ってたのに。。。あ、見つけた。良かった。

 

壊れて無くて良かった。。。

f:id:masamitsu001:20170316213623j:plain

 

 本にアクチュエータ?って単語出てきたけど、、、なんだ?

アクチュエータ(Actuator)は、入力されたエネルギーを物理的運動に変換するものであり、機械・電気回路を構成する機械要素である。 能動的に作動または駆動するもの。

 

ふーん。

 

センサで受信、それに判断を下すのがマイコン、反応を外に出すのがアクチュエータ、と。ふむふむ。

 

Lチカ

はい、まずはLチカっすね。
 
こいつを光らせてやりますぜ。青色発光ダイオード

f:id:masamitsu001:20170316213648j:plain

 
短い足がK(カソード)、長い足がA(アソード)ですね。
なんか良い覚え方ないかな??
みじカソード。
ながアソード。
とかでいいかな。
うん、覚えやすいと思う。
 
カソードがマイナス側(GND)、アソードはプラス側。
カソードをデジタルのGNDへ接続。
アソードはデジタルの13へ接続。

f:id:masamitsu001:20170316213703j:plain

ケースでちょっと見づらいけど。。。
 
スケッチはこんな感じ。(ってか、アメブロソースあげづれーな。。。やっぱはてなにしよう。。。)
const int LED = 13; //LEDはデジタルPINの13に接続
void setup() {
   pinMode(LED, OUTPUT); //デジタルPINを出力に設定
 } 
void loop() {
   digitalWrite(LED, HIGH);
   delay(1000);
   digitalWrite(LED, LOW);
   delay(1000); 
}
こんな感じになりました。
 
はい、続きはまた明日。

 

ブログ始めてみました

IoTど素人なんだけど、やってみたいなーと思って、でも一人で細々とやっていても寂しいんで、ブログなんかにアップしようと思いました。

 
IoTだけだとネタに困りそうだから、他の趣味のDIYとか、レゴとかについても書いていきます。
 
と言っても、
IoT→7、レゴ→2、DIY→1くらいの割合かな。
 
とりあえずはIoTの勉強頑張ります。
 
この本買いました。
明日からちまちま勉強だ!
 
 
頑張りまーす。