モダンでC言語以上の記述力、Zen言語でLPC810のベアメタルエルチカに成功!
LPC810は、NXP社製Arm Cortex-M0アーキテクチャーの最大30MHz動作する32bit CPU、RAM1KB、ROM4KB。

こちら、プログラム boot.zen。マシン語版からの移植がスムーズかつ、可読性高い!

const SYSAHBCLKCTRL: u32 = 0x40048080; const FLASHCFG: u32 = 0x40040010; const PINENABLE0: u32 = 0x4000C1C0; const GPIO_DIR0: u32 = 0xA0002000; const GPIO_NOT0: u32 = 0xA0002300; const WAIT_CNT: u32 = 400000; export fn reset() noreturn { @intToPtr(*mut u32, SYSAHBCLKCTRL).* = 0b0011011001; // WKT:off, SCT:off, SWT, GPIO, I2C:off, FLASH, FLASHREG, RAM:off, ROM:off, SYS @intToPtr(*mut u32, FLASHCFG).* &= 0b11; // flash no wait: set 0b00 @intToPtr(*mut u32, PINENABLE0).* = 0xFFFFFFBF; @intToPtr(*mut u32, GPIO_DIR0).* = 0b1100; // PIO0_2 and PIO0_3 while (true) { @intToPtr(*mut volatile u32, GPIO_NOT0).* = 0b0100; // toggle PIO0_2, GND PIO0_3 var waitcnt = WAIT_CNT; while (waitcnt > 0) { asm volatile ("nop"); waitcnt -= 1; } } } export const RESET_VECTOR: fn () callconv(.C) noreturn linksection(".vector_table.reset_vector") = reset; export const DUMMY linksection(".dummy") = [5]u32 { 0, 0, 0, 0, 0 }; export const VALID_CODE: u32 linksection(".valid_code") = 0xEFFFFBDF; // 0x100000000-0x10000400-0x21

リンクスクリプト linker.ld とビルド用の Makefile を用意して、make、できあがり! サイズはたった96byte!ROM4KBの2.3%しか使ってません。マシン語もインラインでさらっと使える。(src on GitHub接続方法)


欲しかったZen言語の書籍「The Zen Book」と「Zenbedded」ゲット!
そういえば、Zen言語と、IchigoJam、両方色相環カラーリング。
色相環で光るネクタイ。Zen言語でパワーアップしよう!

links
- ごきげんよう、Zenへようこそ | Reduce your stress with the C language
- C言語よりコンパクトに! Zen言語開発者からのプルリクとマシン語の気持ち
- 言語づくりという解決手段、高速安全コンパクトなZen言語で簡単組み込み開発 on IchigoJam with zen4ij

夜道の犬の散歩、黒いワンちゃんだと見えづらくて危ない・・・。
そこで、イヌテック、光る首輪「Lightning Choker」のご紹介です!

作り方は簡単、100均でも入手可能な首輪と、光るXのつくりかた同様、LPC810と3.3V昇圧モジュール、WS8211をいくつか準備して、組み立てるだけ。

単4電池1本、WS2811 x 4 で光らせることにしました。


LPC810はIchigoJamで書き込み&実験。WS2811はブレッドボードで手軽に実験できて便利です。WS2812と赤と緑の順番が逆な点だけ注意。


部品は布に刺して曲げて、裏面ではんだづけ。


まさに、デジタル手芸!


光るネクタイ同様、色相環沿いにじわっと色が変わり続けます。もちろん、プログラムを変更すれば光らせ方自在!

こどももおとなも、自由な発想でいろいろつくって、値段を付けて、売ってみる!
事業創造、はじめのいっぽです。
鯖江発のHana道場、本格横展開第一弾、会津に開設決定!

Hana道場がいよいよ本格横展開し会津に開設されます! 会津版を運営するNPOの方々が鯖江に来られて Hana道場を視察。IchigoJam プログラミングの様子や、Hana道場の取り組みなどを見て知っていただきました。 そして、鯖江のあちこちもご案内し、ものづくりも堪能いただきました。 会津版Hana道場の名前はオープンしたら公開します。

Hana道場さんの投稿 2020年7月25日土曜日

すべてのこどもたちにプログラミングを!

WS2812BWS2811(PL9223)を使った、小さな光り物作りに便利なLPC810。
IchigoSerialを流用して、LPC810へプログラムを書き込む治具、LPC810writerを作りました。

devkit-LPC810で開発したプログラムを、IchigoSerialで転送!
Arm Cortex-M0+最大30MHz、Flash4KB、RAM1KBのLPC810を操れます!


今回は持ち運びできるように、ユニバーサル基板で作ってみます。DIP8ピン用ICソケット、ピンソケット、線材を用意。


配線はんだづけ完了。裏面もジャンパーでいろいろ配線あり。


IchigoSerialでも使ったUpverterで設計。ありもの部品なら検索して簡単配置。


配線、楽!
1で表、2で裏、2層の配線を使い分けます。
画面下のステータスバーから、グリッドを25milか50milにして、グリッドにスナップするとキレイに仕上がります。
基板の外形はレイヤーを Mechanical Details に切り替えて線を引きます。ベタGNDの方法はこちら
LPC810 writer by taisukef | Upverter
USBシリアルとの融合版もいいかも!

思い立ったその場で作って使えて間違っても直しやすいのがユニバーサル基板で作る魅力ですが、配線が多くなると作業が大変。 最安発注値が$11まで下がった今、少し余裕を持ちつつPCBの活用が便利。 ミスは成長の元。リカバリーできる設計などもきっと身につくと思って怖がらずにトライ!

オリジナル基板発注ハンズオン講座とかどうでしょう?

光るもの、いいですよね!
フルカラーに輝くLED、WS2812Bは1ツブ約10円!
自由自在に制御して、ステキな演出してみませんか?

こちら、光るメガネの制御実験

Maker Faire Kyoto 2019の帰途、京都駅の階段イルミ。
WS2812B系を多量に使ったと思われる、階段アートにひとだかり。地元でもチャレンジしてみたい?

多量につくるためには、極力安く作りたいので、複雑な制御も65円で買ったLPC810だけでやってみます。

開発環境を用意して、USBシリアルケーブルでPCと接続して、開発、転送。
taisukef/devkit-lpc800: devkit for LPC800 series in C

今回、ボタンを1つ、つけました。
WS2812Bの制御などは、マシン語をasm15でC言語形式に出力して組み込んでいます(ws2812b.h)。

開発言語はC言語、キラキラするエフェクトはこういうプログラムで動いてます

int flash(int len) { int v = 40; for (int j = 0; j < 300; j++) { clear(); set(rnd(len), rgb(v, v, v)); flush(); if (btn()) wait(5000); else wait(50000); } return 0; }

LPC810、コンピューターに書き込んでしまえば、あとは電源接続するだけで動きます!
(IchigoJamプログラミング体験で、やっている通り!)

マトリクス状のLEDを制御したり、同じように大きく並べることで、イルミネーションができあがります。

IchigoJamからシリアルや、I2Cで手軽に使えるキットにするのもいいかも?

Hana道場から商品化され、鯖江と明和電機秋葉原店で買える「光るネクタイ
付属のLPC810でもオリジナルイルミづくりチャレンジできます!

光るネクタイ、単4電池1本の軽量バージョン。
100均10本100円、マンガン単4電池1本で5時間光る!
昇圧回路の最大電流が130mAと少ないので、輝度が必要な時は単4電池2本の直結バージョンがおすすめ。


光るネクタイ!


材料は、テープ状のWS2812Bから18コ、昇圧回路、8ピンICソケット、単4電池ケース、スライドスイッチ、マイコンLPC810、配線ワイヤー・抵抗の切れ端少々


WS2812BのDI側にはんだをもっておき、DIに抵抗などの切れ端をはんだづけ
8ピンICソケットの1,4,6,7,8番ピンをカット。2番と3番を写真のように広げる(切り欠きを上に見て、右上から時計回りに1〜8番)


GNDと2番、5Vに3番をはんだづけ。


裏面、5番に切れ端に、2番3番に触れないようにつないで、はんだづけ。余った分はカット。


ホットボンドで覆っておく。


表側もホットボンドで固める。


スライドスイッチを昇圧回路のG,EN,I側に差し込み、90度曲げて、はんだづけ。


出っ張った部分はカット。


昇圧回路のGとOに線材ワイヤーをはんだづけ。


電池ケース、+側に昇圧回路のIを差し込み、ホットボンドで固定。


はんだづけして、カット。


ホットボンドでさらに固定し、覆う。


WS2812B、電池ケースの長さ分両面テープをカット


WS2821B、側面に貼り付ける。


電池ケース、-側はペンチで曲げて、長すぎる分はカット。


GNDへはんだづけする。


WS2812B、5VとGNDにはんだをもっておき、線材にも予備はんだ。


WS2812Bの5VとGNDに届くちょうどいい長さにカット、ワイヤーストリッパーで被覆をむく。


5VとGNDへはんだづけ。


LPC810へ、WS2812B制御プログラムを書き込み、8ピンICソケットに差し込む(切り欠きで向きをあわせる)

七色に輝くプログラムを「LPC810をあやつろう」や「書き込み基板 writer810」を使って、IchigoJamから書き込む。

5 V=30 10 POKE#700,0,4,0,16,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,251,255,239,47,72,223,33,1,96,47,72,1,104,3,34,210,67,17,64,1,96,45,72,45,73,1,96,45,72,12,33,1,96,1,36,36,7,V,38,48,2 20 POKE#746,32,96,0,32,0,33,2,70,2,42,0,221,3,58,0,35,1,37,40,66,0,208,51,70,91,26,0,43,0,218,91,66,163,84,127,180,0,240,21,248,0,240,51,248,127,188,33,74,163,24,31,70,3,63,3,58,1,59,1,63,61,120 30 POKE#784,29,112,1,58,249,209,1,49,177,66,221,209,1,48,6,40,217,209,215,231,24,72,33,70,21,76,4,34,128,37,11,120,34,96,43,66,8,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,96,7,224,0,0,34,96,0,0,0,0,0,0 40 POKE#7C6,0,0,0,0,0,0,109,8,233,209,73,28,1,56,228,209,112,71,7,79,1,63,253,209,112,71,128,128,4,64,16,0,4,64,192,193,0,64,191,255,255,255,0,32,0,160,0,35,0,160,128,26,6,0,96,0,0,0 50 A=#700:L=256:LRUN1 SAVE0 NEW 1 'LPC810 Writer 110 UART3,2:OUT2,0:OUT1,0:WAIT9:OUT1,1 120 CLS:?"?":GSB@R 130 ?"Synchronized":GSB@R 140 ?12000:?:GSB@R:GSB@R 150 ?"A 0":GSB@R:GSB@R 160 ?"U 23130":GSB@R 170 ?"W 268436096 ";L:GSB@R:UART1,2:LC0,-1:FORI=0TOL-1:?CHR$(PEEK(A+I));:NEXT:UART3,2:LC0,6:? 180 ?"P 0 0":GSB@R 190 ?"E 0 0":GSB@R 200 ?"P 0 0":GSB@R 210 ?"C 0 268436096 256":GSB@R 220 OUT2,1:OUT1,0:OUT1,1:LED1:END 300 @R:K=INKEY():IF K=13 K=INKEY():WAIT9:RTN ELSE CONT SAVE1 LRUN0

輝度V(=30)は、最大255だが、今回の回路では電流が不足するので、控えめな輝度設定。
マシン語のプログラムを変更し、同時に光らせなければ、最大輝度は上げられる。


ネクタイ色に合うマスキングテープで固定。下側は固定しても良いが、ネクタイを通すところで安定する。


こうしてできた、光るネクタイ軽量版。


光るカチューシャにも!

キラキラしている、福井駅前スケート場「ハピリンク」に、キラキラ装備で臨むのも楽しいかも!?
銀盤カラフル 光の空間&風船「インスタ映え」 ハピリンク(福井新聞ONLINE) - Yahoo!ニュース

links
- 光るネクタイ用テープLED | Hana道場ストア

MacでiPhoneアプリを開発したり、MSXでポケコン用のゲームを開発したりすることをクロス開発といいます。

IchigoJamで、かわいい32bitマイコンLPC810用のプログラムを開発するミニマムクロス開発を手軽に体験してもらうためのプリント基板(PCB)を作成。


IchigoJam本体のボタンを押したら、再度書き込みするようにして、プチ量産!


LPC810をあやつろう - IchigoJamプリント」をみながら、ユニバーサル基板でまずは手作り。


ブラウザ上、無料で使えるプリント基板設計ツール「Upverter」で、新規プロジェクトを作って、SCEMATIC画面で、部品配置して、接続。 IchigoJam シールドなどの部品は登録してあるので、検索して貼り付けるだけ!


PCB LAYOUTに切り替えて、かっこいい感じに並べる。gridを50milとかにするときれいに並びます!
つなぐべき箇所が、緑の直線としてガイドされてわかりやすい。


緑のガイドにしたがって、8milの線でつなぎました。GNDは接続せずに、ベタGNDにするのもかっこいい!?(ベタGNDのやりかた

あとは、プロジェクトのページ "810writer for IchigoJam" から、"Gerber Format (RS-274X extended)" をダウンロードして、発注して待つだけ! 基板サイズは 1200mil x 1500mil なので、30.48mm x 38.10mm、お好きな色で発注可能です!

ウェアラブル業界世界最大、ウェアラブルEXPO開催。

多くの入場者で賑わうウェアラブルEXPO受付。


2011年、初の民生用メガネ型ウェアラブルデバイスとして登場した、MOVERIOと同様、シースルータイプの実用品 。 さまざまな業務で使われ始めている。


いよいよ販売始まる、両眼シースルータイプのメガネスーパー、ENHANLABO b.g. 人だかり。


こちらは工事現場などようと思われる、b.g.


とても高精細なフルHDをシースルーで実現したもの。品質的には通常のディスプレイを代替できるレベル。 机の上にモニターではなく、歯医者さんのように、楽な姿勢でアーム型のディスプレイを目の前に持ってきて作業するような姿での実現もかっこ良さそう。


ウェストユニティスブース


単眼型 ウェストユニティスの新型 InfoLinker2。こちらも画質化し、画角、バッテリーの持ちがアップ!


鯖江のメガネメーカー、ボストンクラブによる neoplug と、ウェストユニティスのコラボ、メガネ!


アルプス電子 x neoplug、ハプティックリアクタ搭載の振動するメガネ!


脳波測定器の組み合わせ。ウェアラブルレディなメガネ、開発用途に好評、もっと手頃なバージョンも!?


neoplug 対応の赤いメガネ、試着。カジュアルな、メガネ型ウェアラブルデバイスづくり、ぜひチャレンジしましょう!

こちら自作ウェアラブル、光るネクタイの改良版。

ネクタイ裏に仕込む、ウェアラブルファッション。白シャツが間接照明的に機能する。


LPC810用8ピンICソケットのVCC/GND/PIO0_2以外をカット。DIN側にまずはVCCとGNDを広げてはんだづけ。


DINからPIO0_2には抵抗の切れ端などではんだづけ。


ホットボンドで固めておくと安心!


コンパクトな仕上がり。


骨伝導マスクというかなりサイバーなウェアラブル展示、発見。 ヘッドセットとマイクと空気清浄機能が付いたマスク型ガジェットとは斬新! 内側から光るマスクなんてのもおもしろいかも。

創ろう、着るIT!

東京で開催する、さばえIT推進フォーラム、電脳メガネサミット2019、2.22開催です!
メガネ型ウェアラブルとオープンデータがある未来を見据え、今できることとは!?

国立高専、正式には「独立行政法人 国立高等専門学校機構 〇〇工業高等専門学校」と長い。
高専は日本独自の教育カリキュラム、「高専はKOSENであり訳さない!」と、高専機構理事長の谷口さん。


高専の英語サイトは「KOSEN」とシンプルで目立つ表記。


こちら、高専の日本語サイト、文字が長い。

もし改名すれば各学校は相当シンプルになる。例えば福井高専で、次のように12文字短縮。
独立行政法人国立高等専門学校機構 福井工業高等専門学校
独立行政法人高専機構 福井高専

ちなみに、福井高専のドメインは、fukui-nct。 以前の英語名称 Fukui National Collage of Technology だった頃の名残り。
現在書いてある訳語「National Institue of Technology」は、国立の研究所?と誤解を生むだけなので削除したい。


初開催となる、高専の未来を語る会、食事しながらざっくばらんスタイルで開催(写真ぶれでスミマセン)
高専機構谷口理事長による高専への熱い思いからスタート!


高専OB、10名による、3分間で自己紹介と高専の未来への提言!


高専機構と高専卒起業家。
未来の高専に関して、提案、提言は多岐に渡った、2時間半にも及んだ、愛あるディスカッション。
次回も楽しみです!

1つ、追加の提言「高専の目的を変更」
現行の目的:深く専門の学芸を教授し、職業に必要な能力を育成する
新しい目的:深く専門の学芸を教授し、複雑な世界に対処できる能力を育成する

専門性はそのままに、国際バカロレアのエッセンスを混ぜ、社会との関わりを強化しました。
職業という言葉は従事するイメージが強く、起業家、イノベーターに結びつかないので廃止希望。
教育の基本理念(目的・方針)に関する教育基本法の規定の概要
* 過去、改正の動きもあったようです


生きる力は、変化できる力、創り出す力。高専起業家OBパワー発揮していきましょう!
(*OBは、OB。boyの意味は忘れます)


この日のお昼は、専攻科インターン成果発表会のため石川工業高等専門学科へ。
この看板をパッと見て高専だと認識できる人は少ないと思ったほうがいいでしょう。
ここも「石川高専」とすれば、わかりやすいし目に付きやすい。


高校で必修となるGIS、高専ではもう一歩先いっておくべきですね。
jigインターン生、ナリによるSPARQL入門はこちら。
SPARQL初心者の学習日誌 :: 開発者サイト|オープンデータプラットフォーム


福井県内のIT企業と、地域ICTクラブで開催した、越前がにロボコンを大会前からサポートしてくれました!
高専生の実践力と、地域とIT力が共にアップするローカルロボコン、ローカルプロコン、ぜひ広めたい。

約3ヶ月という長期インターンを専攻科(5年卒業後の2年間課程)にて実施している石川高専。インターンについて発表する学生は皆、社会との関わりで学ぶ大切さを感じている様子。 まさに体験に勝る学習なし。できるだけ早いタイミングでのインターンと、その単位認定化を進めると、一層強い高専生になるでしょう。

地域のおもしろい企業の社会人による招待講義や、地元自治体へのヒアリングなど、実社会との接点を増やし、成果を埋めば、知名度問題、やる気問題共に解決!


女の子向けのプログラミングを実践する、神戸高専出身、激レア高専卒女性起業家、幸田フミさんとも再会!
児童養護施設の女児のために、働く女性ができること。:FUMITALK – FUMIKODA JOURNAL【フミコダ】
高専生の女性割合は20%。海外での工学部では女子の方が多いなど、性差の問題ではなく、日本の問題。

理系思考と女子比率が低い、日本の特徴は、小中学校の先生が理系ではないことがきっと原因。
日本の女子高生はなぜ理系になりたがらないのか | 舞田敏彦のデータで読み解くDUALな疑問 | 日経DUAL、)

理系、かつ、自分に近いお兄さんお姉さんから学ぶプログラミングによるインパクトは大きく、文系男子偏重を正す大きなチャンス!
総務省|若年層に対するプログラミング教育の普及推進事業|「IchigoJamでものづくり」~地域人材を活かして行うもの作りを通した科学技術体感型授業~」福井高専学生が小学生向けメンターに
高専生が伝える小学生プログラミング at スゴイ津幡町まちなか科学館、高専生先生の意気込み&感想動画 / KidsVenture x 石川高専

こちら本日の装備品、コンパクトにまとめた光るネクタイ LPC810 x 単4電池バージョン。

七色に輝くネクタイのプログラム(LPC810をあやつろうを使って、IchigoJamから書き込む)

10 POKE#700,0,4,0,16,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,251,255,239,47,72,223,33,1,96,47,72,1,104,3,34,210,67,17,64,1,96,45,72,45,73,1,96,45,72,12,33,1,96,1,36,36,7,50,38,48,2 20 POKE#746,32,96,0,32,0,33,2,70,2,42,0,221,3,58,0,35,1,37,40,66,0,208,51,70,91,26,0,43,0,218,91,66,163,84,127,180,0,240,21,248,0,240,51,248,127,188,33,74,163,24,31,70,3,63,3,58,1,59,1,63,61,120 30 POKE#784,29,112,1,58,249,209,1,49,177,66,221,209,1,48,6,40,217,209,215,231,24,72,33,70,21,76,4,34,128,37,11,120,34,96,43,66,8,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,96,7,224,0,0,34,96,0,0,0,0,0,0 40 POKE#7C6,0,0,0,0,0,0,109,8,233,209,73,28,1,56,228,209,112,71,7,79,1,63,253,209,112,71,128,128,4,64,16,0,4,64,192,193,0,64,191,255,255,255,0,32,0,160,0,35,0,160,128,26,6,0,96,0,0,0 50 A=#700:L=256:LRUN1 SAVE0 NEW 1 'LPC810 Writer 110 UART3,2:OUT2,0:OUT1,0:WAIT9:OUT1,1 120 CLS:?"?":GSB@R 130 ?"Synchronized":GSB@R 140 ?12000:?:GSB@R:GSB@R 150 ?"A 0":GSB@R:GSB@R 160 ?"U 23130":GSB@R 170 ?"W 268436096 ";L:GSB@R:UART1,2:LC0,-1:FORI=0TOL-1:?CHR$(PEEK(A+I));:NEXT:UART3,2:LC0,6:? 180 ?"P 0 0":GSB@R 190 ?"E 0 0":GSB@R 200 ?"P 0 0":GSB@R 210 ?"C 0 268436096 256":GSB@R 220 OUT2,1:OUT1,0:OUT1,1:LED1:END 300 @R:K=INKEY():IF K=13 K=INKEY():WAIT9:RTN ELSE CONT SAVE1 LRUN0

続いて、電子工作。

単4電池2本の電池ボックスをDOUT側5VとGNDへ。
制御用マイコン LPC810 のVCC、GND、PIO0_2 を、DIN側の5V、GND、DINにはんだづけ!

asm15、Armマシン語のプログラムはこちら
(IchigoJamで慣れた小中学生向け「やさしいArmマシン語入門」を読むと解読できます)

DATA L #10000400 ' stack DATA L #21 ' entry point DATA L 0, 0, 0, 0, 0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=#DF 'SWM, GPIO, I2C:off, FLASH, FLASHREG, RAM, ROM, SYS [R0]L=R1 R0=[@FLASHCFG]L R1=[R0]L R2=3 ' flash no wait: set 0b00 R2=~R2 R1&=R2 [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 @MAIN R4=1 R4=R4<<28 ' = RAM #10000000 R6=50 ' =V R0=R6<<8 [R4]L=R0 ' HUE ' R0, R1: loop ver ' R4 : ram ' R6 : V ' R2, R3, R5, R7 : temp @HUE ' R4 color address R0=0 ' 0 to 5, =I @HUE_LOOP1 R1=0 ' to T, =H @HUE_LOOP2 R2=R0 R2-2 IF LE GOTO @HUE_SKIP1 ' if A>2 R2-=3 @HUE_SKIP1 R3=0 R5=1 R0&R5 IF 0 GOTO @HUE_SKIP2 R3=R6 ' =V @HUE_SKIP2 R3=R3-R1 R3-0 IF GE GOTO @HUE_SKIP3 R3=-R3 @HUE_SKIP3 [R4+R2]=R3 PUSH {R0-R6} CALL @WS2812B CALL @WAIT POP {R0-R6} @SLIDE_DATA R2=[@LED_N]L R3=R4+R2 R7=R3 R7-=3 R2-=3 @SLIDE_DATA_LOOP R3-=1 R7-=1 R5=[R7] [R3]=R5 R2-=1 IF !0 GOTO @SLIDE_DATA_LOOP R1+=1 R1-R6 ' =V IF !0 GOTO @HUE_LOOP2 R0+=1 R0-6 IF !0 GOTO @HUE_LOOP1 GOTO @HUE 'WS2812B driver 'param ' R4 - address (G, R, B) 'use ' R0 - data count (ex WS2812B x 3) == 3 ' R1 - address (G, R, B) ' R2 - OUT value ' R3 - data value ' R4 - GPIO address ' R5 - bit count @WS2812B R0=[@LED_N]L R1=R4 R4=[@GPIO_NOT0]L R2=`100 ' PIO0_2 @LOOP_DATA R5=#80 R3=[R1] @LOOP_BIT [R4]L=R2 R3&R5 IF 0 GOTO @ZERO NOP NOP NOP NOP NOP NOP NOP [R4]L=R2 GOTO @JOIN @ZERO NOP [R4]L=R2 NOP NOP NOP NOP NOP NOP @JOIN R5=R5>>1 IF !0 GOTO @LOOP_BIT R1=R1+1 '+6clock R0-=1 IF !0 GOTO @LOOP_DATA RET 'WAIT 'use ' R7 - wait count @WAIT R7=[@WAIT_N]L R7-=1 'wait R7*3+1 clock IF !0 GOTO -1 RET ' init @SYSAHBCLKCTRL DATA L #40048080 @FLASHCFG DATA L #40040010 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_NOT0 DATA L #A0002300 ' WS2812B @WAIT_N DATA L 400000 @LED_N DATA L 32*3 ' length of WS2812B * 3

高専機構も後援、PCNこどもプロコン2018
過去最多作品数を集め、現在審査に入っています。
高専賞の受賞者には、宮崎県、都城高専が主管校となる高専プロコン30周年記念大会への招待が決定!
第30回都城大会(2019) 2019/10/13-14」
お楽しみに!

鯖江のものづくり友達、きものサロンまるよさんからスズムシがうるさすぎると相談あり。 一定間隔でスズムシの鳴き声が聞こえる、スズムシボックスを秋の店内にあると風流でいいのだけれど、ちょっと鳴く間隔が短すぎて、鬱陶しい、と。

9V電池を電源に、鳴き声電子回路が入っていることがわかったので、できるだけ非破壊による改造を試みる。 電源ケーブルを延長する形にして、トランジスタによる電子スイッチと、マイコンによる時間制御、マイコン用の3.3V生成が必要。


ブレッドボードで定期的に電源がONになる動作を確かめて、何秒間隔がいいか実験する
IchigoJam BASICなら、確認簡単!

10 OUT 1 20 WAIT 22*60 30 OUT 0 40 WAIT 180*60 50 GOTO 10

ONにしてから鳴くまでに間があるので、22秒間ONにすることで、ちょうど1ループ鳴く。そのままONにしておくと10秒たらずで何度も鳴くのは確かに鳴きすぎ。 ひとまず、3分間待って、再度鳴くようにしてみると、風流さが出た。


このままでは、箱に納まらないので、回路図を書いて、ユニバーサル基板にはんだづけする。 トランジスタを2段、3.3Vレギュレーター1つとIC3つ。どのようにつなぐかがパズルのようで楽しい。 Upverterなどで基板を起こしてもいいが、時間とお金が少々かかる。


IchigoJamよりコンパクトな、IchigoDakeでも、まだ納まらなかったのと、ちょっとオーバースペックなのも気になるので、LPC810へ移植する。 22秒間 ON にして、180秒は低電力モード(deep power down)で OFF にするプログラムを、IchigoJamからLPC810へ書き込む。

10 POKE#700,0,4,0,16,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,251,255,239,22,72,23,73,1,96,23,72,1,104,3,34,210,67,17,64,1,96,21,72,21,73,1,96,21,72,12,33,1,96,21,77,4,38,46,96,25,72 20 POKE#746,23,74,1,58,253,209,1,56,250,209,17,72,3,33,1,96,20,48,12,33,1,96,15,72,1,104,4,34,17,67,1,96,14,72,1,104,1,34,17,67,1,96,12,48,13,73,14,74,81,67,1,96,48,191,128,128,4,64,217,2,0,0,16,0 30 POKE#786,4,64,192,193,0,64,191,255,255,255,0,32,0,160,0,35,0,160,0,0,2,64,16,237,0,224,0,128,0,64,0,9,61,0,16,39,0,0,22,0,0,0,180,0,0,0 50 A=#700:L=180 100 UART3,2:OUT2,0:OUT1,0:WAIT9:OUT1,1:CLS:?"?":GSB@R 110 ?"Synchronized":GSB@R:?12000:?:GSB@R:GSB@R:?"A 0":GSB@R:GSB@R 120 ?"U 23130":GSB@R:?"W 268436096 ";L:GSB@R:UART1,2:LC0,-1:FORI=0TOL-1:?CHR$(PEEK(A+I));:NEXT:UART3,2:LC0,6:? 130 ?"P 0 0":GSB@R:?"E 0 0":GSB@R:?"P 0 0":GSB@R 140 ?"C 0 268436096 256":GSB@R:OUT2,1:OUT1,0:OUT1,1:END 150 @R:K=INKEY():IF K=13 K=INKEY():WAIT9:RTN ELSE CONT

180byteのArmマシン語をLPC810へ、書き込む(接続方法は、IchigoJamプリント参照)。30行の末尾、22と180の部分は、ONとOFFの秒数、好きな値に変えられる。(Armマシン語のソースプログラムは本記事末尾)


LPC810をIchigoDakeとピン配置をあわせるボードをはんだづけしてつくる。(LPC810の2番ピンWAKEUPをプルアップしないと、低電力モードが動作しないので注意!)


納まった!


元の箱に戻って、3分おきに鳴るように改造されたスズムシボックスのできあがり!

(LPC810を定期実行させる、Armマシン語 in asm15

DATA L #10000400 ' stack top DATA L #21 ' entry point DATA L 0,0,0,0,0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=[@USE_DEVICE]L [R0]L=R1 R0=[@FLASHCFG]L R1=[R0]L R2=3 ' flash no wait: set 0b00 R2=~R2 R1&=R2 [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 ' LED R5=[@GPIO_NOT0]L R6=`0100 [R5]L=R6 ' WAIT (WAIT_CNT * ON_SEC) R0=[@ON_SEC]L R2=[@WAIT_CNT]L R2-=1 IF !0 GOTO -1 R0-=1 IF !0 GOTO -4 ' init deep power down R0=[@PMU_PCON]L R1=3 ' PM = deep powerdown [R0]L=R1 R0+=#14 'PMU_DPDCTRL R1=`1100 ' enable 10kHz [R0]L=R1 ' deep power down R0=[@SCB_SCR]L R1=[R0]L R2=4 ' deep sleep R1|=R2 [R0]L=R1 ' wake up timer R0=[@WKT_CTRL]L R1=[R0]L R2=1 ' use 10kHz R1|=R2 [R0]L=R1 R0+=#C ' WKT_COUNT (SLEEP_CNT * OFF_SEC) R1=[@SLEEP_CNT]L R2=[@OFF_SEC]L R1*=R2 [R0]L=R1 WFI @SYSAHBCLKCTRL DATA L #40048080 @USE_DEVICE 'WKT, SCT:off, SWT, GPIO, I2C:off, FLASH, FLASHREG, RAM:off, ROM:off, SYS DATA L `1011011001 @FLASHCFG DATA L #40040010 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_NOT0 DATA L #A0002300 @PMU_PCON DATA L #40020000 @SCB_SCR DATA L #E000ED10 @WKT_CTRL DATA L #40008000 @WAIT_CNT DATA L 4000000 ' 1sec (12MHz) @SLEEP_CNT DATA L 10000 ' 1sec (10kHz) @ON_SEC DATA L 22 ' (sec) @OFF_SEC DATA L 180 ' (sec)

2017年のクリスマス時に作ったものをベースに小変更。
@ON_SEC、@OFF_SEC 部分が、ONにする時間と、OFFにする時間。IchigoJam BASICからPOKE文でも簡単に変更可能。

毎年恒例、鯖江の忘年会用の500円のクリスマスプレゼント、今年の和紙あかり!
色相をゆったりと変えながらほのかに光るオブジェです。

水風船、木工用ボンド、ハケを購入、300円(今回使用した和紙はもらいもの)
マイコンLPC810 75円電池ケース110円、WS2812B 12円、と合わせて500円!

和紙をいい感じにちぎります。

和紙を水に浸し、水で溶いた木工用ボンドをハケで塗って、膨らませた水風船に貼っていきます。

和紙で包んだ水風船。

ドライヤーでざっと乾かしますが、時間がかかりそうだったので吊り下げて放置。

乾いたら風船を割って、ハサミで形を整えてできあがり!

LPC810の開発は、IchigoJam上で可能!
マシン語をIchigoJamからLPC810へシリアルケーブルと制御信号を使って書き込み!
(接続方法、LPC810 - IchigoJamプリント

こちら書き込みプログラムと、WS2812Bで色相環のマシン語プログラム(ソースは末尾に)

1 'LPC810 Writer 110 UART3,2:OUT2,0:OUT1,0:WAIT9:OUT1,1 120 CLS:?"?":GSB@R 130 ?"Synchronized":GSB@R 140 ?12000:?:GSB@R:GSB@R 150 ?"A 0":GSB@R:GSB@R 160 ?"U 23130":GSB@R 170 ?"W 268436096 ";L:GSB@R:UART1,2:LC0,-1:FORI=0TOL-1:?CHR$(PEEK(A+I));:NEXT:UART3,2:LC0,6:? 180 ?"P 0 0":GSB@R 190 ?"E 0 0":GSB@R 200 ?"P 0 0":GSB@R 210 ?"C 0 268436096 256":GSB@R 220 OUT2,1:OUT1,0:OUT1,1:END 300 @R:K=INKEY():IF K=13 K=INKEY():WAIT9:RTN ELSE CONT SAVE1 NEW 10 POKE#700,0,4,0,16,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,251,255,239,41,72,223,33,1,96,41,72,1,104,3,34,210,67,17,64,1,96,39,72,39,73,1,96,39,72,12,33,1,96,40,76,10,38,48,2,32,96 20 POKE#746,0,32,0,33,2,70,2,42,0,221,3,58,0,35,1,37,40,66,0,208,51,70,91,26,0,43,0,218,91,66,163,84,127,180,0,240,10,248,0,240,40,248,127,188,1,49,177,66,232,209,1,48,6,40,228,209,226,231,3,32 30 POKE#782,23,73,21,76,4,34,128,37,11,120,34,96,43,66,8,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,96,7,224,0,0,34,96,0,0,0,0,0,0,0,0,0,0,0,0,109,8,233,209,73,28,1,56,228,209,112,71,8,79,1,63,253,209,112,71 40 POKE#7C8,128,128,4,64,16,0,4,64,192,193,0,64,191,255,255,255,0,32,0,160,0,35,0,160,0,0,0,16,128,26,6,0 50 A=#700:L=232:LRUN1 SAVE2 RUN

LPC810へ書き込んだら、電源をつなぐだけで光ります!

立てて使いたいので、単4電池2本のスイッチ付き電池ケースの線を出す方向を変更。

照明を正面にすることにこだわった結果、マイコンLPC810がちょっとはみ出しました。

できあがり!

とっておいたちょうど箱でパッケージング!

ラベルプリンターで製品名を貼り付け。リボンは自分では結べませんでした。

喜んでくれて何より!
和紙とのりの工作、簡単で良い仕上がりになるのでおすすめ!
中身のライト、IchigoJam制御にしたり、100均で買ってきてもいいですね。


IchigoJamからLPC810へ書き込んでいる様子

WS2812Bを色相環制御するLPC810用 Armマシン語プログラム、asm15表記
@MAIN内のR6が最大輝度、@WAIT_Nが色を切り替える待ち時間
色相環アルゴリズムは、PCN秋葉原 Assemblage 発のBASICプログラムから移植

DATA L #10000400 ' stack DATA L #21 ' entry point DATA L 0, 0, 0, 0, 0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=#DF 'SWM, GPIO, I2C:off, FLASH, FLASHREG, RAM, ROM, SYS [R0]L=R1 R0=[@FLASHCFG]L R1=[R0]L R2=3 ' flash no wait: set 0b00 R2=~R2 R1&=R2 [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 @MAIN R4=[@RAM]L R6=10 ' =V R0=R6<<8 [R4]L=R0 ' HUE @HUE ' R4 color address R0=0 ' 0 to 5, =I @HUE_LOOP1 R1=0 ' to T, =H @HUE_LOOP2 R2=R0 R2-2 IF LE GOTO @HUE_SKIP1 ' if A>2 R2-=3 @HUE_SKIP1 R3=0 R5=1 R0&R5 IF 0 GOTO @HUE_SKIP2 R3=R6 ' =T @HUE_SKIP2 R3=R3-R1 R3-0 IF GE GOTO @HUE_SKIP3 R3=-R3 @HUE_SKIP3 [R4+R2]=R3 PUSH {R0-R6} CALL @WS2812B CALL @WAIT POP {R0-R6} R1+=1 R1-R6 ' =T IF !0 GOTO @HUE_LOOP2 R0+=1 R0-6 IF !0 GOTO @HUE_LOOP1 GOTO @HUE 'WS2812B x1 driver 'param ' R1 - address (G, R, B) 'use ' R0 - data count (ex WS2812B x 3) == 3 ' R2 - OUT value ' R3 - data value ' R4 - GPIO address ' R5 - bit count @WS2812B R0=3 R1=[@RAM]L R4=[@GPIO_NOT0]L R2=`100 ' PIO0_2 @LOOP_DATA R5=#80 R3=[R1] @LOOP_BIT [R4]L=R2 R3&R5 IF 0 GOTO @ZERO NOP NOP NOP NOP NOP NOP NOP [R4]L=R2 GOTO @JOIN @ZERO NOP [R4]L=R2 NOP NOP NOP NOP NOP NOP @JOIN R5=R5>>1 IF !0 GOTO @LOOP_BIT R1=R1+1 '+6clock R0-=1 IF !0 GOTO @LOOP_DATA RET 'WAIT 'use ' R7 - wait count @WAIT R7=[@WAIT_N]L R7-=1 'wait R7*3+1 clock IF !0 GOTO -1 RET ' init @SYSAHBCLKCTRL DATA L #40048080 @FLASHCFG DATA L #40040010 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_NOT0 DATA L #A0002300 ' WS2812B @RAM DATA L #10000000 @WAIT_N DATA L 400000

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS