Arduino UNO、温度センサー、LEDで気温を表示する

温度センサーLM35DZを使用する。0〜100度まで測定可能
温度センサーの+Vs端子にArduino5V, Voutをアナログ端子(A0〜A5)、GNDにGNDを接続する

アナログ端子は、HIGH/LOW間の1.0V、1.6V、2.0V、2.5V、3.1V…の細かい電圧を読み取れる
読み取った0~5Vの電圧は、0〜1023の値として取得できる。
35だった場合、
35/1023 = 0.034
0.034 * 5 = 0.17V
1V = 100℃
0.17 * 100 = 17℃

#define TERMINAL_A 3
#define TERMINAL_B 4
#define TERMINAL_C 5
#define TERMINAL_D 6
#define TERMINAL_F 7
#define TERMINAL_G 8
#define TERMINAL_H 9
#define TACT_SW 10  // 10番ピンをタクトスイッチ
#define DIGIT_1 11
#define DIGIT_10 12
#define DIGIT_100 13
#define DIGIT_1000 14
#define DP 15 // ドット
#define THERMO_IN 16  // A2端子のため16を指定

byte counter = 0;  // Arduinoで使用できる1byteの型
byte state = 0;
byte state_old = 0;
byte buf_num = 0;
int thermo_buf[10];

void led_output(byte num){

  switch(num) {
      case 0:  // 4桁7セグメントではアノードコモンを使用しており、7セグメントLEDの逆
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 1:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 2:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 3:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 4:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 5:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 6:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 7:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 8:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 9:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, HIGH);
      break;

      default:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;  
    }      
}



void setup() {
  // 初期化
  pinMode(TERMINAL_A, OUTPUT);
  pinMode(TERMINAL_B, OUTPUT);
  pinMode(TERMINAL_C, OUTPUT);
  pinMode(TERMINAL_D, OUTPUT);
  pinMode(TERMINAL_F, OUTPUT);
  pinMode(TERMINAL_G, OUTPUT);
  pinMode(TERMINAL_H, OUTPUT);
  pinMode(DP, OUTPUT);

  pinMode(DIGIT_1, OUTPUT);
  pinMode(DIGIT_10, OUTPUT);
  pinMode(DIGIT_100, OUTPUT);
  pinMode(DIGIT_1000, OUTPUT);
  
  pinMode(TACT_SW, INPUT); // タクトスイッチに接続した10番ピンをインプットに設定
  pinMode(THERMO_IN, INPUT); // 16番ピンをINPUT指定

  digitalWrite(DIGIT_1, LOW);
  digitalWrite(DIGIT_10, LOW);
  digitalWrite(DIGIT_100, LOW);
  digitalWrite(DIGIT_1000, LOW);

  led_output(counter);
}

void clear_num(void){
  digitalWrite(TERMINAL_A, HIGH);
  digitalWrite(TERMINAL_B, HIGH);
  digitalWrite(TERMINAL_C, HIGH);
  digitalWrite(TERMINAL_D, HIGH);
  digitalWrite(TERMINAL_F, HIGH);
  digitalWrite(TERMINAL_G, HIGH);
  digitalWrite(TERMINAL_H, HIGH);
  digitalWrite(DP, HIGH);
}

int get_temperature(void){

    float thermo_sens;
    int thermo;
    int thermo_ave = 0;
    byte i;

    thermo_sens = analogRead(THERMO_IN); // センサー値取得
    thermo_sens = ((5*thermo_sens)/1024) * 100; // 温度へ変換
    thermo = thermo_sens * 10;

    thermo_buf[buf_num] = thermo;  // 初期値は0
    buf_num++;
    if(buf_num > 9){
      buf_num = 0;
    }

    for(i = 0; i < 10; i++){
      thermo_ave = thermo_ave + thermo_buf&#91;i&#93;;
    }
    thermo_ave = thermo_ave / 10;

    return thermo_ave;
}

void loop() {

  int num;
  int thermo;
  state = digitalRead(TACT_SW);  // 電流が流れているとHIGH, 流れていないとLOW

  if((state == HIGH) && (state_old == LOW)){
      counter++;
  } else {
  }

  if(counter >= 10000){
    counter = 0;
  }

  thermo = get_temperature();
  num = thermo/ 1000;
  clear_num();
  digitalWrite(DIGIT_1000, HIGH);
  delay(1);
  led_output(num);
  delay(5);
  digitalWrite(DIGIT_1000, LOW);

  num = thermo % 1000;
  num = thermo/ 100;
  clear_num();
  digitalWrite(DIGIT_100, HIGH);
  delay(1);
  led_output(num);
  delay(5);
  digitalWrite(DIGIT_100, LOW);

  num = thermo % 100;
  num = num/ 10;
  clear_num();
  digitalWrite(DIGIT_10, HIGH);
  delay(1);
  led_output(num);
  delay(5);
  digitalWrite(DIGIT_10, LOW);

  num = thermo % 10;
  clear_num();
  digitalWrite(DIGIT_1, HIGH);
  delay(1);
  led_output(num);
  delay(5);
  digitalWrite(DIGIT_1, LOW);
  
  state_old = state;

}

配線

あれ、コンパイルして転送したら、突然シリアルポートを読み込まなくなった。
なんだこれ。

一瞬パニクったが、温度センサーの配線が間違っていた模様。表裏をひっくり返して再度実行

mde

出来ました。
Arduinoは中々良い買い物だった。

4桁7セグメントLEDを使う

4桁7セグメントLEDは仕組みとしては、7セグメントLEDと同じ
6、8、9、12番ピンを指定するとそれぞれの桁が表示される
各桁を0.01秒ずつ順番に表示しているが、目視すると同時に表示されているように見える

#define TERMINAL_A 3
#define TERMINAL_B 4
#define TERMINAL_C 5
#define TERMINAL_D 6
#define TERMINAL_F 7
#define TERMINAL_G 8
#define TERMINAL_H 9
#define TACT_SW 10  // 10番ピンをタクトスイッチ
#define DIGIT_1 11
#define DIGIT_10 12
#define DIGIT_100 13
#define DIGIT_1000 14
#define DP 15 // ドット

byte counter = 0;  // Arduinoで使用できる1byteの型
byte state = 0;
byte state_old = 0;

void led_output(byte num){

  switch(num) {
      case 0:  // 4桁7セグメントではアノードコモンを使用しており、7セグメントLEDの逆
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 1:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 2:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 3:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 4:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 5:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 6:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 7:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 8:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 9:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, HIGH);
      break;

      default:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;  
    }      
}



void setup() {
  // 初期化
  pinMode(TERMINAL_A, OUTPUT);
  pinMode(TERMINAL_B, OUTPUT);
  pinMode(TERMINAL_C, OUTPUT);
  pinMode(TERMINAL_D, OUTPUT);
  pinMode(TERMINAL_F, OUTPUT);
  pinMode(TERMINAL_G, OUTPUT);
  pinMode(TERMINAL_H, OUTPUT);
  pinMode(DP, OUTPUT);

  pinMode(DIGIT_1, OUTPUT);
  pinMode(DIGIT_10, OUTPUT);
  pinMode(DIGIT_100, OUTPUT);
  pinMode(DIGIT_1000, OUTPUT);
  
  pinMode(TACT_SW, INPUT); // タクトスイッチに接続した10番ピンをインプットに設定

  digitalWrite(DIGIT_1, LOW);
  digitalWrite(DIGIT_10, LOW);
  digitalWrite(DIGIT_100, LOW);
  digitalWrite(DIGIT_1000, LOW);

  led_output(counter);
}

void clear_num(void){
  digitalWrite(TERMINAL_A, HIGH);
  digitalWrite(TERMINAL_B, HIGH);
  digitalWrite(TERMINAL_C, HIGH);
  digitalWrite(TERMINAL_D, HIGH);
  digitalWrite(TERMINAL_F, HIGH);
  digitalWrite(TERMINAL_G, HIGH);
  digitalWrite(TERMINAL_H, HIGH);
  digitalWrite(DP, HIGH);
}

void loop() {

  int num;
  state = digitalRead(TACT_SW);  // 電流が流れているとHIGH, 流れていないとLOW

  if((state == HIGH) && (state_old == LOW)){
      counter++;
  } else {
  }

  if(counter >= 10000){
    counter = 0;
  }

  num = counter/ 1000;
  clear_num();
  digitalWrite(DIGIT_1000, HIGH);
  delay(1);
  led_output(num);
  delay(5);
  digitalWrite(DIGIT_1000, LOW);

  num = counter % 1000;
  num = counter/ 100;
  clear_num();
  digitalWrite(DIGIT_100, HIGH);
  delay(1);
  led_output(num);
  delay(5);
  digitalWrite(DIGIT_100, LOW);

  num = counter % 100;
  num = counter/ 10;
  clear_num();
  digitalWrite(DIGIT_10, HIGH);
  delay(1);
  led_output(num);
  delay(5);
  digitalWrite(DIGIT_10, LOW);

  num = counter % 10;
  clear_num();
  digitalWrite(DIGIT_1, HIGH);
  delay(1);
  led_output(num);
  delay(5);
  digitalWrite(DIGIT_1, LOW);
  
  state_old = state;

}

配線

実行

dav

あれ、全然意図した動きになってない
配線が違う
4桁7セグメントLEDのピンに合わせて配線を修正します。
また、プログラムのアノードカソードの箇所も修正を加えます。

mde

デジタル時計が何やってるか大体わかった。
なるほどね、ハードウェアとマイコンとプログラムってことか。世界観変わったわ。

Arduino UNOでタクトスイッチのカウンタ

#define TERMINAL_A 3
#define TERMINAL_B 4
#define TERMINAL_C 5
#define TERMINAL_D 6
#define TERMINAL_F 7
#define TERMINAL_G 8
#define TERMINAL_H 9
#define TACT_SW 10  // 10番ピンをタクトスイッチ

byte counter = 0;  // Arduinoで使用できる1byteの型
byte state = 0;
byte state_old = 0;

void led_output(byte num){

  switch(num) {
      case 0:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 1:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 2:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, LOW);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 3:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 4:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, LOW);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 5:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 6:
      digitalWrite(TERMINAL_A, LOW);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 7:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, LOW);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, LOW);
      digitalWrite(TERMINAL_H, LOW);
      break;
      case 8:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;
      case 9:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, HIGH);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, LOW);
      break;

      default:
      digitalWrite(TERMINAL_A, HIGH);
      digitalWrite(TERMINAL_B, HIGH);
      digitalWrite(TERMINAL_C, HIGH);
      digitalWrite(TERMINAL_D, LOW);
      digitalWrite(TERMINAL_F, HIGH);
      digitalWrite(TERMINAL_G, HIGH);
      digitalWrite(TERMINAL_H, HIGH);
      break;  
    }      
}



void setup() {
  // 初期化
  pinMode(TERMINAL_A, OUTPUT);
  pinMode(TERMINAL_B, OUTPUT);
  pinMode(TERMINAL_C, OUTPUT);
  pinMode(TERMINAL_D, OUTPUT);
  pinMode(TERMINAL_F, OUTPUT);
  pinMode(TERMINAL_G, OUTPUT);
  pinMode(TERMINAL_H, OUTPUT);
  pinMode(TACT_SW, INPUT); // タクトスイッチに接続した10番ピンをインプットに設定

  led_output(counter);
}

void loop() {
  state = digitalRead(TACT_SW);  // 電流が流れているとHIGH, 流れていないとLOW

  if((state == HIGH) && (state_old == LOW)){
      counter++;
  } else {
  }

  if(counter >= 10){
    counter = 0;
  }

  led_output(counter);
  state_old = state;

  delay(50);
  
}

配線

実行結果

mde

loopの箇所だが、タクトスイッチから手を離すと、state == LOWとなるので、state_oldもLOWになる。
配線は7セグメントLEDのGRD(-)がブレッドボードで一緒になっているのでややこしく見えるが、タクトスイッチのHIGH LOWは10番ピンで感知している。

Arduinoは触りだけやったら辞めてラズパイに時間使おうと思ってたけど、Arduinoの奥深さが魅力的になってきた。

Arduino UNOで7セグメントLEDを表示させる

7セグメントLEDとは7つに分割されたという意味

dav

カソード(GNDと接続する端子)がコモン(共通)

端子aに5Vを送ると、7セグメントLEDのaが光る
GNDは2箇所あるが、どちらかを繋げば良い
aとfの端子に電流を流すと、a, fが発光し1を表示しているように見える。eはデジマルポインタDP

#define TERMINAL_A 3
#define TERMINAL_B 4
#define TERMINAL_C 5
#define TERMINAL_D 6
#define TERMINAL_F 7
#define TERMINAL_G 8
#define TERMINAL_H 9

void setup() {
  // 初期化
  pinMode(TERMINAL_A, OUTPUT);
  pinMode(TERMINAL_B, OUTPUT);
  pinMode(TERMINAL_C, OUTPUT);
  pinMode(TERMINAL_D, OUTPUT);
  pinMode(TERMINAL_F, OUTPUT);
  pinMode(TERMINAL_G, OUTPUT);
  pinMode(TERMINAL_H, OUTPUT); 
}

void loop() {
  digitalWrite(TERMINAL_A, HIGH);
  digitalWrite(TERMINAL_B, HIGH);
  digitalWrite(TERMINAL_C, LOW);
  digitalWrite(TERMINAL_D, HIGH);
  digitalWrite(TERMINAL_F, LOW);
  digitalWrite(TERMINAL_G, HIGH);
  digitalWrite(TERMINAL_H, HIGH);
}
dav

やべーな、これ
でも面白い

タクトスイッチでArduino UNOのLEDを制御する

#define LED_PIN 13
#define BUTTON 2

void setup() {
  // 初期化
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON, INPUT);

}

void loop() {
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
}
dav

あれ? digitalRead(BUTTON) == LOWのはずなのに、HIGHで出力される
何故だ?

あ、配線が間違っていました。
うわ、これ電流や回路、ハードウェアの知識、かなり求められんじゃん。やべーな。。

Arduino UNOでLチカをやってみる

13番ポートを定義する。digitalWriteのHIGHは点灯、LOWは消滅

#define LED_PIN 13

void setup() {
  // 初期化
  pinMode(LED_PIN, OUTPUT);

}

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

}

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
avrdude: stk500_recv(): programmer is not responding

あれ、何故だ?
あ、シリアルポートがBlueTooth-Incoming-Portになっていたので、ツールから、USB Serialに変更します。

最大32256バイトのフラッシュメモリのうち、スケッチが924バイト(2%)を使っています。
最大2048バイトのRAMのうち、グローバル変数が9バイト(0%)を使っていて、ローカル変数で2039バイト使うことができます。

上手くいきました。
L地下は、プログラミングでいうHello Worldのようなものらしいです。

これがIoT開発かああああああああああああああ
なんかよくわからんぞ、これ

Arduino UNOの基盤

基盤上のボタン:リセットボタン
USBケーブル:PCに繋げる、電源を取ることもできる、プログラムの転送も行う
ACアダプター電源

ピン
Power: Arduino自体を電源と考えた場合に、”5V”がプラス, “GND(ground)”がマイナス(0V)
Analog: アナログセンサーのピンを0〜5に差し込む
Digital PWM: 0〜13がデジタル入出力

LEDランプ
電源に繋げると、”ON”と”L”が点灯する

dav

すげー、これだけでもArduino UNO買って良かった。感動。

ブレッドボード
両端の+,-は横に繋がっている
真ん中のA〜E、F〜Jは縦に繋がっている EとFは繋がっていない

LED
長い針がアノード: プラス
短い針がカソード: マイナス

抵抗
カラーコード: 茶1、黒0、赤10^2、金+-5%
-> 1kΩ誤差5%

タクトスイッチ

dav

ああああ、ArduinoのLED、購入したのに捨ててしまった。捨てなきゃ良かった。。。

Arduinoのセットアップ

Arduinoとは?
– 電子工作のあらゆる問題を解決する
– イタリアで開発された教育用のシングルボードコンピューター
– アクチュエータ、センサーを簡単に扱える

macにArduino IDEをダウンロードします
https://www.arduino.cc/en/Main/Software

IDEを起動します

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

ツール -> ボード がArduino Unoになっている事を確認
前準備はこれでOK

### ハードウェア
– Arduino Uno 基盤
– 電線(ジャンパーワイヤ)20本
– ブレッドボード(ジャンパーワイヤを差し込んで配線する)
– USBケーブル
– LM35DZ 温度センサIC
– 7セグメントLED
– タクトスイッチ
– 1.0kΩ抵抗

マイコンは ATMEL AVR MEGA シリーズ、C言語ベース
Arduinoができる事

ピンの電圧を 5V (電源電圧)か0Vにする(デジタル出力, 10-20mAぐらいまで出力できる)
ピンの電圧を 5V/0V に高速に切り替える(アナログ出力, 10-20mAぐらいまで出力できる)
ピンに加えられた電圧が約2.5V以上なら 1, そうでなければ 0 と判断する (デジタル入力)
ピンに加えられた電圧を測って 0 から 1023 の数値で表す(アナログ入力, 電圧計として使える)
時間を測ったり、数を数えたり、計算をしたりできる(プログラム)

Raspberry PiのOS機能

Raspberry PiはLXDEというデスクトップ環境を使っている。
CPU使用率がメニューバーに表示され、常時確認できる。
ブラウザは軽量なEpiphanyがインストールされている。リソース消費が低い。
Epiphanyの検索エンジンはDuckDuckGoがデフォルト
私はYoutuberでもあるので試しにYouTubeを開いてみたが、ラズパイだと流石にレンダリングが遅い。
画面キャプチャはScrotを使用する

外部ドライブ接続で簡単にファイル共有も可能
テキストエディはLeafpad
アクセサリに電卓などのアプリが入っている
パッケージインストールはapt-getを使う。ubuntuと一緒か。

$ dpkg -l | grep eject
ii lxplug-ejecter 0.3 armhf Ejecter plugin for lxpanel
$ apt-cache -n search eject
eject – ejects CDs and operates CD-Changers under Linux
node-loud-rejection – make unhandled promise rejections fail loudly
lxplug-ejecter – Ejecter plugin for lxpanel
lxplug-ejecter-dbgsym – Debug symbols for lxplug-ejecter

対応アーキテクチャにarmhf(ARM)が含まれていないと、Raspbianではインストールできない。

さて、一通りカバーしたので、電子工作入門に入りたい。
ラズパイの前にArduinoを触っておくか。
しかし、ラズパイ、準備が大変な割には、始めて見ると非常にあっけない。

Raspberry Piでヤフーを表示する

wifi接続を設定後、キーボードを日本語設定

model B+ だと、wifi接続できるから、wireless usb adapter は全く必要なかった。
私は使わなければすぐ断捨離する人間なのですが、usb adapter 、一度も使わずに捨てるのはさすがにもったいないか。

ちなみに、こちらがヤフーに接続した状態です。

sdr

コマンドラインはLinux なので、操作は特に違和感はありません。
ちなみにこの投稿もラズパイから書いています。
ただ、使っているディスプレイが小さいので、非常にやりづらい

とりあえず、最初は教科書に沿って勉強していきます。