『ボヘミアン・ラプソディ』はなぜ人々を魅了したのか >>

Arduinoでプログラミングをしています。いろいろなプログラミングをしてきたのですが割り込み処理をした時だけエンジンの点火ノイズが乗ります。入力線にシールド線を使用したりアルミ箔で包んでみたりもしたのですが一向に効果がありません。ノイズがノイズだけにタコメーターのプログラムではセンサーをつながなくても作動するのですが他のプログラムでは障害となっております。どなたか知恵を貸してください。

質問者からの補足コメント

  • うーん・・・

    arduino の近くで点火回路を作動させるとその点火数と同じ信号が入ります。同じ入力を割り込みではなくdigitalreadで読み込むと全くノイズが乗りません。これは割り込み特有の作用かと思います。そこで質問したのです。回路とかプログラム以前の問題かとかと思い質問したのです。
    割り込みという特殊な入力に固有の問題化と。

      補足日時:2019/02/06 10:21
  • へこむわー

    あのですね、イグニッションノイズは連続して出ているのです、ちなみにテストでは一分間に630回の点火信号を出しているのです。その630回をすべて拾っているんです。割り込みの入力はarduinoでは二つの入力ピンだけ許されていますよね、ですから私は「割り込み」とは特別な入力方法なのかと思い質問したのです。タイミングライトはその信号を拾って光るのですが、簡単な構造で拾っています。ある方がイグニッションノイズはマルコーニの無線と同じ構造だからセンサーがなくてもデバイスそのものだけでも反応するときが有るとおっしゃっておりました。信号はパソコンのモニターで確認しているのですがきっちり630rpmと出ています。タコメーターなら正確でいいのですが、私は別なものを作成したいのです。

      補足日時:2019/02/06 13:40
  • うーん・・・

    私もうまく言えないのですが、割り込みでプログラムを書くとセンサーコードを繋げなくてもarduinoは反応してしまいます。それもきれいにイグニッションと同期して。試しに反応が遅いけれどもdigitalreadによるプログラムだと同じ入力ピンでも反応しないのです、センサーを繋げない限り。プラグコードの上にのっけても反応しません。しかし、割り込みでないと正確な信号が得られないので困っているのです。割り込みの時はセンサーを繋げなくても、入力ピンに針金を入れただけでもそれがアンテナになってきれいな信号が入ってしまいます。ちなみに、エンジンをかけると近所迷惑なのでフライスにフルトラ点火の装置を作成してテストしています。フライスにはデジタル回転計をつけているので正確な点火数がわかるのです。実際のエンジンだとポイント点火なのできたないノイズになります。

    No.3の回答に寄せられた補足コメントです。 補足日時:2019/02/06 16:13

A 回答 (5件)

■in_Port_Low(↓)で割り込みだったら


Pull_Up抵抗を外付けして入力インピを下げてみたら…1KΩではどうかな?
    • good
    • 0
この回答へのお礼

とりあえず1.5kΩが手持ちにあったのでそれを入力ピンに繋いでかなり収まりました。後はアルミケースを購入して入れてみます。ホールセンサーがlowの信号なので
10kΩでプルアップしました。マイコン初心者なので助かりました、ありがとうございました。

お礼日時:2019/02/07 21:43

問題を取り違えていなかったようで安心しました。



やはり入力ピンのインピーダンスが高くてノイズによりピンの電圧が暴れているようですね。
デジタルリードはその命令を実行した瞬間だけしか読み込みませんが、割り込み検知は常に信号の変化を監視しています。
この違いで捕まえきれなかったのでしょう。
ソフトによるバウンス除去なんかしていたらそれでフィルタされて絶対に捕まえられません。

ピンにプルアップ(プルダウン)抵抗やバイパスコンデンサなどでノイズに対するインピーダンスを下げるのが基本でしょう。
イグニッションノイズ相手ならフォトカプラくらい使うのは商用では当たり前です。
電源ラインが揺れていることも考えられます。
これ以上の具体策は回路図やセンサーの情報が無いと何とも・・・
    • good
    • 0
この回答へのお礼

とりあえず1.5kΩが手持ちにあったのでそれを入力ピンに繋いでかなり収まりました。後はアルミケースを購入して入れてみます。ホールセンサーがlowの信号なので
10kΩでプルアップしました。マイコン初心者なので助かりました、ありがとうございました。

お礼日時:2019/02/07 21:44

「割り込み入力ピンをデジタルリードしてもノイズ信号らしきものは見られなかったので、入力ピンにノイズは入ってきていないと思う。

しかしイグニッションノイズによって、意図せず割り込みは発生してしまう。」

こう言いたかったと思ったのですが、私が読み間違えているのでしょうか?

割り込みピンに割り込み条件となるレベルの電圧なり電圧変化なりが発生すると割り込みが実行されます。意図せず割り込みが発生するならピンにノイズによる電圧が発生しているのです。
「ノイズによって入力ピンに割り込みトリガとなる電圧は発生していない」とどのように確信したのでしょうか?
「デジタルリードしたけど出てこなかった」に対してそれは「出てこなかった」ではなく「見つけられなかった」の間違いではないかと申し上げたかったのですが。
この回答への補足あり
    • good
    • 0

割り込みだろうがdigitalreadだろうが入力ピンの状態を機械として言われたままに読み込みます。


これも予測ですが、digitalreadでノイズが乗らないんじゃなく、乗ったタイミングで読めていないだけ、つまり検証方法でもミスっているのではないかと思えます。
本当にノイズが入力ピンに乗っているのならハード的な問題です。
digitalreadで乗らないと言い切るならそれを検証したコードくらい提示できるはずですよね。
イグニッションノイズなんてほんの一瞬なんですからそうそう捕まえられるものじゃないですよ。
    • good
    • 0

回路もプログラムも無いんじゃ、まず本当にノイズによる誤動作なのかそれすら信用できません。


心から助言を求めるなら、今はできる限りの情報をどうやって示せばいいかに注力すべきかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QC言語(arduino)での条件分岐について教えてください。

arduinoのスケッチ(C言語)について教えてください。



************************************************

int pin = 0; //変数pinに0を代入(初期化)


void setup() {

Serial.begin(9600) ;
}



void loop() {

int val;
hantei:
val = analogRead(pin) ; //A0ピンから値を読み込み変数valに代入 

Serial.println(val) ; //読み込まれた値をモニターへ表示

if(val < 150){ //まず最初にvalの値をチェック。150より小さければ下の行へ、150以上ならばこのif文を抜けて goto hantei;の次の行へ 
goto hantei;
}

hantei2:
val = analogRead(pin) ;
Serial.println(val) ;
hantei2:
if(val >= 150){ //次に再びvalの値をチェック。150以上ならば下の行へ、150より小さければこのif文を抜けて goto hantei2;の次の行へ
goto hantei2;
}

hantei3:
val = analogRead(pin) ;
Serial.println(val) ;

if(val < 150){ //まず最初にvalの値をチェック。150より小さければ下の行へ、150以上ならばこのif文を抜けて goto hantei3;の次の行へ 
goto hantei3;
}
}

******************************************



これは今回作ったスケッチ中の条件分岐の部分を抜粋したものです。



動作としては
if文を使用し、

・最初のif文でピンの値を読み取る。
・それが150未満ならその間は読み取りを繰り返す。
・繰り返していて値が150以上になったら最初のif文を抜けて2番目のif文へ進む。
・2番目のif文でもう一度値を読み取る。
・次は値が150以上ならその間読み取りを繰り返す。
・繰り返していて値が150未満になったらい2番目のif文を抜けて3番目のif文へ進む。
・3番目のif文でも値を読み取る。
・今度は値が150未満ならその間は読み込みを繰り返す。
・繰り返していて値が150以上になったら3番目のif文を抜けて次へ(ここでは書いてない)進む。

if文の条件を満たしていない間はピンの値の読み取りを繰り返すようにするためgotoを使い、hantei(hantei2,hantei3)というラベルへ飛ぶという動きをさせています。
if文での値の判定を3つクリアしたらこの先のプログラムへ実行が移ります。
(回路での動作としては、CDSセルで明るさを監視しており、一度明るくなって、そのあと暗くなったらその次のプログラムを実行(サーボモーターを動かす)するというものです)

このスケッチ自体は正常にコンパイルできて、arduino uno+ブレッドボードでの基盤でも正常に希望通りの動作をしてくれました。
シリアルモニターでも値の変化と回路の動作が正常に行われているのを確認できました。
なのでこのままでも全く問題はないんです。

ただ、C言語の勉強をしていると、goto文の説明には必ず「goto文は使い方によっては便利だが流れが分かりづらくなるのであまり好んで使用されることは無い」とあります。
私は以前、アセンブリ言語によるPICマイコンのプログラミングをほんの少しかじっていて、そこではgoto命令で特定のラベルへ飛ぶという動作はごく普通に使用していたので違和感なく今回も使用したのですが、
どうせならgotoを使用しないスケッチの書き方を知っておきたいと思いました。
ただ、私の頭ではどうしてもgotoを使用せずに上記のスケッチと同じ動作の物を書くことができませんでした。
どうすればgoto無しで解決できますか?
何パターンかあれば教えて頂けると助かります。

arduinoのスケッチ(C言語)について教えてください。



************************************************

int pin = 0; //変数pinに0を代入(初期化)


void setup() {

Serial.begin(9600) ;
}



void loop() {

int val;
hantei:
val = analogRead(pin) ; //A0ピンから値を読み込み変数valに代入 

Serial.println(val) ; //読み込まれた値をモニターへ表示

if(val < 150){ //まず最初にvalの値をチェック。150より小さければ下の行へ、150以上...続きを読む

Aベストアンサー

void loop(){
int val;

do{
val = analogRead(pin);
Serial.println(val);
}while(val >= 150);

do{
val = analogRead(pin);
Serial.println(val);
}while(val < 150);

do{
val = analogRead(pin);
Serial.println(val);
}while(val >= 150);
}

Q5進法で表された少数を10進法で表す問題です。このように整数部分に二桁の数が出てくる場合どうすれば良

5進法で表された少数を10進法で表す問題です。このように整数部分に二桁の数が出てくる場合どうすれば良いのでしょうか

Aベストアンサー

5進法で計算してたとえば整数部分が(11)₅と出たらこれは
1×5¹+1×5⁰の意味やから、そのまま普通に10進で計算して
1×5¹+1×5⁰=6 が10進表示になるよ。

Qjavaが文字コードの影響でコンパイルが通りません。

java jdk-12 , windows10 , Tera Pad でコンパイルしようとしていますが、

 1つ目、

  エラー: この文字(0xEF)は、エンコーディングwindows-31jにマップできません

のエラーが出てコンパイルが通りません。 

ネットで調べて -encoding UTF-8 を追加してコンパイルしたら通ったのですが、次に

 2つ目、

  エラー: '\ufeff'は不正な文字です

というエラーが出ます。

UTF-8のBOMが原因のようですが、ネットで調べた方法をいくつか試してみても

コンパイルが通りません。

どのようにしたらよいでしょうか?


試した方法: UTF-8N にする , 一度Shift-Jisに変換してみる
$ nkf --overwrite --oc=UTF-8 ($は内部コマンドまたは...認識されませんと出ます)
ネット上のBOMをスキップする方法というソース

java jdk-12 , windows10 , Tera Pad でコンパイルしようとしていますが、

 1つ目、

  エラー: この文字(0xEF)は、エンコーディングwindows-31jにマップできません

のエラーが出てコンパイルが通りません。 

ネットで調べて -encoding UTF-8 を追加してコンパイルしたら通ったのですが、次に

 2つ目、

  エラー: '\ufeff'は不正な文字です

というエラーが出ます。

UTF-8のBOMが原因のようですが、ネットで調べた方法をいくつか試してみても

コンパイルが通りません。

ど...続きを読む

Aベストアンサー

>エラー: この文字(0xEF)は、エンコーディングwindows-31jにマップできません

日本語環境のWindowsで、普通に起動したコマンドプロンプトはShiftJISなんじゃないですかね?
https://qiita.com/user0/items/a9116acc7bd7b70ecfb0

TeraPadで保存時の文字コードをShiftJISにしたらどうなるでしょう?

とは言え…JavaならUTF-8とかでしょうかねぇ。
先程掲示したURLの方法でコードページをUTF-8にしてみてはどうでしょうか。

>$ nkf --overwrite --oc=UTF-8 ($は内部コマンドまたは...認識されませんと出ます)

Windowsには標準でnkfは入っていないと思いますけど、そこのところどうなんです?
vectorとかからDLして入れたんですか?
そして…コマンド入力時にプロンプトは入力しませんよ?
# Linuxとかのシェルのプロンプトだと思いますが…。

Qプログラミング xamppについて

現在勉強中ですが
xamppでlampの環境を作ることは可能でしょうか?

Aベストアンサー

linuxにインストールすれば可能。

Qアルディーノウノについて。 こちらのサイトのものを作ろうと思うのですが http://zzzaaaw

アルディーノウノについて。

こちらのサイトのものを作ろうと思うのですが
http://zzzaaawwwaaa.livedoor.blog/archives/8114116.html
使うアルディーノが、少し違うのです。これでも出来ますか?
https://www.amazon.co.jp/EasyWordMall-UNO-R3開発ボード-USBケーブル付属-Arduinoと互換/dp/B018VYJIEU/ref=mp_s_a_1_3?__mk_ja_JP=カタカナ&qid=1536313292&sr=8-3&pi=AC_SX236_SY340_QL65&keywords=アルディーノ+uno&dpPl=1&dpID=51FsE-v2FbL&ref=plSrch

Aベストアンサー

>学生なもんで極力安くしたいんです。

なるほど。貴方の技術力ならば大丈夫でしょう。
表面実装なんて楽勝な自信が溢れていますし。
ハンダゴテ、半田吸い取り器、ハンダ吸い取り線はすでに持っていて、表面実装の互換品を使う選択肢以外はありえないです。
500円程度で済みますからね。
熱破壊しない程度の早業で取り外せるでしょう。
ピッチ変換基板なんて軟派なものを使用しなくても、その技術力で更に小型化が可能です。

Q電化製品の電磁波について

電磁波が健康に悪影響を与えるとのことで、簡易電磁波計を購入し、室内の電磁波を測定しました。パソコン(本体、モニター)、電気スタンド、扇風機等各種の電気製品からの電磁波を確認することができました。
 ところが、これらの電気製品のコンセントを外しても、電磁波が弱くなるものはありますが、結構な数値の電磁波を計測できます。
 この電磁波は何によって放出されているのでしょうか。
 電磁誘導は、電流が流れて発生すると理解していましたが、コンセントを外してまでも電磁波が発生する理由がわかりません。

 ご存知の方、ご教示いただけないでしょうか。

Aベストアンサー

パソコンや扇風機のコードを抜いても、冷蔵庫とか天井照明などで使う電流が壁の中や天井裏に流れていると思いますので、そこで発生しているのでしょう。
また、携帯、スマホ、ラジオ等が室内で使えるわけですから、電磁波は室内に溢れているといえます。
また、超高圧の電圧で発生する雷なんてのがありますね。
上空がすごい高圧で、地面がゼロボルトとすると、その空間の途中も高度差に対応して、電圧が発生していることになります。

室内でオシロスコープのレンジを高感度設定にして、測定端子に触ると、私たちの指先に交流電圧が誘導発生しているのを画面で見ることもできます。

Qlinux(CentOS 7) の mail コマンドについて

linuxのmailコマンドで次のように書いてあるのですが、後半部分の意味がわかりません。
mail -s "Subject Desu." $mailto -- -faaa@ccc.co.jp
<注>$mailto変数の中身は、このコマンドに辿りつくまでに、設定済みです。

具体的には、 -- -faaa@ccc.co.jp の部分の意味がわからないです。
aaa@ccc.co.jpは意味のあるメルアドなんですが、
-- -f は、どういった意味なんでしょうか?

すみませんが、知ってる方、教えて下さい。お願いします。

Aベストアンサー

https://gist.github.com/koudaiii/ca61cfa22bb840a19f0f

Fromの指定…だそうです。

QCPUの温度を出力するプログラムまたは関数

現在CPUの温度を出力するプログラムをC言語で作りたいと思っています。
CPUの部位はどこでも大丈夫です。

しかしどういった関数を使えばいいのか、
どのようなソースコードを作ればいいのかわかりません。

プログラミングに詳しい方お教え頂けないでしょうか?

Aベストアンサー

> ある程度精度の高いものだとより嬉しいです。

精度はマザボ側からなんて言ってくるかに依存するので、それはいくらソフトで頑張っても無駄です。精度を求めるならば、arduinoなどのマイコンに温度センサをつなげて値を拾ってくる方がはるかに確実かつ高精度に取れるし、PCに依存しないので良いでしょう。また単にソフトだけで済ませるよりは、マイコンで作ったものの方がレポートとしてそれっぽくなるはず。

Qphp プログラムについて

<?php
if((!isset($COOKIE["order"])) || ($_COOKIE["order"]) == ""){

echo "商品が選択されていません"
}
.
.
.
.

?>

order をユーザーが入力した値を取得しております


(!isset($COOKIE["order"]) はorder に値がセットされていない場合だと思いますが
||  の = "" とは 何を表しているのでしょうか?

教えていただけるた助かります

Aベストアンサー

違います。

!isset($COOKIE["order"])
は、$COOKIE変数内に、orderという連想添字の変数が存在しないことを示します。

よって質問の比較式は日本語で表すと、
orderというクッキーが存在しない、またはorderというクッキー値が空である
となります。

初めてアクセスした時は、orderというクッキーがそもそも存在しない。
二回目以降にアクセスした時は、orderというクッキーが存在するが、値が空の場合がある。

などという2パターンへの対処ではないでしょうか。

QPHP~のメールの送信でエラーになり送信できません!?

どうもすみません!
以下のサイトからの質問となります。
http://afurieitohannei.la.coocan.jp/mail.htm
よろしくお願いいたします。

Aベストアンサー

> From:"ヘッダーがありません

このメッセージのとおりです。
何でも良いので受信したメールのヘッダーを表示させてみて下さい。
 From: xxxxxx
の様にメールの送信者の情報があるはずです、その情報がないので不備だとしてエラーになっているのです。


mb_send_mail - PHPマニュアル
http://php.net/manual/ja/function.mb-send-mail.php
-----引用開始
bool mb_send_mail ( string $to , string $subject , string $message [, mixed $additional_headers = NULL [, string $additional_parameter = NULL ]] )

中略

additional_headers(オプション)
メールヘッダの最後に挿入される String または array
通常、これは追加のヘッダ(From、Cc、Bcc)のために用いられます。

注意:
メールを送信する際には、必ず From ヘッダが含まれていなければなりません。 additional_headers パラメータで指定するか、 あるいは php.ini にデフォルト値を指定します。
----引用終了

上記の様にphp.iniで設定おくか、$additional_headers でmb_send_mail の引数として与える必要があります。


# 前も指摘したと思うのですが、何故ドキュメントを参照しないのですか?

> From:"ヘッダーがありません

このメッセージのとおりです。
何でも良いので受信したメールのヘッダーを表示させてみて下さい。
 From: xxxxxx
の様にメールの送信者の情報があるはずです、その情報がないので不備だとしてエラーになっているのです。


mb_send_mail - PHPマニュアル
http://php.net/manual/ja/function.mb-send-mail.php
-----引用開始
bool mb_send_mail ( string $to , string $subject , string $message [, mixed $additional_headers = NULL [, string $additional_parameter = NULL ]]...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング