約 5,017,924 件
https://w.atwiki.jp/stm32wiki/pages/19.html
秋月電子のページ:>I-01600 ATtiny2313で赤外線リモコンを作ってみる。 回路図 ATtiny2313 ___ ___ RESET [1 |__| 20] Vcc PD0(RxD) [2 19] PB7(SCK) PD1(TxD) [3 18] PB6(MISO) PA1(XTAL2) [4 17] PB5(MOSI) PA0(XTAL1) [5 16] PB4 PD2 [6 15] PB3 PD3 [7 14] PB2 PD4 [8 13] PB1 PD5 [9 12] PB0 GND [10 11] PD6 ~~~~~~~~~~~ Vcc 3V(単4電池2個) GND GND PA0 赤外線LEDドライブTrへ接続 PA1 モニター用赤色LEDへ直接接続 赤外線LEDドライブTrは、正論理(1で)点灯 Infra-LED -----|<|----3V |/(C) PA1-- 3kΩ---| (B)|\ ↓(E) GND モニター用赤色LEDは、 負論理(0で)点灯 LED PA0---1kΩ---|<|----3V 改造対象の赤外線リモコンの赤外線LEDとTrをそのまま使用しました。 キーボードマトリクス. weak pull-up (sense) PB0 ---+---+---+---+---+ | | | | | PB1 ---+---+---+---+---+ | | | | | PB2 ---+---+---+---+---+ | | | | | PB3 ---+---+---+---+---+ | | | | | PB4 ---+---+---+---+---+ | | | | | PD2 PD3 PD4 PD5 PD6 SCAN (pull-down or Hi-Z) 参考実装 /* キーマトリクス PD= PullDownコモン側 PD2 PD3 PD4 PD5 PD6 | | | | | | | | | | PB0 ---------+-------+-------+-------+-------+-- |(1) |(2) |(3) |(4) |(5) | | | | | PB1 ---------+-------+-------+-------+-------+-- |(6) |(7) |(8) |(9) |(10) | | | | | PB2 ---------+-------+-------+-------+-------+-- |(11) |(12) |(AD) |(POW) | | | | | | PB3 ---------+-------+-------+-------+-------+-- |(+) |(-) | |(CH) | | | | | | PB4 ---------+-------+-------+-------+-------+-- |(Mute) | | |(Video)| PB=PullUpセンス側 FUSE設定 ヒューズの設定例は、以下のように設定します。 Low 01100010 (0x62) ||||++++-- CKSEL[3 0] システムクロック選択 ||++-- SUT[1 0] 起動時間 |+-- CKOUT (0 PD2にシステムクロックを出力) +-- CKDIV8 クロック分周初期値 (1 1/1, 0 1/8) High 11-11111 (0xFF) |||||||+-- RSTDISBL (RESETピン 1 有効, 0 無効(PA2)) ||||+++-- BODLEVEL[2 0] (111 Off, 110 1.8, 101 2.7, 100 4.3) |||+-- WDTON (WDT 0 常時ON, 1 通常) ||+-- SPIEN (1 ISP禁止, 0 ISP許可) ※Parallel時のみ |+-- EESAVE (消去でEEPROMを 1 消去, 0 保持) +-- DWEN (On-Chipデバッグ 1 無効, 0 有効) Ext -------1 (0xFF) +-- SPMEN (SPM命令 1 無効, 0 有効) 現在の動作クロックは、内蔵発振4MHzの1/8分周により500kHz 動作となっています。 消費電流は3Vで0.5mA程度です。--- sleep命令の直前のポート書き込み値が間違っていました。 修正後は、テスター10mAレンジでは計測不能な程度に減りました。 ソースファイルの説明. main.c メイン処理. timer.c タイマー1. usart.c USART 赤外線の信号 38kHzで変調. On +---+ +---+ +---+ | | | | | | Off ---+ +---+ +---+ + | ----- | 26.3uS 実際はOnのデューティを15%程度にまで落として、電池の消費とLEDの劣化を防いでいます。 bit0 38kHzを21回 +---+ +---+ +---+ | | | | | | + +---+ +---+ +--------------- 9,000uS 4,500uS キー操作 CHボタンで SHARP/PANA切り替えを行なっています。 有効なボタンは電源、1~12チャネル、音量+、音量ーです。 ファームウェアソース・ダウンロード ダウンロード Infrared.zip 名前 コメント today - total -
https://w.atwiki.jp/yskwiki/pages/19.html
はじめに LCD接続 ソースコード 今後やりたいこと はじめに 買ったまま長いこと塩漬けになってたキャラクタ液晶(SC1602BS*B)を使ってみました。配線がごちゃごちゃしてるので、写真は載せませんw LCDキャラクタディスプレイモジュール(16×2行バックライト無) 1個 ¥500(税込)(2012/09/07時点) http //akizukidenshi.com/catalog/g/gP-00040/ 2012.09.07 新規作成、初版 LCD接続 ATTiny2313とLCDの接続はこんな感じにしました。 ピン 名称 接続先 ピン 名称 接続先 1 VDD 5V 8 DB1 open 2 GND GND 9 DB2 open 3 Cont. 可変抵抗 10 DB3 open 4 RS PB6 11 DB4 PB0 5 R/W PB5 12 DB5 PB1 6 EN PB4 13 DB6 PB2 7 DB0 open 14 DB7 PB3 このLCDは14本のピンのうち8本(DB0〜DB7)がデータ入出力用となっていますが、8bitモードと4bitモードがあり、4bitモードの場合は4本のピン(DB4〜DB7)をデータ入出力用として使用します。早くアクセスした場合は8bitモードを使用するんでしょうが、今回は使用ピン数の少ない4bitモードにします。 ソースコード C版(1つのファイルにまとめてあります) tn2313_lcd_test_c.c 関数 引数 説明 uint8_t lcd_read(uint8_t rs) rs MODE_CMD(コマンドリード),MODE_DAT(データリード) LCDリード戻り値はリード値(8bit) ★void lcd_pol() - BusyFlag解除待ち ★void lcd_write (uint8_t rs, uint8_t val) rs MODE_CMD(コマンドライト),MODE_DAT(データライト)val ライトする値(下位4bitのみ使用) LCDライト void lcd_cmd(uint8_t cmd) cmd コマンドの値 コマンド実行 void lcd_data(uint8_t data) data 文字 文字を1つライト void lcd_clear() - 液晶をクリア void lcd_init() - 液晶を初期化 void lcd_putstr(char *str) *str 文字列の先頭アドレス *str位置から \0 までライト 以下はマクロとして定義 #define LcdMoveto1stLine(n) n 位置 カーソルを1行目のn桁目に移動lcd_cmd(0x80+n)のalias #define LcdMoveto2ndLine(n) n 位置 カーソルを2行目のn桁目に移動lcd_cmd(0xC0+n)のalias ★の関数は基本的に直接呼び出すことは無いと思います。 10MHz用に作ってあるので、他の(特に10MHzよりも速い)周波数で動かす場合は、時間を調整する必要があります。10MHzより遅い周波数で動かす場合は特に変更しなくても動作すると思いますが、初期化時間が長くなります。 要変更箇所delay_100us()関数 引数*100us待機する関数。動作周波数に合わせて変更する必要があります。 lcd_read()/lcd_write()関数 制御信号(RS,R/W,EN)のタイミングを調整する必要があります。 LCD用の関数内ではAVR依存の記述は無いと思うので、defineとdelay_100us()関数を変更すればPICでも動くと思います。僕はPICのライタを持ってないので試せませんがw ソースコードコピペ #include stdint.h #include avr/io.h #include compat/deprecated.h // for cbi(), sbi() #include util/delay_basic.h // for _delay_loop_2() #include stdlib.h // for itoa() //-------------------------------------------------- // [6 4]をRS/RW/EN、 // [3 0]をLCDへのデータ出力に使用します。 // 汎用性はありません。 #define RS PB6 #define RW PB5 #define EN PB4 #define LCDIN PINB #define LCDPORT PORTB #define LCDDDR DDRB //-------------------------------------------------- // about 100us @10MHz void delay_100us(uint8_t n) { int i; for(i=n; i!=0; i--){ _delay_loop_2(249); } } //==================================================LCDここから //==============================H //#ifndef __AVR_LCDLIB_H__ //#define __AVR_LCDLIB_H__ //-------------------------------------------------- // busy flag #define BF 7 #define NOP() asm("nop" ) #define NOP2() {NOP();NOP();} // rjmp PC+1 -これどうやるの? #define DDR_READ 0xf0 #define DDR_WRITE 0xff #define MODE_CMD 0 #define MODE_DAT 1 #define LcdDataMode() sbi(LCDPORT, RS) #define LcdCmdMode() cbi(LCDPORT, RS) #define LcdReadMode() sbi(LCDPORT, RW) #define LcdWriteMode() cbi(LCDPORT, RW) #define LcdAccsEnable() sbi(LCDPORT, EN) #define LcdAccsDisable() cbi(LCDPORT, EN) #define LcdMoveto1stLine(n) lcd_cmd(0x80+n) #define LcdMoveto2ndLine(n) lcd_cmd(0xC0+n) //-------------------------------------------------- uint8_t lcd_read(uint8_t rs); void lcd_pol(); void lcd_write (uint8_t rs, uint8_t val); void lcd_cmd(uint8_t cmd); void lcd_data(uint8_t data); void lcd_clear(); void lcd_init(); void lcd_putstr(char *str); //#endif // __AVR_LCDLIB_H__ //==============================H //==============================C //-------------------------------------------------- // read LCDdata uint8_t lcd_read(uint8_t rs) { uint8_t ret; // set DDR for read operation LCDDDR = DDR_READ; LCDPORT = 0xf0; if(rs==MODE_DAT) { LcdDataMode(); } else { LcdCmdMode(); } LcdReadMode(); //---------- // 1st read LcdAccsEnable(); // this requires wait-time at least 220ns ret = 0; NOP2(); ret = (LCDIN 4); LcdAccsDisable(); //---------- NOP2(); //---------- // 2nd read LcdAccsEnable(); // this requires wait-time at least 220ns ret = 0xf0; NOP2(); ret|= (LCDIN 0x0f); LcdAccsDisable(); //---------- return ret; } // polling // wait until BusyFlag is cleared void lcd_pol() { //uint8_t timeout = 100; //while((lcd_read(MODE_CMD) _BV(BF)) (timeout-- != 0)) {} while(lcd_read(MODE_CMD) _BV(BF)) {} } //-------------------------------------------------- // write data(for only 4bit-mode) void lcd_write (uint8_t rs, uint8_t val) { LCDDDR = DDR_WRITE; // set DDR for write operation if(rs==MODE_DAT) { LcdDataMode(); } else { LcdCmdMode(); } LcdWriteMode(); //---------- // write LcdAccsEnable(); LCDPORT = ((LCDPORT 0xf0) | (val 0x0f)); LcdAccsDisable(); } // command write void lcd_cmd(uint8_t cmd) { // 4bit-modeなので、2回に分けてライト lcd_write(MODE_CMD, cmd 4); lcd_write(MODE_CMD, cmd ); lcd_pol(); } // data write void lcd_data(uint8_t data) { // 4bit-modeなので、2回に分けてライト lcd_write(MODE_DAT, data 4); lcd_write(MODE_DAT, data ); lcd_pol(); } //-------------------------------------------------- // clear LCD void lcd_clear() { lcd_cmd(0x01); // clear display //delay_100us(16); } // initialize LCD void lcd_init() { // 最初のうちはbusy flagを利用できないので // 時間を指定して待機 delay_100us(150); lcd_write(0, 0x03); delay_100us(41); lcd_write(0, 0x03); delay_100us(1); lcd_write(0, 0x03); delay_100us(1); lcd_write(0, 0x02); delay_100us(1); lcd_cmd(0x28); // set to 4bit-mode, 2line-mode lcd_cmd(0x08); // display off lcd_clear(); // clear display lcd_cmd(0x0C); // display on lcd_cmd(0x06); // entry mode is inc, cursor-move } // put string void lcd_putstr(char *str) { // 終端文字 ¥n までライト while(*str != ¥0 ) { lcd_data(*(str++)); } } //==============================C //==================================================LCDここまで //-------------------------------------------------- int main() { uint8_t c=0; char num[4]; // 数値文字列変換用領域の確保(3文字分+ ¥0 ) lcd_init(); lcd_clear(); //---------- lcd_putstr("LCD Test "); while(1) { // "LCD Test "の後ろ(10文字目)に移動 LcdMoveto1stLine(9); // 泥臭い方法で左詰め if(c 100) lcd_data( ); if(c 10) lcd_data( ); lcd_putstr(itoa(c++, num, 10)); // 2行目の先頭に移動 LcdMoveto2ndLine(0); lcd_putstr("^^^^^^^^"); // delay_100us(250); delay_100us(250); } } //-------------------------------------------------- // EOF 今後やりたいこと アセンブラ版も作る CGRAMを使って、自作の文字を表示させる 名前 コメント
https://w.atwiki.jp/eq_311/pages/37.html
2013/6/2 今日のAVR 自走式iPhoneを作ってみた 旧式ひとりぶろぐ 2013/6/2 19 47 iPod Touchで無線シリアル通信 - SE組込人 - Yahoo!ブログ 2013/6/2 20 01 AVRはC言語がつかえるのはいいけれど、簡単なトーン発振器を組んだらもうプログラムエリアの00E0まできてしまった。 アセンブリで組んでもかわらないかもしれない。 1kBではDCC動力デコーダは無理ぽい。ATTiny45ならだいじょうぶかな.. PWMはじめ 8ビットタイマーのカウント幅は変えられない模様。しかし9.6MHzの256分周で、37.5kHzというちょうどいい周波数、GJ。 PB0, PB1 をOutに設定すると、PICerFTで読み書きできなくなるトラブル。RESETをGNDにつないで常Loにしたら解決。 OutputCapture はA, B共にうごかすと、OCR値を0にしていても細かいヒゲがでてしまうので、Off側は通常出力にしてHighをだすように工夫。 参考コード DDRB = 0x03; PORTB = 0x03; TCCR0A = 0xC3 TCCR0B = 0x01; と初期設定し OCR0A = value; で任意のPW出力が出てくれるはずです。 Cで割り込みはどうやる 分かる前は暗中模索だったPWMは、いくつかの設定ですんなり高速でうごいてくれています。 NゲージE233系京浜東北を前進後退させてあそんでみましたが、やはり低周波成分が無いと低速が動いてくれません。 なので、高速1次PWMの周期をサンプリング周波数として「2次PWM」波形を出したく、PWMタイマーで割り込みを検討。 よさそうなサンプルサイトさん Timer0 オーバーフロー - 花夢電科雑多猫 マニュアル メモ 2013/6/3 7 32 AVR timer(1) | stastaka's Blog 2013/6/3 8 41 Small project #3 — IR controlled MOSFET with PWM | My 2µF 2013/6/3 9 18 2013/6/1 WinAVRはじめ 付属のProgrammers NotepadにはAVR Makeコマンドが仕込み済み! WinAVRは2010年で開発が停まっているらしいですが、1発起動の軽さのありがたみ。要.NETなVisualStudioなんて唯一の我がマシンEeePC901には重すぎるでしょう。しかし、C#用の SharpDevelop3 はわりと軽くうごいてくれてます。 さて、簡単なLEDフラッシュを、と思い、ウエイトルーチンをwhile( -- ctr ); でやってみましたが、コンパイル(アセンブルか)して.lstファイルをのぞいてみたら、0000 0895 ret とノーオペレーションを rcallされていますた。 コンパイルオプションの設定が必要なようです。 WinAVRを動かす がた老AVR研究所 2013/6/1 21 21 コンパイラの最適化の罪 2013/6/1 21 19 avr-libc Using the GNU tool 2013/6/1 21 28 変数に volatile 簡単なサブルーチンに inline をつけて一件落着。最適化オプションをはずすといやになるくらいコードが冗長いたしますね。。 さて、これから ATTiny13を PICerFTで書き込むピン接続をしらべます。PICerFT 2013/6/1 22 34 PICerFT→ATTiny ピン接続 UM-232 ICSP ATTiny RI# 6 RST 1 PB5 1 CB4 11 CLK 2 GND 3 GND 4 VCC 4 VCC 8 RTS# 3 SCK 5 PB2 7 RXD(TXD) 5(1) MISO 6 PB1 6 CtS# 10 MOSI 7 PB0 5 Arduino shrunk - how to use ATtiny13 with Arduino IDE 2013/6/2 0 26 SOIC版 ATtiny13 用のアダプタ:放課後マイコンクラブ:So-netブログ 2013/6/2 0 11 さて、配線も済み。初期のTiny13のクロックは何MHzなのだろう.. うんとも動かない。 PB3 2番PinをLEDにつないでみたが.. うんとも。 ##include avr/io.h #define F_CPU8000000 inline void Wait( volatile uint16_t span ); int main() { DDRB = 0x08; while( 1 ) { PORTB ^= 0x08; Wait( 500 ); } return 0; } inline void Wait( volatile uint16_t span ) { volatile uint16_t a; while( -- span ) { a = 8000; while( -- a ); } } あ、RESET端子がLowのまんまじゃないですか、、当たり前.. ライタ(シリアル)からRSTを抜いたら..LEDが光りだしました。 しかし間隔がおそい.. main.lss, main.lstファイルを覗いてみると、なにか意味不明なコード。ループはどこかな.. (別室)AVRのページ(アトメル社のAVRを使ってみる) ATTINY13A AT90S2313 ATTINY2313 ATmega128 ATmega64 ATmega48 ATmega88 ATmega168 BASCOM WinAVR 2013/6/2 2 04 上手くいった! CLKPR = 0x80; CLKPR = 0x00; 「クロックのプリスケーラ」がヒューズ設定(CKDIV8)が有効(0値)で、8分の1になっていたため、動作が8倍おそくなっていたという話でした。 ヒューズ設定は面倒そうなのでここはソフトでCLKPRを0にしてフルスピードに。どうやら9.6MHzでうごいてくれているようです。 CLKPRは「設定しますよ」の合図として0x80を書いてから0~8(1~256分の1)を書く仕様です。 めでたい。 ATtiny13 ATtiny25 ATtiny45 ATtiny85 Feature Comparison 2013/6/2 8 34 「ATTiny45」というのもあったらしいです。こっちが本命かなぁ.. 2013/5/31 開発ツールと書き込みピン AVR Studio | マイクロファン ラボ 2013/6/1 4 05 Atmel Corporation - Microcontrollers, 32-bit, and touch solutions 2013/6/1 4 05Atmel Corporation - Microcontrollers, 32-bit, and touch solutions 2013/6/1 4 05 なんだ、だめだ。AVR Studio 6.0は .NET4.0が要るんだって。 PNPadをつかった方法をしらべてみます。8ピンマイコンのために重量ツールは美しくないです。 ATMEL AVR ATROS館 【WinAVRのインストール】 2013/6/1 5 00 WinAVR - Browse /WinAVR/20100110 at SourceForge.net 2013/6/1 5 32 ダウンロード!! 2013/5/29 AVRはじめ 先週書き込めるようになったPIC12F683。しかしこれのPWMはモーター制御に不向きなことがわかりATTinyへ転換。 なひたふ電子情報 --電子回路の芸術とアイデア 2013/5/29 6 53 ATTINY13A-SSU Atmel | ATTINY13A-SSU-ND | DigiKey 2013/5/29 6 49 ATTINY13A-SSU Atmel | Mouser 2013/5/29 6 50 Wholesale attiny13a - Buy Low Price attiny13a Lots on Aliexpress.com 2013/5/29 3 32
https://w.atwiki.jp/macinakapiano/pages/798.html
大宮ピアノ 写真未入手 演奏可能時間 10 00 - 18 00 設置期間 2021年4月29 - 設置場所 埼玉県さいたま市大宮区錦町、大宮アルシェ アクセス 設置ピアノ アップライト 設置環境 屋内 近隣のまちなかピアノ その他 関連リンク
https://w.atwiki.jp/macinakapiano/pages/809.html
ひまわりピアノ 写真未入手 演奏可能時間 10 00 - 18 00 設置期間 2021年4月17日 - 設置場所 千葉県八街市、イオン八街店 アクセス 設置ピアノ アップライト 設置環境 屋内 近隣のまちなかピアノ その他 関連リンク http //bijyutubu.sakura.ne.jp/index-y
https://w.atwiki.jp/macinakapiano/pages/304.html
ストーリーピアノ(白石蔵王駅) 写真未入手 演奏可能時間 9 00 - 19 00 設置期間 2019年12月21日 - 2020年3月(期間限定) 設置場所 宮城県白石市大鷹沢三沢字桜田、東北新幹線白石蔵王駅 アクセス JR東北新幹線 白石蔵王駅構内(改札外)。 仙台空港から 東京から 新潟から 盛岡から 仙台から 福島から 白石市街から 設置ピアノ ヤマハ グランドピアノ 設置環境 屋内 近隣のまちなかピアノ 仙台ガーデンパレス: 白石蔵王駅から新幹線で15分(白石蔵王→仙台)、仙台駅下車、徒歩6分。 NAVITIME検索結果はこちら その他 関連リンク
https://w.atwiki.jp/pianokyousitu/
豊島区池袋 中野和恵 ピアノ教室 池袋図書館から歩いて1分のピアノ教室です。 武蔵野音楽大学を卒業し、在学中よりピアノを長年指導してまいりました。 ピアノが上達する事はもちろんの事、ピアノを好きになって欲しい!! そんな気持ちで、楽しいレッスンをしています。 中野 和恵 ピアノの音が好きな皆様へ ピアノを弾きたい方 ピアノに興味がある方 ピアノの音を聴くと、つい耳を傾けてしまう方 そんな方はまず見学・無料体験レッスンをしてみませんか? 少しでもピアノに興味のある方は、お気軽にお電話下さい♪ 見学と無料体験レッスンを行っております。 ℡:03-3982-0249(レッスン室) ℡:03-3988-6230(自宅) ※メールでのご連絡でも大丈夫ですが、お返事にお時間を頂く場合がございます。 生徒さん達のの習い始めたきっかけは? ピアノに憧れて テレビで耳にする音楽を弾いてみたい 音大への進学を考えている 作曲をしてみたい 保育士さんになりたい 家に眠っているピアノがある 仕事のストレス発散に 子どもの頃習っていたのが懐かしくて 何かに夢中になりたい etc 子どもはもちろん、大人の方も、主婦、OL、サラリーマンの方など、 多数の大人の生徒さんが在籍されています。 生徒さんの趣味やレベル、目標に合わせて、 ひとりひとりにあった楽しいレッスンをしています。 ピアノがはじめての方、楽譜の全く読めない方も大歓迎です。 小さいお子様には、リトミックや歌、リズム楽器等、 ピアノ以外の音感知育にも対応しておりますので、楽しく音楽に触れ合えます。 ~お気軽にお電話どうぞ~ 03(3982)0249
https://w.atwiki.jp/macinakapiano/pages/311.html
旭川どうぶつピアノ(旭川空港) 写真未入手 演奏可能時間 設置期間 2019年12月16日 - 2020年1月末頃【期間限定】 設置場所 北海道上川郡東神楽町東2線16−98、旭川空港1Fギャラリーステンドグラス前 アクセス 旭川空港ビル内(セキュリティエリア外)。 JR富良野線 千代が丘駅から車で8分。美瑛駅からラベンダー号バスも利用可(旭川空港下車) 稚内から 網走から 釧路から 室蘭から 倶知安から 深川から 当麻から 富良野から 旭川市街から 設置ピアノ アップライト 設置環境 屋内 その他 近隣のまちなかピアノ イオンモール旭川西: 旭川四条駅から列車で50分(千代が岡→旭川→近文)、近文駅下車、徒歩8分。 NAVITIME検索結果はこちら 関連リンク https //www.aapb.co.jp/post-14656/
https://w.atwiki.jp/macinakapiano/pages/820.html
ピアノクリニック浜松 写真未入手 演奏可能時間 8 00 - 17 00 (平日のみ) 設置期間 2021年4月22日 - 現在 設置場所 静岡県浜松市南区 アクセス <遠州鉄道> ・新浜松駅から車で9分 <新浜松駅からバス、米津方面行> ・卸本町下車 <空港・各方面からのアクセス> ・静岡空港から ・大阪から ・東京から ・浜松から ・島田から 設置ピアノ アップライト 設置環境 近隣のまちなかピアノ 新浜松駅 ・車で9分 ・浜松行バスに乗車⇒ 「浜松駅」下車。 NAVITIME検索結果はこちら その他 関連リンク
https://w.atwiki.jp/macinakapiano/pages/574.html
駅ピアノあさひかわ(JR旭川駅) 写真未入手 演奏可能時間 10 00 - 17 00 設置期間 2020年10月1日 - 2020年11月3日【期間限定】 設置場所 JR旭川駅東コンコース アクセス 設置ピアノ YAMAHA アップライト 設置環境 屋内 その他 2019年7月7日- 7月16日にも置かれていた。 近隣のまちなかピアノ 関連リンク https //www.city.asahikawa.hokkaido.jp/event/category-03/d066931.html