>後輩たちと……

>後輩たちと、比良(琵琶湖の西側の真ん中ぐらい)にある僕の別荘で合宿しました。

8/8~8/12まで、長い合宿です。(高校の研修旅行よりは短いですが)

8/8は「びわ湖大花火大会」に行ってきました♪

好きな花は?と聞かれたら、
「桜、花火、コスモスです☆」
と答えます。

花火大好きです!

当日はちゃっかり13時に浜大津駅の近くの公園まで席取りに行きました。
いい席とれてるでしょ?
動画はコンデジ&手持ち撮影したのでけっこうぶれます……スミマセン
でもカメラ性能には自身ありますb他の人よりは綺麗に撮れてると思う!
2分25秒ぐらいのところがお気に入りです(他の動画と比べてみてください)

まぁ13:00に行くと花火開始の19:30まで大変なんですが……今年はボウリングと水鉄砲大会しました。
水鉄砲大会は、近くの皇子が丘公園で6人でサバゲーの水鉄砲版です。
ボウリングは2ゲームしたら2時間もかかりました……さすが6人(´・ω・`)

その後は近江舞子浜行ったり、バドミントンしたり卓球したり、
(別荘の100inch,5.1chのホームシアターで)Wiiやったりゲームキューブやったり64やったりスーパーファミコンやったり映画見たり
しました!

そして11日の夜は手持ち花火とか噴出花火とかしました。
そしてやってみたのが
「ネズミ花火6連鎖」

ネズミ花火を6個並べて連鎖させてみました。



こんな感じです。
動画はあまり綺麗ではないですが……実際にやってみると綺麗ですよ。というかむしろ連鎖したときにテンション上がります↑
アイデア勝負なのでいいんじゃないでしょうか?

コカコーラ+メントスの実験もやりました。(知らない人はググッてみてください)
あまり綺麗にとれなかったのでアップできませんが……
すごいですよw
メントスを砕いてから入れると反応速度が更に上がりましたww

高2の夏休み、おそらく高校生活最後の遊べる夏休みなんですよねー……
悲しいですが、充実した楽しみを味わえたんじゃないかなぁと思います!

追記
http://www.youtube.com/watch?v=Dc1n260GcJI&feature=related
こんな動画がありました。
びわ湖大花火大会をどこかのマンションから撮ったのでしょう。
別の視点で面白いですよ♪

>加速度センサ

>ストリナで販売されている

この\945の加速度センサを使用してみました。

使用したマイコンは例のごとくATMega328Pで、
ここ(部活の先輩のブログ)でupされている(先輩作!)i2cのライブラリから加速度センサの部分をもらってきて、ちょっと書き換えればすんなり動いてくれました!

値域はだいたいそれぞれの軸で-70~+70ってとこです。(重力加速度のみの場合)
けっこうぶれますが。おそらく本当に加速度がかかっているんでしょう。

明日はずっと逃げているラスボス、Wiiモーションプラスに挑戦ですかね。

AVRからの8ビットタイマのPWMによるサーボモーター及びブラシレスモーターアンプの制御

論文みたいなタイトルつけてみましたw書いた事無いですが

AVRの8bitタイマ(Timer0,Timer2)の高速PWMモードでブラシレスアンプを制御することができました。
もちろんサーボモーターにも応用できるはずです。(信号部分は共通だが初期化部分は不要)

詳しい信号については他のページを参照していただきたいです。

なぜこのページが有用かといえば、AVRからサーボモータやブラシレスアンプを制御する資料はなぜか周期20msにこだわって数少ない16bitタイマー(Timer1)を使用するものばかりだからです。
Timer1を使うとAVR1つあたり1つしか使用できないサーボモータやブラシレスアンプを、これなら4つ同時に制御できます!

今回使用したのはヘリ用ののアンプ。
初期設定のまま使用しました。
ブレーキなし、一方向の回転のみ(これは変わりませんが)です。

まず悩んだのは初期化の仕方。
初期化なしでは全く回りませんでした。そこで
AVR Tiny13を用いて信号解析用にブレッドボードで回路を製作。

そして試行錯誤の結果出た結論が
「暫く1.5msのパルス→ブッブッブッブッブッ→暫く2.0msのパルス→プププッ→初期化完了!」
というフローチャートです。
もちろんサーボモータなら初期化いりませんが。

そして早速プログラムへ実装!
(開発環境はAVR Studio4,WinAVR使用)

※HTMLの関係から、<は<に、/は/に直してからご使用ください

/*

PWMによるブラシレス制御(アンプ使用)
rev 2 :2011/8/2

ATMega328P,16MHz

*/

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define PWM1 OCR0A
#define PWM2 OCR0B
#define PWM3 OCR2A
#define PWM4 OCR2B

#define PWM_FOR 31//2ms
#define PWM_NEUTRAL 23//1.5ms
#define PWM_STOP 15//1ms

uint16_t i;

void delay_ms(uint16_t ms){
while(ms–){
_delay_ms(1);
}
}
void delay_us(uint16_t us){
while(us–){
_delay_us(1);
}
}

void ioinit(){
DDRD|=0b01101000;//PWM
DDRB|=0b00001000;//PWM
}

void set_pwm(uint8_t pw1,uint8_t pw2,uint8_t pw3,uint8_t pw4){
PWM1=pw1;
PWM2=pw2;
PWM3=pw3;
PWM4=pw4;
}

void init_pwm(){
//タイマー0
TCCR0A = 0b10100011; //非反転 8ビット高速PWMモード
TCCR0B = 0×05; //1024分周

//タイマー2
TCCR2A = 0b10100011; //非反転 8ビット高速PWMモード
TCCR2B = 0×07;  //1024分周
}

int main(){
delay_ms(500);//起動待ち

ioinit();delay_ms(10);
init_pwm();delay_ms(10);

/*初期化*/
set_pwm(PWM_NEUTRAL,PWM_NEUTRAL,PWM_NEUTRAL,PWM_NEUTRAL);
delay_ms(5000);
set_pwm(PWM_STOP,PWM_STOP,PWM_STOP,PWM_STOP);
delay_ms(5000);

while(1){
set_pwm(PWM_FOR,PWM_FOR,PWM_FOR,PWM_FOR);
delay_ms(1000);

set_pwm(PWM_STOP,PWM_STOP,PWM_STOP,PWM_STOP);
delay_ms(1000);
}
}

以上です。
サーボモーターの場合は/*初期化*/の下の4行が不要ですね。
速度調節は16段階できるようになっています。(試したところあのアンプはパルス幅1.0ms~2.0msまで順々に速度が上がっていくようです)

やはり同時に多数の特殊モーターを制御できるのは嬉しいですね!

9/1追記:
初期化不要で、サーボモーターも動きました。

9/13追記:
プログラムのPWMの初期化部分がコメントはあってるのに値が間違っていたのを修正(TCCR2Bレジスタ)