質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • C++

    4785questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Arduino

    733questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

arduinoと温度センサ

受付中

回答 3

投稿

  • 評価
  • クリップ 3
  • VIEW 3,012

very

score 11

arduinoと温度センサ
arduinoで温度センサを自作しようと考えています。
そこで、7セグLED温度センサのPICをarduinoで代用出来ないかと考えました。マイコン→Arduino制御
イメージ説明構成としては、図の自作した7セグ温度センサー(LM35)から電圧値を読み取り、マイコンの代替としたArduino内でA-D変換を行い7セグLEDにデジタル信号を伝え、動作させる、というものです。
温度センサLM35の温度係数1℃=10mV

マイコン → Arduinoへのpin割り当て
マイコン(RA0) → アナログ入力pin(A0)
マイコン(RB0) → Arduinoのデジタル出力pin6
マイコン(RB1) → Arduinoのデジタル出力pin7
マイコン(RB2) → Arduinoのデジタル出力pin8
マイコン(RB3) → Arduinoのデジタル出力pin9
マイコン(RB4) → Arduinoのデジタル出力pin10
マイコン(RB5) → Arduinoのデジタル出力pin11
マイコン(RB6) → Arduinoのデジタル出力pin12
マイコン(RB7) → Arduinoのデジタル出力pin13

マイコン(RA2) → Arduinoのデジタル出力pin1
マイコン(RA3) → Arduinoのデジタル出力pin2
マイコン(RA4) → Arduinoのデジタル出力pin3

上記での割り当てとした7セグメントLED "2" 出力の例
pin6 HIGH
pin7 HIGH
pin8 LOW
pin9 HIGH
pin10 HIGH
pin11 LOW
pin12 HIGH


[質問]
電圧値を読み取り、AD変換を行い、7セグメントLEDに温度に準拠した信号を送り点灯させたいのですが、C++でArduinoにどのようなプラグラムを書き込んだらいいのか分かりません。もしよろしければ、プログラムの構成や、内容などを教えて頂けると嬉しく思います。


  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • UDON3

    2018/06/02 21:58

    Arduinoの種類などお願いします

    キャンセル

回答 3

+1

Arduinoには7セグメントLED用の「SevSeg」というライブラリがあります。

LM35ではないですが、HDC1000というI2C出力のセンサを使って実験したことがありますのでご参考に
HDC1000と7Seg LEDを使って温度湿度を測定

LM35はDATASHEETを見ると温度に比例して電圧値を出力するようですのでArduinoの「analogRead()」でAD変換して読み取れると思います。

PICのRA0となっているところをArduinoのA0~A5のどれかに接続すればいいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

面白そうですね。
Arduinoではなかったですが以前似たものでドットマトリクスLEDの操作に悪戦苦闘したことがあります。

さて、本題ですが温度センサも7セグLEDもArduinoではよく使われるネタです。
以下のページを参考にスケッチを組み合わせることで実現できると思います。
温度センサー(LM61CIZ)の使い方
4桁7セグメントLEDで始めるArduino

また、通常はArduinoのプログラムを書く際にC/C++をそのまま書くことはないのでその辺りの解説を以下のページで見ておくと取っ付き易いかと思います。
Arduino言語 = C/C++言語? Arduinoコードの仕組み

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

プログラムというよりかは回路についてのアドバイスなのですが、トランジスタなんかを使わなくても、IOピンをLOWにすれば0V(GNDにつないだのとと同じような状態)になるため、大きな電流を流さないならなくても問題はないと思います。ほかに理由があるなら別ですが。4桁の7セグメントLEDを動かすプログラムなら今作っているので、参考になるかは分かりませんがどうぞ。

const int com[] = {19, 13, 3, 4, 2};
const int anode[] = {7, 5, 8, 10, 11, 9, 6, 12}; 
int DataSave; // LEDcon4で使う数値計算用
int Data1; // 現在のCdsセルのデータ格納
int Data2; // 過去ののCdsセルのデータ格納
int count; // 今までに回転した回数を記録する
unsigned long Time; // プログラムがスタートしてからの時間を格納する
int TimeD1; //
int TimeD2; //
int mm = 376; // 円周
int RPS; //RPS(一秒間に回転する回数の格納用)

const int number[] = { // LED点灯パターンを2進数で記録
  0b11111100, //0
  0b01100000, //1
  0b11011010, //2
  0b11110010, //3
  0b01100110, //4
  0b10110110, //5
  0b10111110, //6
  0b11100100, //7
  0b11111110, //8
  0b11110110, //9
};


void setup() { //
  for(int i = 0;i <= 13;i++){
    pinMode(i, OUTPUT);
  }
   pinMode(19, OUTPUT);
   for(int i = 14;i <= 17;i++){
    pinMode(i, INPUT);
  }
  for(int i = 0; i <= 5; i++){
    digitalWrite(com[i], HIGH);
  }
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  Data1 = analogRead(4);
  if(Data1 < 700 && Data2 > 700){
    count++;
    Time = millis();
    TimeD2 = TimeD1 - Time;
    TimeD1 = Time;
  }
  RPS = 1000 / TimeD2;
  Serial.println(analogRead(4));
  LEDcon4(abs(RPS % 10000), false, false, false, 2);
/*  LEDcon4(count, false, false, false, 2);*/
  Data2 = Data1;
}

void LEDcon4 (int Input, bool option , bool option1, bool option2, int comen){
  DataSave = Input;
  for (int i = 3; i >= 0; i--){
    digitalWrite(com[i], LOW);
    if(i == 3 - comen){
      LEDcon(DataSave % 10,true);
    }
    else
    {
      LEDcon(DataSave % 10,false);
    }
    delay(1);
    ClearSeg();
    digitalWrite(com[i], HIGH);
    DataSave = DataSave / 10;
  }
  digitalWrite(com[4], LOW);
  if (option == true){
    digitalWrite(anode[0],HIGH);
  }
  if (option1 == true){
    digitalWrite(anode[1],HIGH);
  }
  if (option2 == true){
    digitalWrite(anode[2],HIGH);
  }
  delay(1);
  digitalWrite(anode[0],LOW);
  digitalWrite(anode[1],LOW);
  digitalWrite(anode[2],LOW);
  digitalWrite(com[4], HIGH);
}
void LEDcon (int a,bool come){
    for (int b = 0; b <= 7; b++){
      digitalWrite(anode[7 - b], number[a] & (1 << b) ? HIGH : LOW);
    }
    if (come == true){
    digitalWrite(anode[7],HIGH);
    }
}

void ClearSeg (){
    for (int b = 0; b <= 7; b++){
      digitalWrite(anode[7 - b], LOW);
    }
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C++

    4785questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Arduino

    733questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。