aka) Author: Christian Davén Version: 2.0 Author URI: http://www.daven.se/usefulstuff/ */ # adds an options page to the options menu function SUP_add_options_page() { if(function_exists("add_options_page")) add_options_page("Smart Update Pinger", "Smart Update Pinger", 5, basename(__FILE__), "SUP_show_options_page"); } # shows the options page function SUP_show_options_page() { $ping = get_option("SUP_ping"); $uris = get_option("ping_sites"); $pingservicesnow = "今すぐ ping を送信!"; if(isset($_POST["ping"]) && $_POST["ping"] == $pingservicesnow) { SUP_log("手動で ping を送信中 ..."); SUP_ping_services(); } elseif(isset($_POST["submit"])) { $uris = $_POST["uris"]; $ping = 0; if($_POST["ping"] == 1) $ping = 1; update_option("SUP_ping", $ping); update_option("ping_sites", $uris); echo '

設定を保存しました.

'; } $checked = ''; if($ping == 1) $checked = 'checked="checked"'; echo '

ping 送信先のサーバ

以下に登録されている ping サーバへは記事を投稿する際,自動的に ping 送信や更新通知がなされます。WordPress が通常行うような,以前書いた記事の編集時ではありません

注意: このリストは オリジナルのアップデートサービスリストと同期します。.

複数サーバを登録する際は改行で URI を分けて下さい

Ping 送信ログ

このプラグインのログです(下に行くほど新しいログです)

'.SUP_get_last_log_entries(20).'

'; } # telling WordPress to ping if the post is new, but not if it's just been edited function SUP_ping_if_new($id) { global $wpdb, $post_title; if(get_option('SUP_ping') == 1 and get_option('ping_sites') != "") { # fetches data directly from database; the function "get_post" is cached, # and using it here will get the post as is was before the last save $row = mysql_fetch_array(mysql_query( "SELECT post_date,post_modified FROM $wpdb->posts WHERE id=$id")); # if time when created equals time when modified it is a new post, # otherwise the author has edited/modified it if($row["post_date"] == $row["post_modified"]) { if($post_title) SUP_log("Pinging services (new post: “".$post_title."”) ..."); else SUP_log("Pinging services (新規の記事の投稿) ..."); SUP_ping_services(); # Try commenting the line above, and uncommenting this line below # if pinging seems to be out of order. Please notify the author if it helps! # generic_ping(); } else { if($post_title) SUP_log("NOT pinging services (“".$post_title."” の設定が変更されました)"); else SUP_log("NOT pinging services (記事が編集されました)"); } } else SUP_log("NOT pinging services (管理者が ping 送信を無効にしています)"); } # More or less a copy of WP's "generic_ping" from functions.php, # but uses another function to send the actual XML-RPC messages. function SUP_ping_services() { $services = get_settings('ping_sites'); $services = preg_replace("|(\s)+|", '$1', $services); // Kill dupe lines $services = trim($services); if ( '' != $services ) { $services = explode("\n", $services); foreach ($services as $service) SUP_send_xmlrpc($service); } } # A slightly modified version of the WordPress built-in ping functionality ("weblog_ping" in functions.php). # This one uses correct extendedPing format (WP does not), and logs response from service. function SUP_send_xmlrpc($server = '', $path = '') { global $wp_version; include_once (ABSPATH . WPINC . '/class-IXR.php'); // using a timeout of 3 seconds should be enough to cover slow servers $client = new IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path)); $client->timeout = 3; $client->useragent .= ' -- WordPress/'.$wp_version; // when set to true, this outputs debug messages by itself $client->debug = false; $home = trailingslashit( get_option('home') ); # the extendedPing format should be "blog name", "blog url", "check url" (whatever that is), and "feed url", # but it would seem as if the standard has been mixed up. it's therefore best to repeat the feed url. if($client->query('weblogUpdates.extendedPing', get_settings('blogname'), $home, get_bloginfo('rss2_url'), get_bloginfo('rss2_url'))) { SUP_log("- ".$server." への ping 送信が成功しました (拡張フォーマット)"); } else { # pinging was unsuccessful, trying regular ping format if($client->query('weblogUpdates.ping', get_settings('blogname'), $home)) { SUP_log("- ".$server." への ping 送信が成功しました"); } else { SUP_log("- ".$server." への ping 送信が失敗しました。 以下のエラーメッセージが返されました: “".$client->error->message."”"); } } } $post_title = ""; # Receives the title of the post from a filter below function SUP_post_title($title) { global $post_title; $post_title = $title; return $title; } # ----- # Log stuff $logfile = ABSPATH."wp-content/smart-update-pinger.log"; # for debugging function SUP_log($line) { global $logfile; $fh = @fopen($logfile, "a"); @fwrite($fh, strftime("%D %T")."\t$line\n"); @fclose($fh); } function SUP_get_last_log_entries($num) { global $logfile; $lines = @file($logfile); if($lines === false) return "Error reading log file (".$logfile."). This could mean that the wp-content directory is write-protected and no log data can be saved, that you have manually removed the log file, or that you have recently upgraded the plugin."; else { $lines = array_slice($lines, count($lines) - $num); $msg = ""; foreach($lines as $line) $msg .= trim($line)."
"; return $msg; } } # ----- # adds a filter to receive the title of the post before publishing add_filter("title_save_pre", "SUP_post_title"); # adds some hooks # shows the options in the administration panel add_action("admin_menu", "SUP_add_options_page"); # calls SUP_ping whenever a post is published add_action("publish_post", "SUP_ping_if_new"); # calls SUP_ping_draft when changing the status from private/draft to published # add_action("private_to_published', 'SUP_ping_draft'); # removes the "WordPress official" pinging hook remove_action("publish_post", "generic_ping"); # activates pinging if setting doesn't exist in database yet # (before the user has changed the settings the first time) if(get_option("SUP_ping") === false) { update_option("SUP_ping", 1); } ?> VVVF Sound Powerpack | 空IKE飛行機! Blog

アーカイブ

‘VVVF Sound Powerpack’ カテゴリーのアーカイブ

Nゲージ用の自作パワーパック >PWMでVVVF音を再現

2012 年 5 月 5 日 コメント 21 件

みなさまGWは如何おすごしでしょか?
前半雨ばっかで鬱気味だったけど今日はいい天気!こどもの日。
模型の方はまぁまぁ進めてますけど、ここで上げる程の情報は無し・・・と言うか試行錯誤ばかりで先は見えて来たけど形にはなっていない。
要はいつもの通り妄想に終始って事か?w

でもあと2週間で静岡だしぃ〜、今年も勿論P144で展示するので色々準備しとかないといけない事はあるですよ。
例年のNゲージ+CCD車載カメラってのは子供受けも良いので今年も持ち込むんですが、arduinoでパワーパックの自作方法を紹介しているサイトを見つけ、動画を見たら「うぉォ・・・ホンモノと同じ音が出てる!」ってゾクっと来まして、いつも通り丸ごとコピってみました(笑)
相変らず鉄道には疎い私ですが、このパワーパックの凄い所は駆動制御の方式を実車に似せる事でリアルな走行音が再現出来るって部分。
普通のNゲージ用コントローラはレールに流れる電圧を加減してスピードを制御していますが、これだと低速(≒小電流)の時にギクシャクしたり、急に走り出したりしてダサい(笑)訳です。
そこでarduinoでPWM(パルス幅変調)を制御して、高電圧(≒大電流)を流す時間を小刻みに変化させる訳です。たぶん・・・
要はスイッチを目に見えない程速くON、OFFさせ、見た目はなめらかな変化に見せているイメージ?・・・ですかね。
で、PWMと言うのはパルス幅変調と言うだけに周波数も変化させる訳ですが、これを実車同様の周波数になる様にプログラムを書いてやるとNゲージのモーター車も同じ様な音=周波数を出すと言う事らしいです。
実車同様の仕組み(=モーター駆動)に加えて実車同様の音(VVVF音と言うらしい)が出る!てぇのは模型的には大変シビれる部分なんで、思わず真似しちまったってコトですよ(笑)
あと、この周波数も不快な音(主に高周波でしょうね)にならない様にして考慮してあると読み、なるほど!と思いました。
今まで偶然だと思ってた京急線のドレミファ駆動音はわざとだったのか!
模型で内燃機関の再現てのはかなり難しいですが、こう言うのは電車の模型ならではの楽しい部分と思いませんか?
Nゲージで蒸気機関動かす人も中には居るらしいですけどね・・・

配線&パーツ
上記サイトを参考にブレッドボードで組んでみました。
中級者向けとあるだけにかなり試行錯誤しましたが何とか動作する様になりました。
回路図しか無いのでパーツの端子を調べたりするのが大変だったです。
でもまぁ表示用の7セグLED用の配線が複雑に見えるだけで、慣れた人にはそれほど複雑な回路じゃ無いのかな・・・と想像する。
通販のパーツが届いてからこれだけ組むのにまる1日かかったヨorz
実はまだショートした時の表示LEDが点灯しないけど、保護回路働いてないのか配線ミスか不明・・・VVVF音を再現するって目的は果たせてるのでイマんトコ放置してます。

arduinoと全体図はこんな感じ・・・
とりあえず動作は確認出来たので、後はケース買って来て基板に組めばこれよりずっとコンパクトになります。
回路全体図

実際どんなモンなの?って興味有る方は是非動画見て下さい。
あ〜、こう言う事かって解って頂けると思います。
家が散らかってて広い場所で撮れなかったので走らせてませんけどw
YouTube Preview Image
編集適当でミスってるトコあるけどそのままUPしました。
サンプルスケッチにはプリセットで10種類のパターンが入っていますが、その中から3種選んで撮影してみました。
最初に個人的にも馴染みのあるJRの中央線や京浜東北線、ドレミファ音が特徴の京急線とJR西日本の223系です。
こう言うサイトを見て勉強しながら京王線のスケッチでも書いてみるかな・・・イヤ無理かな(笑)

ちなみに↓こちらに作者さんの走行画像がありますヨ
わたしぁこれを見てトリコになっちまったんすね(^^)
YouTube Preview Image

最後にこれも丸ごと引用になりますがパーツリストと参考価格?
ほぼ全て秋月で買えるんですが、arduinoを持っていれば3000円しないで全部揃います。
私はスイッチ類やFET等、持ってないパーツだけを予備用含めて2台分購入しましたが、送料込みでも4000円弱でした。
もしも既製品を買えば恐らく1万以上するでしょうから、こう言うのは自作の強味ですね。

パワーMOS-FET 2SK2232 ¥100
トランジスタ 2SA1015Y×2 ¥100(20個入り)
電解コンデンサー 470μF ¥50
積層セラミックコンデンサー 0.1μF×3 ¥100(10個入り)
セラミックコンデンサー 470p ¥200(10個入り)
カーボン抵抗 1kΩ×15 470Ω×7 2.2kΩ×2 10kΩ 各¥100(100本入り)x3=¥400
ロータリースイッチ(1回路12接点ストッパー付)¥150
小型ボリューム 10kΩBカーブ×2 ¥50×2=¥100
トグルスイッチ1回路2接点 ¥80
トグルスイッチ2回路2接点中点OFFあり ¥100
LED 緑 赤 各1 ¥100(10個入り)x2=¥200
7SEGLED アノードコモン×2 ¥100(2桁赤)
整流用ショットキーダイオード 1S4 40V1A ¥30
汎用小信号高速スイッチング・ダイオード1N4148×3 ¥100(50本入り)
ポリスイッチ0.65A(1.3Aで遮断) RXEF065 ¥30
2.1mm標準DCジャック ¥40
ピンヘッダ(オス)2列 (省略可)
ユニバーサル基板 ¥60(72x48mm)
ゴム足 適宜
つまみ 適宜プラスチックケース 適宜ACアダプター12V1.5A ¥750

以上パーツ代合計 ≒ ¥2400 (参考価格=秋月電子通商)

Get Adobe Flash player Plugin by wpburn.com wordpress themes