2012年9月10日
Li-po Riderとかソーラーとか
9/8〜9/10まで秋葉原のワシントンホテルに滞在、電子パーツ屋さん等で色々買い物してました。
千石電商でLi-po Rider(950円)と1Wソーラーパネル(560円)とJST-XHのケーブル付きコネクタ(メス50円*2、オスメスセット80円)を購入。
aitendoでNokia3300-LCD(500円*2)とLi-poの310mAh(690円)と820mAh(850円)を購入。
このLi-poに千石電商で購入したJSTコネクタ付きのケーブルをハンダ付けで接続。
千石電商で買ったLi-po Rider、ビニールの外側には下記の様に「V1.0の(中略)コネクタはJST型(XHP)2Pです。」とあるが...
実際に入っているのはV1.1で、コネクタがJST-XH(2.5mmピッチ)からJST-PH(2mmピッチ)に変更された最新版。
以下は横に並べて撮った写真。
左のコネクタがJST-PH(2mmピッチ)で、右のコネクタ2つがJST-XH(2.5mmピッチ)。
千石電商に騙される形で買ってしまった訳ですが... せっかく買ってきたので手を加えてみる。
JST-XHコネクタ(ケーブル付き)をJST-PHコネクタの足部分に直接ハンダ付け。
XHもPHも接続できるLi-po Rider V1.1(改)が完成。
無事、充電開始されました。
ソーラーパネルからも充電できることを確認、逆にLi-poから5V出力でArduino UNO等へ給電できることも確認。
色々と遊べる幅が広がりそうな予感。
2012年8月31日
HTC EVO WiMAXにCyanogenMod9(Unofficial)をインストールする
HTC EVO 3D ISW12HTに機種変更してから、充電と放電をひたすら繰り返すだけのEVO WiMAXがあまりにも可哀想なので、とりあえず常用できそうなCyanogenMod9 Nightlyを入れた時のメモ。
大雑把な手順は、S-OFF→CWM→CM9という感じ。
今回は、全く非公式的な手段をやったことがなく、ファームウェアも最新のEVO WiMAXにインストールする場合(要するに最も手順が多い場合)の手順を書きます。
1. PCにドライバをインストール
32bit、64bitそれぞれ向けのドライバをインストールする。
HTC Syncをインストールすればドライバが自動的に適用されるが、HTC Syncを使わない場合はドライバ単体をインストールした方が良い。
HTC_Driver.zipやHTC_Driver_64.zipで検索すると出てくるはず。
2. ファームウェアのダウングレード
RUUを使って初期まで戻し、2.19.970.1までアップデートする。
(この手法を使えばS-OFFの端末をS-ONさせることも可能。修理に出す際に捗る。)
ここに詳しい手順が載ってるので参照されたし。
本来、表にでるはずのないRUUが何故かダウンロードできたりするところもある。
3. S-OFFからCWM導入まで
Revolutionaryを利用する。
ここに詳しい手順が載ってるので参照されたし。
4. CyanogenMod9を焼く
この辺を読みつつ、ここから新しめのイメージをダウンロードする。
ダウンロードしたzipは解凍しないでEVO WiMAXのSDカード直下に入れる。
ついでにCyanogenMod 9向けのGAppsをここからダウンロードして、同様にSDカード直下に入れる。
EVO WiMAXの電源を切り、ボリュームボタンの下を押しながら電源ON。
BOOTLOADERからRECOVERYを選択するとCWMが起動するので、install zip from sdcardを選択、choose zip from sdcardを選択、ダウンロードしてきたイメージのzipを選択。
画面の表示に従って適当にインストールを進め、同様にGAppsもインストール。
少々時間のかかる再起動を経て、ようこそ画面が表示されるので、言語で日本語(ただしCJKフォント)を選択する。
あとは、画面表示の指示に従って設定していけばOKです。
ここまで来て、何も分からない人がやってるとは思っていませんが一応警告。
この状態の端末は、USBつないでadb shellやるとroot権限で弄れたりする。
メインの端末として利用している場合は、くれぐれも置き忘れたり、置きっぱなしで席を離れたりしないように。
パターンロックやらパスコードやら設定していても無駄ですので。
あと、できればGMailやらWalletの決済情報やらが詰まったアカウントでやらないことをお勧めする。
分かってる人は分かっているなりにセキュリティ施すと思うので、くれぐれも自己責任で。
2012年8月25日
セキュリティさくら#05
8月25日開催の熊本情報セキュリティ勉強会「セキュリティさくら」#05について、参加記録と今後の為のメモ。
今回で参加5回目、皆勤賞更新中。
今回の装備は、MacBook Pro Retina、iPad3、iPhone4S、HTC EVO 3Dという感じ。
残念ながらネタ不足&準備検証の為に時間が割けないため、LTはしませんでした。
本会
・場所は前回と同じく、桜の馬場 城彩苑 2F 多目的交流室
→やはり、この会場のアクセス・利用料・許容人数が一番安定だと思われる。
・辻さん「WHAT IS ANONYMOUS」
→Nanorymousの辻さんによるAnonymousについての講演。
→今までのオペレーションやAnonymousという団体の変遷などを解説されました。
・新井さん「俺ってそんなにシェルコードばっかり見てるイメージある?それどこ情報?どこ情報よー?」
→前回もマルウェアについて講演された新井さんによるシェルコードの読み方(≒目grep)
→PDFに仕組まれているコードの解析をDEMOを交えて解説されました。
→IDA Pro、FileInsight、scSigsなどなど。
・前田さん「Stuxnet, Duqu, Flame, Gauss What is next?」(LT#01)
→第3回でも講演して頂いたカスペルスキーのチーフセキュリティエヴァンゲリストの前田さんによるマルウェアのお話。
→頭文字が「SDFG」と来たので次は「H」で確定(キー配列)
→Stuxnet以外は諜報活動が目的のように見える、初期感染・拡散手法が巧妙である。
・吉井さん「スマートフォン・プライバシー・イニシアティブ 〜読むのが面倒な人へ」(LT#02)
→総務省が8月7日に発表した提言についての概要。
→アプリやサービスが収集した情報の扱い方など、個人情報保護法と照らし合わせたお話。
・@parin1213 & @reiji1020「長崎のすゝめ」(LT#03)
→長崎県内でのイベント・勉強会などについてのアピール。
・Sn0wくん「セキュリティキャンプ2012中央大会に参加してきて」(LT#04)
→今年から「プログラミング」が消えて「セキュリティキャンプ」になったにセキュキャンついてのお話。
懇親会
・上通を抜けて並木坂のローソンから右に曲がった先にあるGRILL de GYANというお店(セキュさくら御用達)
→今回は、前回の反省点を踏まえて主菜を多くしてもらったとのことで、10代も満足できたのではないかと思います。
→二次会で大木さんが「幻の焼酎、結局1滴も残って無くて飲めなかった」とか言っておりましたが、大木さん、あなた車で来てるでしょ!!
総評
前回も書いたとおり、この位の規模の勉強会の中では理想形と言えると思います。
約1年前の初回から参加しておりますが、徐々に進化していく様子を見ることができ、とても勉強になっています。
気になる点は、セキュリティに興味が無い人たち(完全に人脈作りの為だけに来ていると思える人)の興味ゼロの態度。
セキュリティさくらは「IT系の人が集まって交流すること」自体が主目的では無いはず。
交流会をやりたい人は、別途、自分の目的を達成出来るイベントに行って欲しいと思う。
日々の激務で疲労がたまっているだろう人たちの居眠りは理解できるが、明らかに興味がないことを示す居眠りというのは失礼である。
1周年を迎え、勉強会の趣旨というものを、もう一度見直す時期に来ているのかもしれません。
告知
ハードウェア(低レイヤ・低レベル)勉強会を9月中にやりたい...やります。 →12月開催で調整中です。
とりあえず、少人数(20以下)で良いので「こういう勉強会やりました!」という実績作りから一歩を踏み出すことが必要かと。
進行状況は、KPF#x07で報告したことから全く進んでおりません。
原因は、あれもこれもそれも...という欲張りがもたらす八方塞がりでしょう。
まずは大成功でなくても良いので、興味のある人が一カ所に集まる勉強会を作ることを目指そうと思います。
今回で参加5回目、皆勤賞更新中。
今回の装備は、MacBook Pro Retina、iPad3、iPhone4S、HTC EVO 3Dという感じ。
残念ながらネタ不足&準備検証の為に時間が割けないため、LTはしませんでした。
本会
・場所は前回と同じく、桜の馬場 城彩苑 2F 多目的交流室
→やはり、この会場のアクセス・利用料・許容人数が一番安定だと思われる。
・辻さん「WHAT IS ANONYMOUS」
→Nanorymousの辻さんによるAnonymousについての講演。
→今までのオペレーションやAnonymousという団体の変遷などを解説されました。
・新井さん「俺ってそんなにシェルコードばっかり見てるイメージある?それどこ情報?どこ情報よー?」
→前回もマルウェアについて講演された新井さんによるシェルコードの読み方(≒目grep)
→PDFに仕組まれているコードの解析をDEMOを交えて解説されました。
→IDA Pro、FileInsight、scSigsなどなど。
・前田さん「Stuxnet, Duqu, Flame, Gauss What is next?」(LT#01)
→第3回でも講演して頂いたカスペルスキーのチーフセキュリティエヴァンゲリストの前田さんによるマルウェアのお話。
→頭文字が「SDFG」と来たので次は「H」で確定(キー配列)
→Stuxnet以外は諜報活動が目的のように見える、初期感染・拡散手法が巧妙である。
・吉井さん「スマートフォン・プライバシー・イニシアティブ 〜読むのが面倒な人へ」(LT#02)
→総務省が8月7日に発表した提言についての概要。
→アプリやサービスが収集した情報の扱い方など、個人情報保護法と照らし合わせたお話。
・@parin1213 & @reiji1020「長崎のすゝめ」(LT#03)
→長崎県内でのイベント・勉強会などについてのアピール。
・Sn0wくん「セキュリティキャンプ2012中央大会に参加してきて」(LT#04)
→今年から「プログラミング」が消えて「セキュリティキャンプ」になったにセキュキャンついてのお話。
懇親会
・上通を抜けて並木坂のローソンから右に曲がった先にあるGRILL de GYANというお店(セキュさくら御用達)
→今回は、前回の反省点を踏まえて主菜を多くしてもらったとのことで、10代も満足できたのではないかと思います。
→二次会で大木さんが「幻の焼酎、結局1滴も残って無くて飲めなかった」とか言っておりましたが、大木さん、あなた車で来てるでしょ!!
総評
前回も書いたとおり、この位の規模の勉強会の中では理想形と言えると思います。
約1年前の初回から参加しておりますが、徐々に進化していく様子を見ることができ、とても勉強になっています。
気になる点は、セキュリティに興味が無い人たち(完全に人脈作りの為だけに来ていると思える人)の興味ゼロの態度。
セキュリティさくらは「IT系の人が集まって交流すること」自体が主目的では無いはず。
交流会をやりたい人は、別途、自分の目的を達成出来るイベントに行って欲しいと思う。
日々の激務で疲労がたまっているだろう人たちの居眠りは理解できるが、明らかに興味がないことを示す居眠りというのは失礼である。
1周年を迎え、勉強会の趣旨というものを、もう一度見直す時期に来ているのかもしれません。
告知
ハードウェア(低レイヤ・低レベル)勉強会を
とりあえず、少人数(20以下)で良いので「こういう勉強会やりました!」という実績作りから一歩を踏み出すことが必要かと。
進行状況は、KPF#x07で報告したことから全く進んでおりません。
原因は、あれもこれもそれも...という欲張りがもたらす八方塞がりでしょう。
まずは大成功でなくても良いので、興味のある人が一カ所に集まる勉強会を作ることを目指そうと思います。
2012年8月13日
AE-UM232RでATmega328PにOptibootを書き込む
基本的なことは「(番外) FTDI BitBang AVR-Writer」の内容と同じですが、参照したページのavrdude-GUIを使った手順が若干理解しづらい&ATmega328Pの場合が記載されていないので、以下まとめ。
配線やPCとAE-UM232Rの接続、ドライバの導入までは前述のページ「3.ソフトウェアの準備」までと同じ。
補足としては .NET Frameworkをインストールしていない場合、最新版の4.0に2.0は含まれていないので、3.5をインストールする必要がある。
次にヒューズビットの設定(外部クロック使用)とOptibootの書き込み。
1.avrdude-GUI.exeを起動する
2.avrdude.exe Fileにavrdude-serjtag\binaryフォルダ配下のavrdude.exeを指定する
3.Programmerに FT232R Synchronous BitBang (diecimila) を選択する
4.Deviceに ATmega328P(m328p) を選択する
5.Command Line Optionに -P ft0 -B 4800 を入力する
6.FuseをReadすると hFuse:D9、lFuse:62、eFuse07 が読み出される (新品未使用の場合)
7.Fuseを hFuse:DA、lFuse:FF、eFuse:05 と入力し、Writeする
8.Command Line Optionから-B 4800を消す (-P ft0のみ入力された状態) ← 超重要
9.Flashでoptiboot_atmega328.hexを選択し、Erase-Write-Verifyする
手順7で外部クロックを使用する設定にしたので、手順8で -B 4800 (ビットクロック指定)を外す必要がある。
※外さない場合、書き込み中にavrdude-GUIがフリーズする。
大量に書き込む時などは、以下のような感じで手順でOK
1.ATmega328Pをセット
↓
2.コマンドラインオプション -P ft0 -B 4800 でFuseをRead
↓
3.hFuse DA、lFuse FF、eFuse:05でFuseをWrite
↓
4.コマンドラインオプションを -P ft0 にしてhexをFlash
↓
5.書き込み済みATmega328Pを取り外す
↓
繰り返し(1へ)
ちなみに、今回のヒューズビット設定は外部クロック使用時なので、内部クロック8MHzで動作させる時は hFuse:DA、lFuse:E2、eFuse:05 など適宜設定する。
2012年7月13日
球面プロッタ完成 (SPG20-332 + MP4401 その3)
Arduinoでステッピングモータ SPG20-332を回すやつの続きの続き。
Arduino側の制御プログラムが完成し、残りはベクターデータから(相対)座標を取り出してArduinoにコマンドを送るプログラムの制作のみ。
とりあえず、簡単な図形ということで、星型を描かせてみました。
始点と終点がずれているのは、ボールの回転軸が微妙にずれているため。
工作精度 or 強度の問題なので、ボールをしっかりと軸の中心に固定できるように固定具を作り直す必要がありそうです。
プログラムはこんな感じ。
鬼のようなネストなど存在しない。(エレガントに書き直す気力が無いので放置)
#include <Servo.h>
#define SERVO_PIN 3 //サーボモータの接続ピン
#define PEN_UP_ANGLE 115 //ペン上げ角度
#define PEN_DOWN_ANGLE 100 //ペン下げ角度
#define MOTOR_DELAY 7 //励磁間隔
const byte motorPen[]={
0x09,0x0C,0x06,0x03}; //ペン軸 励磁パターン
const byte motorBall[]={
0x30,0x60,0xC0,0x90}; //ボール軸 励磁パターン
Servo servoPen; //ペン持ち上げ用サーボを定義
char incoming[100]; //シリアルからのコマンド受け取り用
int x,y; //移動先座標と差分
int magDrivePen,magDriveBall; //現在の励磁状態を記憶
void setup(){
DDRB |=B00001111; //ポートB出力設定
DDRD |=B11110000; //ポートD出力設定
servoPen.attach(SERVO_PIN); //サーボ出力ピン設定
servoPen.write(PEN_UP_ANGLE); //ペン持ち上げ
Serial.begin(9600); //シリアル通信9600bps
}
void getCommand(char *buf) //シリアル通信から座標を取得
{
int i = 0;
char c;
while(1){
if(Serial.available()){
c = Serial.read();
buf[i] = c;
if (c == '\n') break;
i++;
}
}
buf[i] = '\0';
}
void movePenForward() //ペン前進
{
magDrivePen++;
if(magDrivePen>3)magDrivePen=0;
PORTB &=0xf0;
PORTB |= motorPen[magDrivePen];
delay(MOTOR_DELAY);
}
void movePenBackward() //ペン後進
{
magDrivePen--;
if(magDrivePen<0)magDrivePen=3;
PORTB &=0xf0;
PORTB |= motorPen[magDrivePen];
delay(MOTOR_DELAY);
}
void moveBallForward() //ボール前進
{
magDriveBall++;
if(magDriveBall>3)magDriveBall=0;
PORTD &=0x0f;
PORTD |= motorBall[magDriveBall];
delay(MOTOR_DELAY);
}
void moveBallBackward() //ボール後進
{
magDriveBall--;
if(magDriveBall<0)magDriveBall=3;
PORTD &=0x0f;
PORTD |= motorBall[magDriveBall];
delay(MOTOR_DELAY);
}
void writing(int dx, int dy) //座標移動(Bresenhamの線描アルゴリズム)
{
int e = 0; //誤差蓄積用
if(abs(dx) > abs(dy)){ //傾きが1未満の場合
if(dx>=0){ //x軸方向が正の場合
for (int sx = 0; sx < dx; sx++) {
movePenForward();
if(dy>=0){ //y軸方向が正の場合
e += dy;
if (e > dx){
e -= dx;
moveBallForward();
}
}
else{ //y軸方向が負の場合
e += abs(dy);
if (e > dx){
e -= dx;
moveBallBackward();
}
}
}
}
else{ //x軸方向が負の場合
for (int sx = 0; sx < abs(dx); sx++) {
movePenBackward();
if(dy>=0){ //y軸方向が正の場合
e += dy;
if (e > abs(dx)){
e -= abs(dx);
moveBallForward();
}
}
else{ //y軸方向が負の場合
e += abs(dy);
if (e > abs(dx)){
e -= abs(dx);
moveBallBackward();
}
}
}
}
}
else{ //傾きが1以上の場合
if(dy>=0){ //y軸方向が正の場合
for (int sx,sy = 0; sy < dy; sy++) {
moveBallForward();
if(dx>=0){ //x軸方向が正の場合
e += dx;
if (e > dy){
e -= dy;
movePenForward();
sx++;
}
}
else{ //x軸方向が負の場合
e += abs(dx);
if (e > dy){
e -= dy;
movePenBackward();
sx++;
}
}
}
}
else{ //y軸方向が負の場合
for (int sx,sy = 0; sy < abs(dy); sy++) {
moveBallBackward();
if(dx>=0){ //x軸方向が正の場合
e += dx;
if (e > abs(dy)){
e -= abs(dy);
movePenForward();
sx++;
}
}
else{ //x軸方向が負の場合
e += abs(dx);
if (e > abs(dy)){
e -= abs(dy);
movePenBackward();
sx++;
}
}
}
}
}
}
void loop(){
getCommand(incoming); //シリアルから読み込み
char *cmdX, *cmdY, *cmdPen;
int penUpDown;
if(incoming){ //座標系、ペン状態別にコマンドを分離
cmdX = strtok(incoming,",");
cmdY = strtok(NULL,",");
cmdPen = strtok(NULL,",");
penUpDown = atoi(cmdPen);
}
if(penUpDown == 0)servoPen.write(PEN_UP_ANGLE); //ペン上げ
if(penUpDown == 1)servoPen.write(PEN_DOWN_ANGLE); //ペン下げ
delay(200); //サーボの動作待ち
x=atoi(cmdX); //charからintへ変換
y=atoi(cmdY);
writing(x,y); //指定座標へ移動
Serial.print("X:");
Serial.print(cmdX); //ペン軸の移動量表示
Serial.print("/Y:");
Serial.print(cmdY); //ボール軸の移動量表示
Serial.print("/Pen:");
Serial.println(cmdPen); //ペンの上げ下げ状態表示
}
ポイントはブレゼンハムの線分アルゴリズム。傾きが1以外(1より大きい or 1より小さい)の時も真っ直ぐに線を引くために使いました。
でもって、Processing側はこんな感じの雑なコード。(あくまでも動作確認用なので)
実際は、Arduinoから返ってくる座標とペン状態を受け取ってから次のステップに移るようにする必要がある。
import processing.serial.*;
Serial port;
void setup()
{
size(100,100);
port = new Serial(this, "/dev/tty.usbmodem1421", 9600);
port.clear();
}
void draw() {
for(int i=0;i<=4;i++){
delay(1500);
port.write("-15,43,1\n");
delay(1500);
port.write("38,-30,1\n");
delay(1500);
port.write("-45,0,1\n");
delay(1500);
port.write("38,30,1\n");
delay(1500);
port.write("-15,-43,1\n");
delay(1500);
port.write("-1,80,0\n");
}
exit();
}
余談
写真の左上にチラッと見えてるパソコンは、最近買ったMacBook Pro Retinaディスプレイモデルのフルカスタムマシン。
こいつのUSBポートから電源を取ると、Arduino UNOにACアダプタを刺さなくても普通に動作しました。
登録:
投稿 (Atom)














