arduinoと温度センサ
受付中
回答 3
投稿
- 評価
- クリップ 3
- VIEW 3,935
arduinoで温度センサを自作しようと考えています。
そこで、7セグLED温度センサのPICをarduinoで代用出来ないかと考えました。マイコン→Arduino制御

温度センサ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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+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で質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
UDON3
2018/06/02 21:58
Arduinoの種類などお願いします