Arduino初心者熱烈大歓迎質問スレ part22
■ このスレッドは過去ログ倉庫に格納されています
>>150
arduino ide用だから
コンデンサつけると書き込みエラーになると思う
atmelのプログラマー使うのであればあってもよい
秋月のボードにはそれを切り離す端子がある i2c のプルアップ、電源だけ切り離せるようになってるだが・・ delayとか要らなくてもタイマー0の溢れ割り込みは使えないんですか?
定義するとエラーになります。millisとか纏めて使用不能になってもいいので使う方法ありますか?
比較A割り込みと比較B割り込みはPWMに使っているので使えません >>157
AVRとしては可能だけど、ライブラリがないんじゃないかな
エラーになるって、具体的にどういうふうに書いてるの? >>157
ここにスケッチ貼ってリンク張って
http://codepad.org/
あとArduinoの型番と開発環境も http://codepad.org/02kwmeNA
これでいいんでしょうか?ボードはUnoでIDEのバージョンは1.6.11です
スケッチが悪いのかと思って最少構成にしてみたのですが以下のエラーがでます
比較A割り込みを使えばちゃんとうごきます
wiring.c.o (symbol from plugin): In function __vector_16':
(.text+0x0): multiple definition of__vector_16'
E:\Users\Master\AppData\Local\Temp\builda7b0dfd25be122d472f8da494ec6c0a5.tmp\sketch\Blink.ino.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
ボードArduino/Genuino Unoに対するコンパイル時にエラーが発生しました。 >>160
タイマー2はライブラリがあって速度が変えられるので別なことに使いたいです
タイマー1はサーボを使うと確か使っちゃいけないんですよね? hardware/arduino/avr/cores/arduino/wiring.c
の中でシステムの
ISR(TIM0_OVF_vect)
が既に有って二重定義に成る訳で
これを変更したとしてどうやって実際のビルドに反映させるのか知らないので
別の方宜しく TimerOneライブラリの、attachInterrupt() のようにすればいいんじゃ?
ソースの場所が分からんけど ^^; あ、164はダメだな orz. TimerOne.cppの中で
ISR(TIMER1_OVF_vect){ Timer1.isrCallback();}って定義して
isrCallbackを後からattachInterrupt()で書き換えるってやり方だけど
ISR(TIMER0_OVF_vect) のほうは、すでに定義されてるから同じやり方できない、ってことだものな
安易に問題回避するなら hardware/arduino/avr/cores/arduino/wiring.c を書き換える? 自分で定義を書いてもdelayとかの定義が上書きされるわけじゃなくてただエラーになるだけみたいなので
IDEのなかのファイルを書き換えるのは怖いし、ぜったい戻し忘れて他のスケッチがおかしくなりそうです
今回のプログラムではD6ピンのPWMは25〜230までしか指定しないから常にPWM信号がでていたので
D2ピンに繋げていた部品をA3ピンに移してA3ピンをD17ピンとして使って、D2ピンを空けてあげて
INPUTにしたD2ピンにD6のPWM信号ををつなげて外部割込み【RISINGを指定】の所にやりたかった内容を書いたら
タイマー0が0になるたびD6がHIGHになって外部割込みがちゃんと起動したので
結果的にTIMER0_OVF_vectと同じ挙動になりました ありがとうございました >>166
今回の話とは関係ないけれど
前々スレ http://rio2016.5ch.net/test/read.cgi/denki/1514503488/ の55前後の話を
読んどくといいよ
アップされてたコードには、同じような(ありがちな)ミスがあったようだから あと、ちゃんと理解できてないんだけど、166のは比較A割り込みを使うのと
どう違うの?(動けばいいわけだから、別に非難してるとかじゃないです) >>168
Arduinoの高速PWMはカウンタが0になるとHIGH、カウンタがOCR0nと一致でLOWが出るようになってるわけ。
その仕組みで>>166のように25〜230をOCR0nに設定するならだいたい10%〜90%のduty比の信号が出力される。
比較割り込みはOCR0nと一致時に割り込むわけだから、ループ中にPWMのduty比が変更されるとそこだけ割込み周期がおかしくなる。
たとえばさっき230までに設定されてて次に25が設定されたとすると、(高速PWMモードのOCR0nは二重緩衝されるのでBOTTOM(=カウンタ0)で更新される)
230になるとそこで割込みが発生、255の次で0に戻った時に25に更新され、次の割り込みは25で起きるからこの時だけ51タイマカウントしか間が空かない。
逆に、25だったのが230に更新されると、25(割込み)→255→0→230(割込み)になるから461タイマカウント経過しないと割込みが発生しないことになる。
1行目の通りPWMのポジティブエッジは必ずカウンタが0に戻った所にあるから、それをキャプチャすればかならず256タイマカウントで割込みが起きる。
それなら、溢れ割込みと同じタイミングと言えるし、かつPWMのduty比を変更したところで周期のブレを受けない。(PWMを止めたら割り込み発生しなくなるが)
なのでPWMを使ってるのに比較割り込みを使うと「動けばいい」にすら到達しない。ちゃんと動かない。
コレを見ろ。
https://i.imgur.com/toavH7e.png
スケッチ。
https://paste.ofcode.org/qkeJ969pTV9vDap8VbHGzF# 悪い、右のアノテーションの3段目(一番下)のラベルは OCR0B = 25 の間違い。1つ上からコピーして変え忘れた。 ロジアナでぐぐれ。オシロとはちと違う。
オシロがアナログ信号向けとしたらロジアナはデジタル信号向け。
(アナログ測れるチャンネルもあるけど) 知りたかったのは、なんというロジアナか、なのかな。そう聞けばいいのに。
https://www.saleae.com/downloads/ pin数の少ないATtinyで一つのpinに複数の機能が割当てられてる時
対象pinの使いたい機能はどのように選択するのでしょうか それもうAVRの質問では?
別にmega328Pだって1つのピンにいろんな機能があるぞ。それと同じ。 >>174
それいいな。
中華400円ロジアナで使えたわ。 >>178
Saleaeは海賊版で使うなと怒ってるからなぁ
中華クローンのVIDとPIDがSaleaeのやつ勝手に使ってんだよね…
アップデートでアクティベーション式にするというアナウンスも前にあったが…
sigrokからpulseView落としてそっちにしときな >>181
もちろん、もう前からずっとpulseViewを使ってますよ。 arduinoに指定した回数のパルスを発生させる関数て無かったっけ?
あれでも>>169の様な問題出るのかなとぐぐってみたら関数自体が全然見当たらなかった
何かのライブラリだったのかな そりゃすまん悪気はないんだ
pulseViewも使いやすいしな
ID盗用してるせいで挿すとSaleae Logicて認識されるけどw
激安シリーズでアナログ1chも追加でついてるやつもあったんけど今は出てないのかな >>183
パルスとはちょっと違うがshiftOutのこと?
あれってどのピンても使えるしソフトウェア実装では >>185
方向+ステップ数のステッピングモータードライバでステップ数をPWMで
済ませてる様なのを見た記憶があったんだけど、多分ソフト実装だったんだね ああ俺が言いたかったソフトウェア実装ってマイコンのタイマーとかSPI用シフトレジスタとかそういう機能を使ってるわけじゃないってこと
標準のI/Oだけで実現してるものをソフトウェアなんとかって言う
たとえばUnoのSerialはハードウェア実装でマイコンのUSART部がやってくれるから通信中はCPUはあるはそこそこほかのことやれる(代わりにピンは決まってる)
ライブラリSoftSerialは全部ソフトウェアでやってるのでどのピンにも出来るが全部CPUが頑張って通信してるのでほかの事があんまりやれない 400円でロジアナ買えるの?早速調べてこなくちゃ・・・・・ >>188
400円じゃ無理かな。
つい最近買ったのは送料込み459円だったけど。 >>189
マジレスする。
例えばこれはI2Cの通信を見て、送ってるコードをチェックしてみたところ。
https://i.imgur.com/svfhvSP.jpg
>>174のリンク先のソフトと中華ロジアナを使ってる。
459円のじゃなくて1000円くらいのだけどね。
ちゃんとデータが送られてるか、いろんなプロトコルを解析してくれるよ。 俺みたいなアマチュア初心者には普通に繋げばちゃんと動くじゃんって思うから分からんがプロだと波形をみたいことがあるんだね。 波形って言うとちょっと語弊があるけど…。
まあ、Arduinoやってる分にはあまり必要無いかなあ。
Bit-BangでI2Cを実装するとかなら、どうかいなと見てみないと効率悪い。 語弊があるのは俺にでもわかる
伝わればいい
bitbangが云々
やっぱりコアな人にしか必要にならないぽいね、デジアナ >>194
ほう、どういう語弊があるの?
分かるなら説明してみ。 波形っていうと電圧の生波形を連想するんだろ?
しきい値で0と1にデコード?してるからもはや波形とは言えない?的な。 >>192
実際そうだと思うよ、必要になったら買うのだ
例えばさ、慣れてきてどんどん処理を追加していくと
あれ?プログラムはちゃんと書いたしピンの繋ぎもあってるのに通信がうまくいってないぞ?なんで!ってなるときがいつか来るのよ
上で出てる割り込みのせいかもしれないし、何か追加した処理に使ったライブラリが悪さをしてるのかもしれないし
他の回路に引いた電流で電圧がドロップして回路がおかしくなってるかもしれないし・・・etc
だけどそれってスケッチだけでデバッグするにはめちゃくちゃ大変なのよ、そりゃ頑張れば出来なくはないけれど
どこで、どうして、通信が上手く行かないのか分かると原因究明や対策がしやすいでしょ?
そこでロジアナで実際にどういう信号が出てて、想定したものとどう違うのか見れたら嬉しいだろ?
「電池に豆電球を繋いだのに光らない、部品の公称電圧と接続はあってるのに」
これくらいなら「豆電球が切れてる・電池がない・リード線が断線してる」くらいだから総当たりで部品取り換えたら原因究明できるけど
テスターがあれば、まずどこが悪いのか調べられるじゃん?
それの派生みたいなもんよ
上の豆電球みたいに試していくのがめちゃ大変なら、ロジアナがあればまずどこがダメなのか調べたら楽になる
ちゃんと作ったハズなのに動かない、そうなったとき欲しくなるワケ
あと>>169が解説にオマケではっつけてあるやつも
これくらいなら言葉で書いてあればわかるけれど
実際に波形見た方が分かりやすいだろうと思って撮ってくれたんでしょ、たぶん 自分も厳密にやってないけど、部品点数が増えたり
クロックが上がったりでタイミングが難しくなったとき
ロジアナの出番がある認識 千円くらいで買えるようになると、Arduino ボード・IDEと一体になってて
ワンタッチで「D2,D3の波形を表示」みたいなことできるようにならんかな? Adafruit trinketかわいい(*´▽`*) >>201
すでに1000円で買えるわけだが
一体とかワンタッチとかになってなきゃいかんの?
ちょっと言ってることのニュアンスがつかめない。 信号見たいって思ったときに、ロジアナ探してきてUSBつないで
Arduinoの見たいピンとGNDつないで、ロジアナソフトでCH1はD2でCH2はD3とか
設定するのが面倒 >>204
それは、ロジアナ持ってる人は誰でもやってることだから、みんな知ってるんだ。
「ワンタッチで」の方のシステムはどんななのか教えてほしいのさ。 横からだけど足の長いピンソケットがついたシールドになってて
ArduinoとシールドでそれをサンドイッチするとArduinoの信号が全部出るみたいな?
でもUSB2本出るね 基板で中間に入るjigつくればいいじゃん
ロジアナへのアダプタ
ワンタッチで接続できる
でもロジアナのポート数が足りないか
N->8本に選択がメンドウだな Arduinoから始めた人は何でもシールドでなきゃあかんのかねえ。
ブレッドボード派なので、ロジアナからジャンパー線が生やしっぱなしになってて、
使うとき挿すだけなんだが…。
https://i.imgur.com/qbyMf3y.jpg DCモーターの制御とプログラムの作例が掲載されてる参考書を教えて下さい 質問です。
エスパーが少し高いのですが、
エスパーの互換機はありますか? 質問です。
arduino同士の赤外線通信をしようと思っているのですが、送信側の赤外線LEDを物理的に上下させないと送信できないのですが、これはLEDが悪いのでしょうか。
https://imgur.com/a/wHM2ni4 回路です。
プログラムはIRremoteのサンプルプログラムを使いました。市販のリモコンでうまくいったので受信側には問題ないと思います。
よろしくお願いいたします。 >>213
ebayで売ってる500円くらい
X-8266 ESP-WROOM-02で検索
よく探せば郵政マークがついてる
ファームは自分で書く >>214
>物理的に上下
意味不明。接触不良か? 前々関係無いけどArduinoの電解コンデンサカッコいいよね >>215
ご回答ありがとうございます。
eBayで最近よく購入してるんで、
見てみます! >>216-217
fritzingがうまく起動できなかったので手書きで失礼します
https://imgur.com/a/ZwTdk0o
新しいブレッドボードなので接触不良はないの思います。 赤外LED付けっぱでなんのデータを送るつもりなのか >>216-217
https://imgur.com/a/qCQ3i4I
>>221
送信側は動かさないで受信側が常に動いていていつ通信できるか分からないので、常に送信し続けています 意味がわからんが赤外線通信って赤外線を高速でオンオフしてデータストリームを送るもので
その繋ぎ方だと赤外線LEDがずっと付きっぱなしでただ光ってるだけでなにも送信してないぞ 送信赤外線は黒線の波形で受信側は赤線で検出される
詳しくはググれば解ると思う
>>ID:i9wCAcu4
受信素子の型番は?
その回路では赤外線LEDはただ点灯しっぱなしになってるだけでデータは送れない。
リモコン用の受信素子なら38kHzの搬送周期での点滅が必要だよ。
ちょっと調べてみるか、何か参考にしないと無理じゃない? >>223-224
なるほど理解しました もう少し勉強します はー 釣りかよ
どうやって意味のある信号をやり取りするのか考えてないんか >>227
通信するデータの内容はまったく意味のないもので、通信したという記録が受信側に残ればいい程度です。
具体的には、送信側が3つあって、それぞれ赤外線では通信できない距離離れていて、受信側は送信側の近くを通過したら通信して、通過したという記録が欲しいのです。 「通過した」っていう意味のある通信が必要なんだろ?
IRリモコンの解説とかよく読め >>ID:i9wCAcu4
赤外線通信というよりは赤外線検知だな。
で、受信素子の型番は?
なぜお前は聞かれたことにすぐ答えない、馬鹿なのか、釣りなのか? ただ光が当たったかどうかだけで済まそうというなら、外光遮断がとても面倒、というかできない
だからわざわざ変調掛ける >>230
赤外線リモコン受信モジュール SPS−442−1(38kHz) です >>231
屋外に出したら誤動作しまくりですね
リモコンを受信できたっていうのは単に赤外線を検知できたってだけなのかな >>232
そうか、やっとスタート・ラインだな。
で、ここまでの皆さんのアドバイスと、
自分で調べたりデータ・シートを読んだりした結果を総合して、
まだ何か質問があるの? firmataライブラリで困ってます。standardfirmatライブラリを呼び出してそのまま検証ボタンを押すと、自宅pcではそのままコンパイルできるのに別の環境のPCではなぜかコンパイルできません。i2c pinとかエラーメッセージが出るのですがどうしてだと思いますか? インストールしてあるバージョンと
環境変数をチェックした? >>235
質問するのにエラー・メッセージも書かない馬鹿が設定したPCだから。 >>234
ピンについての理解が及んでいないのが原因でした。
通信はできたのですが、送信器受信器をずらすと、変な値を受け取ってしまうのですが、
これは送信側の赤外線LEDを増やしたりすれば解決するのでしょうか
Decoded NEC: 17623F (32 bits)
Raw (68): 30280 9100 -4400 650 ....
17623F
Decoded NEC: 17623F (32 bits)
Raw (68): 30330 9100 -4400 ...
F5EAEE7F
Unknown encoding: F5EAEE7F (32 bits)
Raw (8): 30080 1350 -150 3300 -200 600 -500 1200
といった感じです >>238
赤外線LEDは何使ってるの?
指向性が高いのはビームの広がり角度が狭くなって
ちょっとでもズレると受信しなかったりするけど >>240
あ、それ持ってるw
エアコンのリモコンで使ったわ。
3mぐらい離れたら真っ直ぐに向けないと効かなかったから、
LEDを2個付けて角度を微妙にずらしたら、効きやすくなった。
あとトランジスタ・FETを使って電流を上げたら距離が伸びた。
俺の知識ではこれぐらいしか言えないから、
上級者の人どうぞ↓ >>241-242
ありがとうございます 参考にします >>238
とりあえず、距離とか位置関係が分からないと何とも言えないなあ。
あとは、他の人も書いてる通り、信号を増幅するとか、指向性を考慮するとか、
究極は送受信の素子を増やすとか…。
でも、素子を増やすのはちょっと大変。
あと、そのデータはどういうスケッチ?
NECってのはNEC方式のリモコン信号ってことだと思うけど。
通過したことが分かればいいだけじゃなかったの?
ちゃんと通信するなら複数回連続で送信してエラー補正とかするんだと思うけど、スケッチはどうなってる? 物によるみたいだね
リモコン用のはたいていDCで100mA、パルスで1Aになってるけど照明用?(暗視用?)と思われるやつはDCで20mA、パルスでも100mAっていうのもあるからね
データシートで確認しないとわからないってことかな >>244
どこのセンサーを通過したかわかるように個別番号的に値を送信してみました。
通信方式はわかっていないので、サンプルにあったのを使ってます。
エラー補正は難しそうなので、3回受け取って同じ値ならOKみたいにしようと思います。
#include <IRremote.h>
IRsend irsend;
void setup()
{
Serial.begin(9600);
}
void loop() {
irsend.sendNEC(0xAAA23f1, 32);
delay(100);
} >>249
2chだと行が長すぎると怒られたので...で省略しました
わかりにくくてごめんなさい >>250
ええと、移動してるんじゃなかった?
位置関係の話は?
動いてると角度がずれて認識しなくて当然だと思う。
家電のリモコンもちょっとずれたらダメでしょう? >>251
距離は50cm程度 位置関係はなるべくLEDと受信機がまっすぐになるようにしてますが、
30度ぐらいずれると変な値を拾います 両方動いてんの?
絵で描いてみ。
あと、受信部のセンサーによっては、あまり連続して入光すると、
一定時間受け付けないようになってるのもあるよ。
どんなスケッチにってるか知らんけど。 もともと何の装置を作ってるのか気になるよね
物体移動検知に他のセンサーを使ったほうが良いこともあるし ■ このスレッドは過去ログ倉庫に格納されています