「Arduino」カテゴリーアーカイブ

小型マイコンボード市場がますます過熱中!!

先ずはAruduino
販売はまだだが「Arduino TRE」
完全に「Raspberry Pi」にぶつけてきたと思える仕様。
たぶんこれは「Aruduino」では無いような気がするけど。
Raspberry Piに無理やりAruduino unoを組み込んだようなイメージが強い。
(外形写真を見る限りの話ですが。)

次に Aitendo の IchigoJam市場への参入。
その名も 「ai.Jam」
価格の設定が楽しみですが、基板の作りとしては本家より好感が持てます。
Power LEDの追加や本家のオリジナル基板とUタイプ基板両方に対応した拡張コネクタのレイアウト。
このコネクタの配置は本家の方がおかしいのですが(笑)
あいてんどう、恐るべし(笑)

IchigoJamの福岡バージョンを作るなら名前は「AmaouJam」? でもたぶん商標違反。

「Arduino TRE」
「Aitendo」

Arduinoシミュレータ UnoArdusim サーボ編 No.4

今回は、アナログ入力の値でサーボの位置を指示するプログラムです。
アナログ入力A3にスライド式のボリュームを接続して、出力ピン9に接続したサーボをコントロールします。

Arduinoのアナログ入力の分解能は10bitなので 0V~5Vの信号が 0~1023の数値として取り込まれます。
この0~1023をサーボのコントロール信号0~180に変換してサーボをコントロールします。
これは アナログ入力値/5.67で計算できます。

以下がプログラムと UnoArdusim の設定(赤で囲んだ部分)です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//***********************************************************
// サーボモーターを動かすプログラム No.6
// 博多電子工作室 2015/07/27
//***********************************************************
#include <Servo.h>  //サーボモーター用ライブラリを読み込み
Servo myservo; 		//サーボ用のオブジェクトを作成
int val; 			//サーボの角度を格納するための変数
int analogPin = 3;	// アナログ入力にPin A3を使う
 
void setup()
{
	myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
}
void loop()
{
	val = analogRead(analogPin);    //アナログピンを読み取る;
	myservo.write(val/5.67); 		//アナログ入力値 0~1023を 0~180に変換してサーボをまわす。
	delay(100);						// 100msのウェイト
}

アナログ入力によるサーボの制御

123D Circuit版はこちら

電子回路シミュレータ 123D Circuits に回路を登録

少し前に 電子回路シミュレータ 123D Circuits が遅くて使い物にならないと言う記事を書きましたが今日使ってみたらそこまで遅くありませんでした。

Web経由なので回線やサーバーの混み具合が影響しているのでしょうか。

さて話は変わりますが、来る2015/08/01(土)15:00 ~ 18:00 に ヨカラボ天神 にて
共同で 「基礎から説明 Arduino活用勉強会」を開催します。

この勉強会で使用する予定の Arduino の簡単な回路を
123D Circuits に登録しました。
LチカとSWの入力によるLEDのOn/Off、それとUnoArdusim サーボ編と同じ簡単なサーボ回路です。

ここの 123D Circuits のページ に置いています。

Arduinoシミュレータ UnoArdusim サーボ編 No.3

昨日の続きで Aruduinoによるサーボモータ駆動です。
最初に昨日の
「0度→から180度まで10度刻みで動かして、180度まで行ったら0度に戻す」プログラムの別バージョンです。
昨日のプログラムではMAXの180度を調べて0に戻していましたが
今回のプログラムは判定処理を入れずに実現しています。
昨日のプログラムとは全然違っていますが、制御の内容としては同じになります。
このように、ある動作をさせるプログラムは1つではないことを頭に入れておいてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//***********************************************************
// サーボモーターを動かすプログラム No.3
// 博多電子工作室 2015/07/26
//***********************************************************
#include <Servo.h>	//サーボモーター用ライブラリを読み込み
Servo myservo;		//サーボ用のオブジェクトを作成
int val;			//サーボの角度を格納するための変数
void setup()
{
	myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
	val = 0;
}
void loop()
{
	myservo.write(val); //サーボを動かす
	delay(1000);		//1秒停止
	val = (val+10)%190 ;
}

次に昨日の宿題プログラムの例です。

例その1
このプログラムでは角度の変数が190以上であれば-10ずつ角度の指定値を減らすようにしています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//***********************************************************
// サーボモーターを動かすプログラム No.4
// 博多電子工作室 2015/07/26
//***********************************************************
#include <Servo.h>	//サーボモーター用ライブラリを読み込み
Servo myservo;		//サーボ用のオブジェクトを作成
int val;			//サーボの角度を格納するための変数
void setup()
{
	myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
	val = 0;
}
void loop()
{
	if(val >= 190){
		myservo.write(360 - val); //サーボを動かす
	} else {
		myservo.write(val); //サーボを動かす
	}	
 
	delay(1000);		//1秒停止
	val = (val+10)%360 ;
}

例その2
このプログラムでは角度の変数と方向の変数を使っています。
例その1に比べるとプログラムが長くなっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//***********************************************************
// サーボモーターを動かすプログラム No.5
// 博多電子工作室 2015/07/26
//***********************************************************
#include <Servo.h>	//サーボモーター用ライブラリを読み込み
Servo myservo;		//サーボ用のオブジェクトを作成
int val;			//サーボの角度を格納するための変数
int dir;			//サーボの回転方向を格納するための変数
void setup()
{
	myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
	val = 0;
	dir = 0;
}
void loop()
{
	myservo.write(val); //サーボを動かす
	delay(1000);		//1秒停止
	if(dir == 0){
		if(val >= 180){		//サーボの位置が180度なら回転方向を反転して位置を10度戻す
			val -= 10;
			dir = 1;
		} else {			//それ以外であれ10度進める
			val += 10;
		}
	} else {
		if(val <= 0){		//サーボの位置が0度なら回転方向を反転して位置を10度進める
			val += 10;
			dir = 0;
		} else {			//それ以外であれ10度戻す
			val -= 10;
		}
	}
}

今回の3本のプログラム、ご理解いただけましたでしょうか。
次回は、スライド式ボリュームの値によってサーボモーターの位置を決めるプログラムの説明を行います。

Arduinoシミュレータ UnoArdusim サーボ編 No.2

前回のサーボ編 No.はサーボモーターを 0度→90度→180度→90度→0度 の繰り返し動作をさせる単純なプログラムでしたが、
今回は0度→から180度まで10度刻みで動かして、180度まで行ったら0度に戻すというプログラムです。

UnoArdusimのデバイスの設定は サーボ編 No.1 と同じです。

今回のプログラムは以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//***********************************************************
// サーボモーターを動かすプログラム No.2
// 博多電子工作室 2015/07/25
//***********************************************************
#include <Servo.h>	//サーボモーター用ライブラリを読み込み
Servo myservo;		//サーボ用のオブジェクトを作成
int val;			//サーボの角度を格納するための変数
void setup()
{
	myservo.attach(9); //デジタル9番ピンをサーボの角度命令出力ピンとして設定
	val = 0;
}
void loop()
{
	myservo.write(val); //サーボを動かす
	delay(1000);		//1秒停止
	if(val >= 180)		//サーボの位置が180度なら次の位置を0度にセット
		val = 0;
	} else {			//それ以外であれ10度進める
		val += 10;
	}
}

どうですか、ちゃんと動きましたか?

次回はこのプログラムを基に、
180度まで行ったら0度に戻るのではなく、逆方向に10度刻みで動くプログラムを組みます。

これ、宿題にしましょうか。
みなさん、自分なりに考えてみてください。

電子回路シミュレーター 123D Circuits 使ってみたけど

AutoDeskが提供している電子回路シミュレーター 123D Circuits

123D circuits 紹介記事みたいに結構良さげにし解説しているサイトが多いので
期待して使ってみた。

登録してブラウザからアクセスして、最初に感じたのが
「公開されている回路が少ない、たったこれだけ?」

自分でArduino IDEのLチカのサンプルプログラム用に部品を配置して
「Start Simuration」で実行。

遅い、ハンパ無く遅い。
1秒毎の点滅のはずが5秒くらいかかっている、おまけにその時間が安定していない。
自分のパソコンのせいでは遅いわけでは無いと思う。
CORE i5だから。

公開されている回路が少ない理由が分かったような気がする。

「遅すぎて使い物にならない」

回路図も書けるのだが、これもまた今一。

パーツのレイアウトは変更できるが、ラインは勝手に引かれて変更できない。
よって、下にUPしているような情け無い回路図になってしまう(泣)

AutoDesk社提供と言うことで期待が大きかった分、残念です。

実験回路
123D Circuits_1

回路図
123D Circuits_2 回路図

プログラムコード
123D Circuits_3

Arduino UNO シミュレーター

Arduino用のシミュレーターで面白そうなのを見つけましたので紹介します。
「UnoArdusim」と言うソフトです。
Arduino UNO専用となります。

Arduino UNO シミュレーター
Arduino UNO シミュレーター

左のプログラム部分にスケッチを読み込んで 「RUN」すると
右の Arduino UNOボードでその動きを確認できます。
Arduino IDEのサンプルプログラムの 「Blink」を読み込んで「RUN」すると
LEDが点滅します。

まだ使い込んではいませんが、今後少しずつ使い方をUPして行く予定です。
「UnoArdusim」でググっても日本語のページは出て来ません。

ダウンロードは
UnoArduSim 公式ページから出来ます。
ダウンロード画面のファイル名の部分をクリックしてもダウンロード出来ません。
右の矢印ボタンをクリックしてください。

UnoArduSim公式ページ
UnoArduSim公式ページ

ちなみに Windows用 しかありません。

中華製Pro miniへのブートローダー書込み 続き

10日ほど前に挑戦して途中で挫折しかけていたいた
中華製Pro Miniへのブートローダーの書込みの続編です。

前回Program Writer に USBASPを使って
Arduino IDEからブートローダーの書込みを試みていましたが
結論としてこの組み合わせではうまくいきませんでした。(力量不足?)

そこで今回はライターに AVRISP mk2 、書込み用のソフトウェアーに
Atmel Studio 6.2を使いました。

接続は次の写真の様にしました。
AVRISP mk2は対象チップに電源を供給しないと言うことをすっかり忘れていて
ちょっとハマりました。使うのが3年ぶり位なので。

avrmk2

promini_2

promini_1

ちなみに書込むブートローダーのプログラム(HEX)は
Arduino IDEをインストールしたときに展開されているファイルを使いました。
標準でインストールしている場合のパスは
C:\Program Files (x86)\Arduino\hardware\arduino\avr\bootloaders\atmega
この中の
ATmegaBOOT_168_atmega328_pro_8MHz.hex です。

今回はコンパイルされたHEXファイルを書込むだけなので
Atmel Studioを起動して
メニューの 「Tools」→ 「Device Programing」をクリックして
Device Programing画面を表示させます。

Atmel_studio_0

左メニューの「Interface settings」をクリックしてください。
まず
Tool : AVRISP mkⅡ
Device : ATmega328P
ISP : ISP(ここは固定です)
を選択してください。

次に ISP Clockの設定ですがデータは変更せずに 「Set」ボタンを押してください。

Atmel_studio_1

次に「Interface settings」をクリックしてください。
以下の画面が表示されます。
このページでは何の操作も必要有りません。

Atmel_studio_2

次に「Device information」をクリックしてください。
次のような表示に替わりますので
「Read」ボタンを押してください。

Atmel_studio_3

「Read」ボタンを押したら次の画面のように
ターゲットデバイスの情報が表示されます。
この画面でも操作は必要ありません。

Atmel_studio_4

次に「Oscillator Calibration」をクリックしてください。
ここも何もせずに次に進みます。

Atmel_studio_5

次にメニューを一つ飛ばして「Fuses」をクリックしてください。
Fuse Register の設定画面となります。
自分の場合は変更無しでOKでしたが必要な場合は設定値を変更して
「Program」ボタンを押してください。

Atmel_studio_6-2

次に「Lock bits」をクリックしてください。
ここもFusesと同じく必要に応じて変更してください。

Atmel_studio_7

次に「Production file」をクリックしてください。
ここも何も変更していません。

Atmel_studio_8

次からが実際のプログラム書込みとなります。
先ほど飛ばした「Memories」をクリックしてください。

書込むHEXファイルを選択して
その下の2個チェックボックスにチェックを入れて
「Program」ボタンを押してください。
Erase → Programming → Verify が実行されます。

Atmel_studio_9

書込みが正常に終了すると以下の画面の様に
「OK}が表示されます。

Atmel_studio_9-2

以上で 中華製Pro miniへのブートローダー書込み が完了となります。

この後、Arduino IDE からのプログラムプログラムの書込みを確認しました。
以下の様に書込みが成功しました。

今回自分が遭遇した中華製Pro mini、
多分日本でも出回っていると思います。

もし、以下の写真のような Pro mini でプログラムの書込みが出来ない場合は
今回のPro mini と同じかと思われますので
ブートローダーの書換えを行ってみてください。
以下の写真が今回手古摺った中華製 Pro mini です。
純正品やSparkfun製と比べると赤枠で囲んだ部分のピン配置が違っています。

Board

ちなみに 前回書込み器として使っていた
USBASPをAtmel Studioで使えるようにする記事を見つけたので
次回試してみます。
(英語ページなので・・・)

中華製Pro miniへのブートローダー書込み

先日のプログラムの書き込みが出来なかったPro Miniへのブートローダーの書込みを行いました。
でもこれがまた色々と大変で....

今回書込み器としてUSBASPを使用しました。
Pro mini とは次の写真のように接続しています。
0

Pro miniのPIN配置図
1

USBASPのPIN配置図
2

ブートローダーの書込みはArduino IDEから行います。
Arduino IDE 以下のように設定します。

書込み装置の設定
3
ボードの設定
4
プロセッサの設定
5

ツールメニューから 「ブートローダーを書込む」を選択して書込み開始
6

なんかProminiのLEDの点滅が早くなって書き込んでいる雰囲気。
しかし残念ながら結果エラー発生で書き込めず。
7

エラーの内容は
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
usbaspのファームウェアをアップデートしなさいとの事。

USBASPのアップデートに関して調べてみると
単体でのアップデートは出来なくて、別の「外部のISP プログラマー」が必要とのこと。
つまりプログラマーをアップデートするのに別のプログラマーを用意する必要有り。
「なんじゃそりゃ」という感じですが、仕方なので色々と調べてみると
もう一台USBASPがあれば良いとの情報を発見。
幸いにも手元には2台のUSBASPが有る。

本日はここまで。

中華製Pro miniが動かない。

Arduino Pro mini 互換品を中華サイトから購入して、
Arduino IDE からプログラムを書こうと試みたがエラーとなって書けない。

原因も何も分からないので
マルツパーツ博多呉服町店から
SparkFun製のPro miniを購入して同じように書き込みしたら
問題なく書き込めた。
上が正常に書き込み出来たときで、下がエラーの時。
OK

NG

ちなみに中華基板はずっとLチカしっぱなし。
DTEをオンにしてもLEDが点滅続けていた。
もしかしてブートローダーが入っていない?

3.3V 8Mhzも怪しくなってきた。
SparkFun製は裏面にマークが入っているが中華基板には無し。

基板の表面
1

基板の裏面
2

ちなみにこんな感じで書き込
3

次はブートローダーを書き込んでみようかと思っています。