Arduino初心者熱烈大歓迎質問スレ part22
■ このスレッドは過去ログ倉庫に格納されています
このスレッドは過去ログです。
プレミアム会員に登録すると続きを読めます。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
───────────────────
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。 ※格安Arduino互換機の注意
USB-シリアル変換にATmega16U2ではなく、CH340系が使われている場合がある。
Windows7以下、MacOSXはCH340系のデバイスドライバーを別途インストールする。
CH340系ドライバーのダウンロード
http://www.wch.cn/download/CH341SER_EXE.html ※Arduino Nano互換機の注意点
2018年1月に新しいブートローダーが公開される。
互換機は古いブートローダーが書き込まれている場合がある。
書き込み時に「avrdude: stk500_recv(): programmer is not responding」のエラーが出る場合には、
ツール→プロセッサで「ATmega328P (Old Bootloader)」 を選択するか、
ツール→ボードで「Arduino Genuino Uno」を選して書き込む。
または、最新版のIDEに更新しブートローダーを最新のものに更新する。 勝手に〜気取り、って気に入らないのか。おまえ何様のつもり?
何か書くときはお前に書いていいかどうか確認しろってか? >>9
いいのではないの?
技術的な内容に異議がある人は内容で反論すればいいわけだし。 >>1、>>4、>>5 乙
>>4、>>5 はテンプレに入れた方がいいね。 Arduinoやってる人でAdafruitを避けて通れる人は居ないんじゃ?
直接買ってなくても代理店から買ったり、最低でもライブラリは絶対使ってるはず。 >>13
ライブラリ使ってるだけだと意識はしていないかもしれない。 製品企画も中華がパクって安いコピー品を沢山出してるから業界への貢献度はデカいよ >>9
失礼なことを書いて申し訳ございませんでした。
全く問題ございません。 20kHzなら設定できるdutyは0〜800だろ
クロックを周波数で割ったのが大体の分解能だ
0%か50%か100%の3段階でよければ8MHzだ
1%刻みなら160kHzだ Arduinoの中に書き込んだプログラムを取り出す方法はないですか?
PCをリカバリーしてPCに保存したデータを全てなくしてしまいました。 やっぱりそうですか、ご返信いただき、ありがとうございました。 バイナリなら読み出せるんじゃない?ソースは無理だけど 脳みそコネコネしながら逆コンパイルだ!w
>>1
乙〜♪ 流石にArduinoでゲームエミュレータってできないよな? バイナリ読みだしても最適化されまくりだから、ソースに戻せたところで、質問者の欲しいソースとはかけ離れすぎだろw
それでも問題ない輩は、そもそも質問者しねーだろうし、ソースのバックアップもしてるだろーな。 FLASHが余ってたらスケッチをLZMAの7zとか強烈なアルゴリズムで超圧縮してバイナリデータとしてROMのケツに書き込んどけwwww 展開するCPUが8bitなのはともかく、展開先のメモリをどうやって工面すれば…
せめて、ビデオメモリが展開先として使えたらいいのに。 >>26
エミュじゃないゲームならあるし
ファミコンぐらいなら余裕かと >>26
ゲームじゃないけど
appleIIのエミュレータなら有ったと思う。appleII上でゲームも可能だと思うよ。 >>32
Qiitaにあったの見てた
Gituhubにもあった
あれROM入れられないよね Arduino IDEとProcessingは何がちがうん? >>34
ArduinoIDEはArduino専用の統合開発環境。
ProcessingはJavaを単純化したプログラム言語のこと。(専用の統合開発環境も同名)
Arduino側のプログラムはArduinoIDEで作成して、
Arduinoの出力をPCで処理する部分をProcessingで書く。
後者はProcessingである必要はない。CとかPythonとかでもいい。
まぁ、作例がそれなりにあって、簡単だからProcessingを使うことが多い。 githubのライブラリーに付属のサンプルとかは、
.pde(Processing用のファイル)から、
.ino(Arduino IDE用のファイル)に変更していってるね。
更新してない古いライブラリーは.pdeのままだったりする。 ArduinoIDE自体がProcessingで書かれてるんじゃなかった? マイコン初心者です。arduinoスレで質問するのは違うと思うのですが、質問させてください。
無線でスタートストップラップをするストップウオッチを作りたいのですが、何(arduino raspi pic)を使ったらいいか、何を勉強したらいいか、どんな部品を使えばいいかわからないので教えてください。
センサC1 から無線で信号を受け取ったらストップウオッチS スタート
センサC2 から無線で信号を受け取ったらS ラップ計測
C3 から無線で信号を受け取ったらS ラップ計測
Cn から無線で信号を受け取ったらS ストップ
読み取りも無線でできたらいいなと思っていますが、SDカードかなにかに保存してみればいいかなと思ってます。
センサとストップウオッチの距離は10cm程度でそれ以下でも構いません。
なるべく小さく安く作りたいと思っています。
これ使ってこれ勉強しろで構いませんよろしくお願いします。 >>38
ESP-WROOM-02かな。
電池駆動とかどのくらいの距離離すかとかも書いた方が良いと思う。
LTEやLoRaじゃないと無理だわ、ってことも有るし。 >>39-44
ありがとうございます。電池駆動で距離は30cm程度です。
外で使うのでwifiモジュールは適していないのかなと思いました。
それとあまり距離は出さなくていいので今のところ赤外線モジュールが視野に入ってます。 距離30cm程度で無線の必要性がよく分からんけど
赤外線モジュールだと、位置関係もある程度制限されるし
片方をポケットとかバックパックに入れるわけにもいかんよね 赤外線は屋外だと太陽光の影響を受けて距離が短くなるよ。
と言っても30cmなら大丈夫と思うけど! ESP32を5個買って、青歯接続が無難かなぁ…
あとでパソコンへデータ送信するのも、無線LAN経由でらくらく送れるし。 青歯という隠語みるたびにどうしても青ノリが思い浮かぶ・・・ 最近の青歯は省電力じゃないの?
CR2032で半年とか持たせられるし。 使ったことないからあれだけど
電波飛ばすんだからその間は飛距離に応じた電気はくうよね? カシオのスマートウオッチ、3年ほど使ってるけど電池交換は半年に1回だけ、もちろんCR2032を1個使用。
詳しい仕組みはわからないけど、電気をバカ喰いすることはないんじゃないかと。 PCのワイヤレスキーボードとか単4電池一本で1年以上もったりするけど
あれどうなってんの?1.5vで動いてるの?3vに昇圧してんの?? >>56
大体は昇圧してる。
電波に関しては、スペクトラム拡散技術のおかげで、
かなり弱い電波でも受送信できるようになってる。 >>45
その程度なら、リモコンみたいな方式で赤外線で飛ばすのが手っ取り早くて消費電力も小さくて良いんじゃない?
主要なマイコンならちょっと調べればリモコンの製作記事見つかるだろう。
センサ側は16F1のpic@100円前後、受け側はnanoとかで十分。
使うセンサーによっては受け側以外はマイコンすら不要かも。
リモコン専用のチップ有るし。 ありがとうございます。
基本的には赤外線で、ストップウィッチの方にブルートゥースも乗っけて読み取りを楽にしようと思います。
まずはunoで地道に勉強しようと思います ブレッドボード上で抵抗の足同士が接触してVccとGndショートさせてUSBポート壊したんだけど
ポートを保護する方法を教えてください 青歯とか書いて悦に入ってるヤツって
いまだにすし屋でアガリとかオアイソとかガリ
とか言ってヒンシュク買ってそうだよなw 青歯が恥ずかしいのは当て字の中二臭さ、今時じゃなく始めから恥ずかしい。
寿司屋隠語は業界用語なので客が使うのは恥ずかしい。 中国では蓝牙というらしい
蓝は藍かな >>63
>>64
よかった
嫌な感じがするのは俺だけじゃなかったんだ processingとの連携を勉強中で教えて頂きたいです。
xbeeとxbeeシールドを使い、xctuを起動したPCへ無線で繋げたいと思っています。processing1.5.1を指定している数年前のページがあったりするんですが今だと最新版でも良いのでしょうか? TeensyってArduinoのvariantなん? do文の中にanalogRead入れたら値が全く読み込めない
なんで?
for文なら動いてます >>71
もしかしたらdo文が繰り返さず
1回で抜けてるかも知れない
whileの時間増やしても速さが変わらない >>70
ふたつのプログラムを見ないと何ともだけど、while文の抜け出し条件が未成率で無限に抜け出せてないとか?
do文が無しで1回のみ実行だとアナログ値は読めてる?
そもそも読めないって、読みに行ったら戻ってこないの? int analogpin = 0;
int count = 10;
void setup() {
Serial.begin(9600);
}
void loop() {
unsigned long clocks = millis();
int MAX = 0, MIN = 1023;
int data = 0;
int total = 0;
float ave = 0;
float mA = 0;
for (int i = 0; count < i; i++) {
unsigned long start = millis();
do {
data = analogRead(analogpin);
// Serial.println(data);
MAX = max(data , MAX);
MIN = min(data , MIN);
}
while(millis() - start <= 22); //50hz1サイクル20msプラス10%
total += int(MAX - MIN);
}
ave = total / count;
mA = ave / 2.0 / sqrt(2) * (5000 / 1024);
Serial.println(mA);
}
初心者だから読みにくいのは許してね
交流電流をクランプ式のセンサーで読み取りたいのです
電源は5vを4.7キロオーム2つで分圧してクランプの片側へ
クランプのもう片側はA0へ
クランプと並列に補助抵抗200オームをつけて
これだけの回路です
シンプルだけどfor文では動きました
質問のアナログ値1回は読めてるかどうかですが
スケッチ上にdo文の中にprintln置いていますが
それを生かすと止まります
故に読めてるかどうかは分かりません
出力はゼロをひたすら出力します 説明しますね
交流50hzなのでワンサイクル20ms
1割多めで22msワンサイクル分の最大最低を読み出します
それの10回分の平均を出して
計算して実際の電圧にします
最後の電圧から電流に変換する式が抜けてましたが float b = 0, c = 0;
int COUNT = 200;
int g[200];
void setup() {
Serial.begin(9600);
// analogReference(INTERNAL);
// ADCSRA = ADCSRA & 0xf8;
// ADCSRA = ADCSRA | 0x04;
}
void loop() {
float a = 0;
int MAX = 0, MIN = 32767;
for (int k = 0; k < 50 ; k++) {
for (int i = 0; i < COUNT; i++) {
g[i] = analogRead(0);
if (MAX < g[i])MAX = g[i];
if (MIN > g[i])MIN = g[i];
// Serial.println(g[i]);
}
a += MAX - MIN;
}
b = a / 50;
c = b * (5000.0 / 1024.0) / 2.0 / sqrt(2) * 10.0 - 500.0;
Serial.println(c);
}
これは成功と思われますが誤差は大きいです >>75
追記ですが最後の出力とはm Aのことです >>75
スマホで読んでて、しかも老眼なんで見間違えもあるかも知れないけど、for文の条件式が count < i になってると初期値が count = 10と i = 0 だと中身を実行しないんじゃない?
違ってたらゴメンなさい。 ちょっと関係ないけど、Loopの中で下記の変数が再定義されまくっても良いのかな?
ループする度に変数のアドレスを保持するパフォーマンス的によろしくないと思うんだけど?
コンパイラがどういうコードを生成してるか知らないので、これでも良いのかもしれないけど・・・
unsigned long clocks = millis(); <ーこれ
int MAX = 0, MIN = 1023; <ーこれ
int data = 0; <ーこれ
int total = 0; <ーこれ
float ave = 0; <ーこれ
float mA = 0; <ーこれ
for (int i = 0; count < i; i++) {
unsigned long start = millis(); <ーこれ 変数は結局コンパイラに全部関数の最外スコープにまとめて定義する形にされるのでは? >>75
for (int i = 0; count < i; i++) { あんま気にしなくて良いんですね・ありがとうございます。
引き続き、>>70さんのdo-while内のanalogRead問題をどうぞ for (int i = 0; count < i; i++)
じゃなく、こうだ
for (int i = 0; i < count ; i++) >>85
動きましたー
ありがとうございます
よかったー お騒がせしました
みなさんありがとうございます
また色々参考になるご意見今後の参考にします
またご質問させていただくことがあると思います ほんといろいろな意味で気持ち悪いコード
adcサンプリング周期とか無視かよ
millis() の使い方それでいいのか
analogReadは ADSCでのポーリング読み込みだから
あらかじめハード的に周期を観測して決めなければならない
というか、はあ、初心者はそういう発想で来るのねという感想 >>90
ど素人なのでご容赦ください
サンプリング周期??
ネットで調べたらアルデュイーノのanalogReadは量子化を考えてサンプリング定理でローパスフィルター入れてって書いてあったから
入れてみたけど失敗しました Arduino電力計 - 回路図とスケッチ
でググれ 床屋行ったので書いてみた
timerone ライブラリを使用しているので、gitからダウンロードしてね
/*
50Hz meas
use lib :
github.com/PaulStoffregen/TimerOne.git
1/50Hz = 0.02 (1 period)
0.02 / 100 =0.0002 =200u ( 100 sample = 1 period)
*/
#include <TimerOne.h>
#define SAMPLE_SZ 100
#define SAMPLE_PERIOD 200 // us
#define BLOCK_SZ 50
#define BLOCK_SZ_INV (1.0/50.0)
int sample_buf[SAMPLE_SZ];
int sample_buf_p;
int sample_buf_ready;
void isr_timer1() {
int data;
if( sample_buf_p < SAMPLE_SZ ){
data = analogRead(0); // wait for ADC
sample_buf[ sample_buf_p ] = data;
sample_buf_p++;
}
if( sample_buf_p == SAMPLE_SZ ){
sample_buf_ready = 1;
sample_buf_p++;
}
}
void setup() {
Serial.begin(9600);
sample_buf_p = 0;
sample_buf_ready = 0;
Timer1.initialize(SAMPLE_PERIOD); // unit=usec
Timer1.attachInterrupt(isr_timer1);
}
void loop() {
int i,j; int data;
int max; int min;
float sum; float avr;
float val;
sum = 0;
for (j = 0; j < BLOCK_SZ; j++) {
while( sample_buf_ready == 0 ) ;
max = 0;
min = 32767;
for (i = 0; i < SAMPLE_SZ; i++) {
data = sample_buf[i];
if (max < data) max = data;
if (min > data) min = data;
}
sample_buf_p = 0;
sample_buf_ready = 0;
sum += ( max - min );
}
avr = sum * BLOCK_SZ_INV; // outer loop sz
val = avr * (5000.0 / 1024.0) / 2.0 / sqrt(2) * 10.0 - 500.0;
Serial.println(val);
} ああ、ダブルバッファにしてなかったから
これはボツだ
まあ、参考にして書いてみて >>97
感動しました
ありがとうございます
参考にさせていただきます インデント無いのはまったく見る気しないね。
次のテンプレにこれ入れて。
http://codepad.org/ ■ このスレッドは過去ログ倉庫に格納されています