2018年12月27日木曜日

PCB注文、そして到着

ESP32に基づいた3Dプリンターコントロールボードを制作中です。

そして、先日(19日)にそのPCBをネットで注文しました。

なんと、昨日(26日)到着。
1週間。本当に速い!

一応、まだプロトタイプです。
意見があればこちらへどうぞ!

ちなみに、今はまだはんだ付けできません。
MOSFET待ちです。

2018年12月17日月曜日

ESP32の3Dプリンター制御基板

ESP32を使って3Dプリンターを制御

一応、デザインができました。
ここで共有しています。
初めて自分でPCBを設計しましたので、ぜひコメントをいただきたいです。
のちにPCBを注文し、部品をはんだ付けして動かしてみます。

設計の時、考慮したのが:
・100mm x 100mmで収めること(激安PCB制作サービスを使うため)
・ESP32のみ使用、拡張のためのICは使用しないこと
・24Vでも使えること
・ヒートベッド電流20Aを理論上できること(でも、実際に20Aを使うのがとても怖いです)
・別のユーザーの要望として、TMC2130やTMC2208というステッパーモータードライバも使用できること
・ピンが足りないため、普通のLCD2004やLCD12864が使えない代わり、AUX1コネクターを通じてMKS TFT32などが使用できること

シフトレジスタ(SN74HC595など)を使ってESP32のピンを増やすという動きもありますが、それはこのプロジェクトのパートツーに回します。
まずはベーシックのものを。

意見、コメント、指摘などがあれば、こちらかこのブログのコメント機能を使ってください。

2018年12月8日土曜日

ESP32を使って3Dプリンターを制御

最近の電子工作テーマ:
「ESP32を使用した3Dプリンター制御基板の設計・製作」

緑の基板は、Morpheusというオープンソース設計です。
もともとSTM32F103のBluePillという開発板のために設計したものですが、
ESP32の開発板につないで使用してみました。
そして、その設計に問題ないと確認し、
今度はちゃんとしたPCB基板を設計して、
SMD部品で3Dプリンター制御基板を作ります。

2018年11月29日木曜日

中国のどこが脅威?

先日、駐日オーストラリア大使館へ行きました。
大使館主催のセミナー「Australia and Japan: Partners in a Time of Regional Turbulence」へ出席しました。
米中対立、中国勢力拡大という世の中、中型勢力であるオーストラリアと日本はどのように協力していこうかについて講話とディスカッションが行われました。

話が聞けて、勉強にもなったし、更に疑問もわきました。
これから少しずつ整理して、文に残します。

まず、対中戦略が必要という話がありました。
でも、私は思います。
なぜ、対中戦略が必要なのか?
中国が強くなることによって、何が嫌ですか?
ただ感情的に「中国が嫌い」「中国が嫌だ」ではなく、客観的に分析して、中国の台頭は日本にとってどのような「負」を与えるのか?
ダイバーシティを尊重するというなら、ただ「やり方が違う」「考えが違う」だけでは相手を否定するのができません。
中国は何に対し脅威を与えるのか?なぜ脅威と思うのか?まずは中国のどこが嫌なのかから考えましょう。
根本的なことがちゃんと整理しないと、その上に立たれた戦略はガタガタです。

2018年11月28日水曜日

ESP32の3Dプリンターコントロールボード、設計中!

ESP32はとても人気のあるマイクロコントローラーです。
32ビットで、WiFi機能も内蔵されて、IoT開発にはとても便利です。
M5Stackのような商品で売られて、開発のスピードアップにも貢献しています。
私もちょっとESP32のファンです。

で、ESP32を使って3Dプリンターを制御できるのか、ずっと思いました。
このようなコントロールボードは市場に出ていませんが、
GitHubを探したら、実はプロトタイプがあります。
simon-joetさんのESP32Controllerです。
そして、ファームウェアとして、
luc-githubさんのMarlinのブランチ(eps32-webui)があります。
それはMarlinESP3Dを合体したものです。
ウェブブラウザからESP32に指示を出し、3Dプリンターを制御します。

この二人の設計やコードに基づいて、私は今自分で基盤を設計しています。
成功したら、ここで報告します!

2018年11月20日火曜日

またも改ざん

日産のゴーン会長が逮捕されました。
有価証券報告書に記載されて数字に誤りがあるとのこと。
いわば、改ざん。

またかよ。
なぜ?
本当にばれないと思ったのか?
そして、いくら「権限が集中していた」とはいえ、このような文書を世の中に公開するというのは、会社にとって大事なこと、大イベントのわけです。
取締役会がなにも知らないとは言いにくいでしょう。
文書を確認してから公開するのが当たり前のこと。
取締役会が確認せず公開するなら、取締役会が監督責任を欠けているとしか思いません。
もし取締役会が確認したが、公開する前にだれかがそれを改ざんしていたら、それはまた会社のガバナンスの問題です。内部統制がしっかりなさっていないとのことです。
いずれにしても、この会社は深刻な問題があります。
ゴーン会長とケリー代表取締役だけをクビにするだけではなく、
今の取締役会を一新して再建する必要があると思います。
だって、このような問題は個人の問題ではありません。
経営側の問題です。
リーダーとして、責任をとる必要があります。

だって、リーダーは自分の部下の行動にも責任があります。
取締役会は会社の最高意思決定機関であり、
会社の最高意思決定機関として、会社に起きたことについても責任があるでしょう。
日産が取る行動、期待に応えられますかね?

2018年11月10日土曜日

横浜ガジェットまつりに行きました

今日、横浜ガジェットまつりに行きました。
富士ゼロックスR&Dスクエアの会場を回りましたが、ちょっと規模が小さすぎて、すぐ帰りました。


ま、一応、みんな何を作っているのか、見るのができて、少しは勉強になりました。

2018年11月9日金曜日

メーカーから直接注文してみました

自作3Dプリンターコントロールボードを作ろうとしています。
そのため、あるDC降圧ICが必要です。
いつもアマゾン、AliExpressとeBayで部品を調達していますが、見つからないため、今回はメーカーから直接注文してみました。
すると、驚きました。
火曜日に発注した部品が、木曜日の午後に届きました。
しかも海外発送、送料無料。
これからはこのメーカーの部品が必要な時、直接メーカーから注文します。

2018年11月4日日曜日

消費税増税、本当に必要か?

来年、消費税が10%になります。
でも、景気がよくなければ、増税しない。

増税しないということは、別に増税しなくてもよいということです。
ならば、なぜ増税するのか?
本当に増税が必要であれば、景気が悪くても増税する。

どっちなのか?
本当に必要なのか?それとも、必要ではないのか?
必要ではないなら、なぜ増税するのか?
筋の通った理由を示してほしいです。

2018年10月16日火曜日

外食?テイクアウト?

8%?10%?
条件付き消費税は、店を困らせるほかない。
政府はただ精勤を集めるだけです。
でも、その計算は、事業者が行うものです。
はっきりして線引きがないと、とてもやりづらいです。

あげるかあげないか。
決断しろ!と言いたい。
この中途半端なやり方は、臆病者のやり方です。
あげたいけど、国民が納得しないかもしれない。
だから、あいまいなあげ方をとる。
あいまいさで国民がはっきり全体像をつかまなければ、否定もできません。
中国語では「混水摸魚」という言葉があります。
「どさくさに紛れて不正な利益を占めること」という意味です。
まさかこれでしょう。

はっきりした政策を作ってほしいです。
人を困らせないように。

不公平な入試

入試において、不公平な扱い。
明らかに日本国憲法に反しています。
現役、一浪、二浪、それは個人的な理由も様々あり、実際の能力と関係ありません。
そもそも入試は個人の能力を測るものです。
入試以外の要因を使って差別的な扱いをすること自体が、違法でしょう。
このような学校は、徹底的に罰を与えないと、日本は「差別しない国」と言えません。

みんなが見ています。
正しいことをしてほしいです。
正しいことをしましょう。

2018年10月2日火曜日

常識外れ、のど飴議員

のど飴で退席を命じた熊本市議会。海外メディアが批判「融通が利かない社会」

のど飴がダメなら、
議会中、居眠りする者は議員失格でしょう。

のど飴をなめることが「品位を尊重」しないとすれば、
会議中に寝ることが、「品位を尊重」すると言えません。
議会を軽蔑するしか思いません。

会社の会議で居眠りをするなら、
「お前はもう会社に来なくていい」と言われるでしょう。
のど飴をなめる人より、まずは居眠りをする失礼な人を退場させましょう!

2018年9月27日木曜日

割り込みでSTM32F103をスリープから起こす

前回、「STM32F103C8T6をスリープ状態にする」について書きました。

今回、一定の時間から起きる状態に加えて、外部割込みからも起きるようにしたくて、色々試しました。
やはりstm32sleepライブラリーはうまくできず、前回のtomtorさんのコードをもとにテストプログラムをつくりました。
外部割込みを使うため、attachInterruptという関数を使います。
attachInterrupt(BOARD_BUTTON_PIN, action, CHANGE);
BOARD_BUTTON_PINにスイッチをつけ、そのスイッチに変化があれば割込みが発生します。
そして、起きたら、何を実行するかは新たにactionという関数を設けました。
tomtorさんのAlarmFunctionという関数は、スリープから起きた際、クロックを再設定する操作があります。そのままactionの中に使います。
void action()
{
  AlarmFunction ();
  if (state == LOW) state = HIGH;
  else state = LOW;
}
ここはただLEDの点灯状態を反対にするだけ。

全部のコードは以下の通りです。

#include <RTClock.h>
#include <libmaple/pwr.h>
#include <libmaple/scb.h>

#define LED  PC13
#define BOARD_BUTTON_PIN PB0

// Define the Base address of the RTC registers (battery backed up CMOS Ram), so we can use them for config of touch screen or whatever.
// See http://stm32duino.com/viewtopic.php?f=15&t=132&hilit=rtc&start=40 for a more details about the RTC NVRam
// 10x 16 bit registers are available on the STM32F103CXXX more on the higher density device.
#define BKP_REG_BASE   ((uint32_t *)(0x40006C00 + 0x04))

// Setup RTClock for sleep
RTClock rt(RTCSEL_LSI, 39); // 1 milli second alarm
long int alarmDelay = 10;

void storeBR(int i, uint32_t v) {
  BKP_REG_BASE[2*i]= (v << 16);
  BKP_REG_BASE[2*i+1]= (v & 0xFFFF);
}

uint32_t readBR(int i) {
  return ((BKP_REG_BASE[2*i] & 0xFFFF) >> 16) | (BKP_REG_BASE[2*i+1] & 0xFFFF);
}

void sleepMode(bool deepSleepFlag) { 
  // Clear PDDS and LPDS bits
  PWR_BASE->CR &= PWR_CR_LPDS | PWR_CR_PDDS | PWR_CR_CWUF;

  // Set PDDS and LPDS bits for standby mode, and set Clear WUF flag (required per datasheet):
  PWR_BASE->CR |= PWR_CR_CWUF;
  // Enable wakeup pin bit.
  PWR_BASE->CR |=  PWR_CSR_EWUP;
  
  SCB_BASE->SCR |= SCB_SCR_SLEEPDEEP;

  // System Control Register Bits. See...
  // http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/Cihhjgdh.html
  if (deepSleepFlag) {
    // Set Power down deepsleep bit.
    PWR_BASE->CR |= PWR_CR_PDDS;
    // Unset Low-power deepsleep.
    PWR_BASE->CR &= ~PWR_CR_LPDS;
  } else {
    adc_disable(ADC1);
    adc_disable(ADC2);
#if STM32_HAVE_DAC
    dac_disable_channel(DAC, 1);
    dac_disable_channel(DAC, 2);
#endif
    //  Unset Power down deepsleep bit.
    PWR_BASE->CR &= ~PWR_CR_PDDS;
    // set Low-power deepsleep.
    PWR_BASE->CR |= PWR_CR_LPDS;
  }

  // Now go into stop mode, wake up on interrupt
  asm("    wfi");

  // Clear SLEEPDEEP bit so we can use SLEEP mode
  SCB_BASE->SCR &= ~SCB_SCR_SLEEPDEEP;
}

uint32 sleepTime;

void AlarmFunction () {
  // We always wake up with the 8Mhz HSI clock!
  // So adjust the clock if needed...

#if F_CPU == 8000000UL
  // nothing to do, using about 12 mA
#elif F_CPU == 16000000UL
  rcc_clk_init(RCC_CLKSRC_HSI, RCC_PLLSRC_HSE , RCC_PLLMUL_2);
#elif F_CPU == 48000000UL
  rcc_clk_init(RCC_CLKSRC_HSI, RCC_PLLSRC_HSE , RCC_PLLMUL_6);
#elif F_CPU == 72000000UL
  rcc_clk_init(RCC_CLKSRC_HSI, RCC_PLLSRC_HSE , RCC_PLLMUL_9);   // 72MHz  => 48 mA  -- datasheet value           => between 40 and 41mA
#else
#error "Unknown F_CPU!?"
#endif
  
  extern volatile uint32 systick_uptime_millis;
  systick_uptime_millis+= sleepTime;
}

void mdelay(int n, bool mode= false) {
  sleepTime= n;
  time_t nextAlarm = (rt.getTime() + n); // Calculate from time now.
  rt.createAlarm(&AlarmFunction, nextAlarm);
  sleepMode(mode);
}


#define   RCC_CFGR_HPRE_DIV1   0x00000000U
#define   RCC_CFGR_HPRE_DIV2   0x00000080U
#define   RCC_CFGR_HPRE_DIV4   0x00000090U
#define   RCC_CFGR_HPRE_DIV8   0x000000A0U
#define   RCC_CFGR_HPRE_DIV16   0x000000B0U
#define   RCC_CFGR_HPRE_DIV64   0x000000C0U
#define   RCC_CFGR_HPRE_DIV128   0x000000D0U
#define   RCC_CFGR_HPRE_DIV256   0x000000E0U
#define   RCC_CFGR_HPRE_DIV512   0x000000F0U


void msleep(uint32_t ms) {
  uint32_t start= rt.getTime();
  
  while (rt.getTime() - start < ms) {
    asm("    wfi");
  }
}

int state = LOW;

void setup() {
  pinMode(LED,OUTPUT);
  pinMode(BOARD_BUTTON_PIN, INPUT_PULLUP);
}

void loop() { 
  digitalWrite(LED,state);
  delay(60);  
  attachInterrupt(BOARD_BUTTON_PIN, action, CHANGE);
  mdelay(alarmDelay * 1000);
}  

void action()
{
  AlarmFunction ();
  if (state == LOW) state = HIGH;
  else state = LOW;
}


2018年9月24日月曜日

バーチャルアシスタントを使いませんか?

外国人向けのバーチャルアシスタントサービスを発見。
ま、私は自分でできるので、必要ないと思いますが、あまり日本語のできない知り合いに紹介できるではないかと思います。
例えば、先日、元同僚(今、ドローン会社を経営)が最近、日本市場に進出しようとしています。よく日本にくるので、このサービスがあれば便利でしょう。

Virtual Assist Japan

フリートライアルもあります。
一時間だけですけど。

今度、とりあえず使ってみようかな?😅

2018年9月23日日曜日

激辛ゲット

これ、知っていますか?
ハバネロという唐辛子の仲間です。
とてもとても辛いです。
醤油につけるため、輪切りしただけで、指先がピリピリ。
切った後、目を触ったら大変!

ハバネロと出会ったのが、書道の先生のところに行った時です。
ピーマンと思って植えた先生が、「これ、とても辛いよ」と言われました。
辛いものが好きな私、「大丈夫、食べます」と言って、持って帰りました。
ピーマン代わりに肉と一緒に炒め、いよいよ食事。
一口食べたら、「ああああああああ!辛!」
えええ?なんで?
もう一口。
辛!
これ、ダメだ、食べれません。辛すぎです。
でも、食べないともったいないから、何とか肉だけ食べました。
以降、そのまま食べることなく、醤油漬けにしています。
辛さ抜群、とてもおいしい。
辛い物好きな方にお勧めです。
でも、そのまま食べるのが勇気が必要です😉

2018年9月9日日曜日

自作簡易フィラメントランアウトセンサー

フィラメントランアウトセンサーとは、3Dプリンターが印刷中、フィラメントがなくなる時、知らせてくれるセンサーとのことです。
基本的に、二種類があります。
ファムウェアと連動して、フィラメントがなくなると印刷を止め、フィラメントの交換を待つタイプ。これはファムウェアの設定が必要です。
スタンドアロン型のフィラメントランアウトセンサーは、フィラメントがなくなると光や音などの警告を出し、知らせます。印刷はそのまま、ユーザーが反応しないとプリント中のものに支障が出ます。でも、ファムウェアの設定を必要しないため、わりと簡単に設置できます。

今回はこのスタンドアロン型のセンサーをDIYしました。
マイクロスイッチでフィラメントの有無を感知し、フィラメントがなくなるとアクティブブザーが鳴ります。それだけで。
アクティブブザーの音が結構うるさいので、フィラメントを交換している間にその音を一時的に中断するために、横の小さいスライドスイッチを付けました。
これをEnder-3という3Dプリンターに使用する予定です!

2018年8月21日火曜日

日本へ帰ってきました

日本に帰ってきました。
そして、仕事、やること、たまっています!

でも、この短い一時帰国で、
色々な面でインスピレーションをいただきました。
これらをなんとか形に変えたいです。

でも、まずは少しずつ目の前のことを片付けなきゃ。

2018年8月10日金曜日

ボクシングVS医大

ボクシング連盟、会長が元暴力団と関係ありでスポーツ庁長官から辞任求められる。

東京医大、男女平等法に反しても、行政から厳しい批判がない。

その違いはなんでしょう?

ダイバーシティ、平等、インクルーシブな社会を作る。
それを言いながら、こういう行動は、どうでしょう。
温度差が感じます。

もっとしっかり男女差別を取り組むべきだと、私が思います。
言うだけではなく、実際の行動で。

一時帰国、南の国へ

夏休みということで、一時的に帰国しました。
南の国ですが、日本の猛暑と比べて、涼しく感じます。

今日は久しぶりに太極拳の先生と会いました。
元気そうで安心しました。
先生も高齢で、一人であっちこっち行って教えているのが少し心配です。
そして、何よりもうれしかったのが、套路と推手のあと、先生に「悪くないね」と言われたことです。
ちゃんと一人でもレベルを維持しています。✌

2018年8月6日月曜日

73年、忘れないように

73年が経ちました。
また同じようなことが起きないよう、
忘れないようにしましょう。

2018年8月5日日曜日

Maker Faire Tokyo 2018、行ってきました!

昨日、Maker Faire Tokyo 2018へ行ってきました。

天気が暑くて大変でしたが、なんとか東京ビッグサイトまで行けました。

思ったより、人が多く、ちょっとびっくりしました。


入口付近は、まず子供狙い。
結構子供・教育向けなものが展示されました。

少し中へ進むと、最近勉強している3Dプリンターが出てきました。
有名なUltimakerとPrusa Research、そしてDIYのRepRap。

Prusa Researchは最新のマルチカラ―装置の紹介。
同時に5色(原料)が使えます。

そして、電子工作でお世話になっている秋月電子様とスイッチサイエンス様。


スイッチサイエンス様のブースでは、話題のM5Stackも展示され、
M5Stack社の社長、Jimmy Lai様もいました。
私が恥ずかしくて話せませんでしたが。😅

更に進むと、個人や団体のものが展示されました。
例えば、レゴを使って電子工作のボックスを作る人。

民間のグループで、衛星を作っている人たち。
願いも書きました。その願いを衛生に積んで、落ちてくる時流れ星になって叶えるように、宜しくお願い致します。

そして、個人的に懐かしいものもありました。
学生の時、マイクロマウスをやっていました。
今のマイクロマウスがかなり小さくなりましたが。

M5Stackを使っていろいろ作っている方も多くいました。
一人は、スルーホールのプロトタイプ基板を自作したそうです。
これ、本当に欲しいです!

UFOキャッチャーまで自作?!?!

実はちゃんと見ていませんでした。
駆け足の感じで、会場を回りましたが、それでも2時間強かかりました。
ちゃんと見ていたら、おそらく閉場までいたでしょう。

でも、とてもよかったです。
皆さんがどんなことをやっているのか、参考になりました。
自分で新しいアイディアを生み出そうという意欲も湧いてきました。
来年、展示する側に参加できるようにしたいです!💪

2018年8月2日木曜日

東京医科大、入学差別

この時代になって、まだ男女差別か。
信じられません。
一所懸命勉強してきた女子が夢の医師になれない。
その理由は自分の能力ではなく、
大学の一方的な差別。
それは、違法行為です。
国はこのことをしっかり裁かないと、
差別は絶えません。

国が裁かないなら、個人(グループ?)でこの差別行為について大学を訴え、
そして国の不作為について、国を訴えろ。
何人の人生を影響したのか?
何人の夢を壊したのか?
しっかり責任をとらせるべきです。

Maker Faire Tokyo 2018、今週末開催

8月4、5日、東京ビッグサイトにてMaker Faire Tokyo 2018が開催されます。
皆さんが何を作っているのか、
見てきます!
お楽しみ!😉😍

2018年7月26日木曜日

STM32F103C8T6をスリープ状態にする

最近、天気が暑くて、「外の気温、何度かな?」と思う時が多くなりました。
そこで、外の気温を測って、室内に表示する「無線温度計」を自分で作ってみました。

STM32F103C8T6の開発ボードを使いましたが、一番の問題は、
「マイクロコントローラーをスリープ状態にする」ことです。

色々試してみました。
このstm32sleepというライブラリーも使ってみましたが、
どうもうまく行けませんでした。
そのライブラリーのもとをみて、更に探し、
tomtorさんのコードを見つかりました。
このコードの関数を使って、何とかできました!

使い方は簡単です。

Arduinoコードのloop()の一番最後のところに、
mdelay(1000);
を追加するだけで、1000ミリ秒をスリープさせます。
あ、Arduino IDEに使えるSTM32 Coreが必要ですけどね。
使っているのが、rogerclarkmelbourneさんのArduino_STM32です。
ちなみに、STMicroelectronics社の正式なものもあります。

ここから、tomtorさんのコードの抜粋です。

#include <libmaple/pwr.h>
#include <libmaple/scb.h>

#include <RTClock.h>

// Define the Base address of the RTC registers (battery backed up CMOS Ram), so we can use them for config of touch screen or whatever.
// See http://stm32duino.com/viewtopic.php?f=15&t=132&hilit=rtc&start=40 for a more details about the RTC NVRam
// 10x 16 bit registers are available on the STM32F103CXXX more on the higher density device.
#define BKP_REG_BASE   ((uint32_t *)(0x40006C00 + 0x04))

RTClock rt(RTCSEL_LSI, 39); // 1 milli second alarm

void storeBR(int i, uint32_t v) {
  BKP_REG_BASE[2*i]= (v << 16);
  BKP_REG_BASE[2*i+1]= (v & 0xFFFF);
}

uint32_t readBR(int i) {
  return ((BKP_REG_BASE[2*i] & 0xFFFF) >> 16) | (BKP_REG_BASE[2*i+1] & 0xFFFF);
}

void sleepMode(bool deepSleepFlag)
{ 
  // Clear PDDS and LPDS bits
  PWR_BASE->CR &= PWR_CR_LPDS | PWR_CR_PDDS | PWR_CR_CWUF;

  // Set PDDS and LPDS bits for standby mode, and set Clear WUF flag (required per datasheet):
  PWR_BASE->CR |= PWR_CR_CWUF;
  // Enable wakeup pin bit.
  PWR_BASE->CR |=  PWR_CSR_EWUP;
  
  SCB_BASE->SCR |= SCB_SCR_SLEEPDEEP;

  // System Control Register Bits. See...
  // http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0497a/Cihhjgdh.html
  if (deepSleepFlag) {
    // Set Power down deepsleep bit.
    PWR_BASE->CR |= PWR_CR_PDDS;
    // Unset Low-power deepsleep.
    PWR_BASE->CR &= ~PWR_CR_LPDS;
  } else {
    adc_disable(ADC1);
    adc_disable(ADC2);
#if STM32_HAVE_DAC
    dac_disable_channel(DAC, 1);
    dac_disable_channel(DAC, 2);
#endif
    //  Unset Power down deepsleep bit.
    PWR_BASE->CR &= ~PWR_CR_PDDS;
    // set Low-power deepsleep.
    PWR_BASE->CR |= PWR_CR_LPDS;
  }

  // Now go into stop mode, wake up on interrupt
  asm("    wfi");

  // Clear SLEEPDEEP bit so we can use SLEEP mode
  SCB_BASE->SCR &= ~SCB_SCR_SLEEPDEEP;
}

uint32 sleepTime;

void AlarmFunction () {
  // We always wake up with the 8Mhz HSI clock!
  // So adjust the clock if needed...

#if F_CPU == 8000000UL
  // nothing to do, using about 12 mA
#elif F_CPU == 16000000UL
  rcc_clk_init(RCC_CLKSRC_HSI, RCC_PLLSRC_HSE , RCC_PLLMUL_2);
#elif F_CPU == 48000000UL
  rcc_clk_init(RCC_CLKSRC_HSI, RCC_PLLSRC_HSE , RCC_PLLMUL_6);
#elif F_CPU == 72000000UL
  rcc_clk_init(RCC_CLKSRC_HSI, RCC_PLLSRC_HSE , RCC_PLLMUL_9);   // 72MHz  => 48 mA  -- datasheet value           => between 40 and 41mA
#else
#error "Unknown F_CPU!?"
#endif
  
  extern volatile uint32 systick_uptime_millis;
  systick_uptime_millis+= sleepTime;
}

void mdelay(int n, bool mode= false)
{
  sleepTime= n;
  time_t nextAlarm = (rt.getTime() + n); // Calculate from time now.
  rt.createAlarm(&AlarmFunction, nextAlarm);
  sleepMode(mode);
}


#define   RCC_CFGR_HPRE_DIV1   0x00000000U
#define   RCC_CFGR_HPRE_DIV2   0x00000080U
#define   RCC_CFGR_HPRE_DIV4   0x00000090U
#define   RCC_CFGR_HPRE_DIV8   0x000000A0U
#define   RCC_CFGR_HPRE_DIV16   0x000000B0U
#define   RCC_CFGR_HPRE_DIV64   0x000000C0U
#define   RCC_CFGR_HPRE_DIV128   0x000000D0U
#define   RCC_CFGR_HPRE_DIV256   0x000000E0U
#define   RCC_CFGR_HPRE_DIV512   0x000000F0U


void msleep(uint32_t ms)
{
  uint32_t start= rt.getTime();
  
  while (rt.getTime() - start < ms) {
    asm("    wfi");
  }
}

2018年7月24日火曜日

イージス・アショア、増額!?

イージス・アショア
2基2500億円 2~3割増額

予算を組んでいる防衛省、何やってんのと言いたいです。
ありえません。
予算を立てた時の見積が甘かったのか、
それとも見落としたものがあったのか?
なんか原因があってこのような問題が起きます。

私も昔、予算にかかる仕事をしました。
だから言えます。
あり得ません。
税金を扱う公務員として、あとになって「予算が足りない」というものは罪とも言えます。
最初にコストが低いと思って、契約を交わし、
後からコストが増えたと言って。。。
実際のコストに対して意思決定していないから、
最終値段が適切なのか、受容できるのか、
誰が判断するの?

だれがミスを起こしたのか?
防衛省?ロッキード・マーチン?
防衛省の職員なら、重大過失で処分すべき。
ロッキードなら、契約を見直すべき。
簡単に容認するのがダメです。

ちなみに、ロッキードの顧問に、元航空自衛隊の空将がいます。
これが意思決定に影響を与えたら、また重大な事件になります。。。

2018年7月19日木曜日

DIY火炎センサーを購入

先日、Aliexpressから、DIY火炎センサーキットを購入しました。

取説など、何もないまま届きました。
一個ずつの部品なので、基盤を見れば何はどこに入るのがわかりますが、
抵抗は五つもあるので、どれがどことわかりません。
サイトを見ると、
R1: 10K
R2: 10K~30K
R3: 1K
R4: 10K
R5: 1K

とりあえずはんだ付けして、
こうなりました。

電源(5V)をつなげば、ブザーが鳴りました。
「起動しました」との印?
真ん中のボタンを押せば音は消えます。
でも、ストーブに火をつけても、音はならないから、
本当に正常に動いているかどうか、わかりません。
ま、今度時間あるとき、また色々試します。

購入したい人は:
https://www.aliexpress.com/item/DC-5V-Infrared-Flame-Sensor-Module-Suite-Warehouse-IR-Alarm-Kit-Electronic-DIY-Kits-Flame-Detection/32832557194.html

2018年7月13日金曜日

MPU9250付のM5Stack Grayを紹介

M5Stack Grayは先日紹介したM5Stack Basic CoreのV2です。

見た目は同じ、ただ色が灰色になっただけ。
中身もほぼ一緒ですが、
GrayはMPU9250モーションセンサーがついています。
後はBasicと同じです。

ちなみに、LoRAモジュールはこんな感じです。




最近はDRV8825ステッパードライバー(x3)のモジュールも出したみたいです。


2018年7月12日木曜日

ESP32 DevKitCクローン

今日はこのESP32の開発ボードを紹介します。
これは、一般的なESP32 DevKitCの中国クローンです。
一般的なESP32モジュールESP-WROOM-32が載っていて、
プラス4Mbのフラッシュメモリもあります。
ESP32の全てのIOピンにアクセスでき、
USB-to-serialのICもあり、USBでPCとつながり、Arduino IDEを使ってプログラムできます。

ESP32についての日本語情報は、ここから入手できます。

プログラムは、
ESP-IDF
Arduino-ESP32
MicroPython
で作れます。

ESP-IDFはESP32の機能を最大限活用できますが、
C/C++に慣れていない方にとってはちょっと難しいです。
Arduino-ESP32なら、Arduinoの開発環境でプログラム作れます。
開発は少ししやすくなります。
MicroPythonはPython言語の実装、
より「ハイレベル」のプログラミング言語で開発ができます。
でも、RAMが少ないと、ちょっと制限されている感じがします。
普通のESP32モジュールは320KbのRAMしかありません。
MicroPythonをもっと活用したいなら、PSRAM付のモジュールを使いましょう。

2018年7月11日水曜日

M5Stack Basic Coreを紹介

中国のスタートアップM5Stack社が出した初代ESP32製品がこのM5Stack Basic Coreです。
色は黒。

このようなケースで来ました。

簡単な取説書も入っています。

機能として、ESP32マイクロコントローラーに、
2インチTFT
1Wスピーカー
microSDカードリーダー
150mAhバッテリー
2x15のIOピン
Groveコネクター
3つのユーザボタン
がついています。ESP32はWiFiとBluetooth機能がついています。
基本的なArduinoスケッチもGitHubから入手できます。
https://github.com/m5stack/M5Stack
M5Stack用ライブラリーへのリンクも載っています。

Arduino IDEにESP32の設定が既に完了している方なら、そのまま使えます。
ボードマネージャーからM5Stackを選べば大丈夫です。

ESP32を使ってIoT開発を行う方なら、とても便利なものです。
TFTがありますから、PCなくても文字・絵の出力ができます。
microSDカードへの読み書きもでき、データの保存に困りません。
そして、バッテリーが付いていて、持ち運びやすいです。
基本的な入力としてボタンが使えます。
本当に便利です。

そして、色々な機能モジュールも別売りで、
自由に拡張できます。
例えば、LoRAを試したい時はLoRAモジュールを購入、
GPS機能が必要ならGPSモジュールを購入。

自分の試作を作るためのPCB(Prototypeモジュール)もあります。

購入を考えているかたは、スイッチサイエンスから購入できます。
macsbug様が色々作っているみたいです。試作品やスケッチを見るとかなり面白そうです。
一応、私もGPSモジュールを使って、自宅までの直線距離を分かるようなスケッチも試してみました。

M5Stack社が結構頻繁にM5Stack用の新モジュールを出しています。
公式SNSから新商品や開発中のものについての情報が入手できます。
M5Stack社のFacebookページ
M5Stack社のTwitter

2018年7月4日水曜日

M5StackのESP32カメラモジュール

M5Stack社が出しているESP32カメラモジュールを紹介します。

個人的に、ESP32を使って、カメラの画像をネットでストリーミングする仕組みをずっと勉強していました。
でも、なぜかうまく行きませんでした。
参考サイトはこちらです。
https://github.com/igrr/esp32-cam-demo
https://github.com/bitluni/ESP32CameraI2S

だから、このESP32カメラモジュールが出たとき、私は結構興味がありました。
すぐに購入しました。
表はOV2640カメラ。
裏はESP32やUSB関連など。
ファームウェア、ソースコードなどはこちらです。
https://github.com/m5stack/esp32-cam-demo

中身を見ると、igrr様のものを完コピーして、ただピンを変えただけです。
自分で基盤を作って、igrr様のファームウェアを焼けば、
同じでしょう。
でも、違います。
私は、何回も基盤を作り、igrr様のファームウェアを焼きましたが、
なぜうまく映りません。
でも、このESP32カメラモジュールを使うと、一発できました。
ま、自分のはんだ付けスキルの問題かもしれません。😅

だから、今度はちゃんとPCBを設計して、注文して挑戦します。
自分でPCBや基盤が作れる方なら、別に購入しなくてもいいと思います。
でも、「はんだ付け面倒くさいな」「小さいフットプリントがほしい」と思う方、これをお勧めします。
ちなみに、日本までの送料を入れて値段が約USD14なので、
そんなに高くないのです。

もう一つ買おうかな。。。😀

追記(2019年1月8日):
ESP32の新しいカメラモジュールがあります。
https://maplerain78.blogspot.com/2019/01/esp32.html

2018年6月28日木曜日

WiFi付きマイクロコントローラーESP32

最近、ESP32というWiFi付きマイコンが個人的にブームです。
中国のEspressifという会社が開発・製造している32ビットのマイコンで、
WiFi機能もありますので、
この一つのマイコンだけでも簡単なHTTPサーバーが実現できます。


でも、単にマイコンだけではなかなか使いにくいです。
実際のところ、いろんなところからESP32の開発ボードが出されています。
例えば、LOLIN32やEspruinoなど。OLED付のモデルもあります。












詳しい情報は:esp.net

開発環境も進化しています。
もともとはEspressifから出されたCの開発フレームワークのみでしたが、
今はArduino IDEでもプログラミングできるようになっています。
https://github.com/espressif/arduino-esp32
それによって、開発もかなり楽になりました。

8ビットのArduino UNOより性能がよく、
値段も¥1,000以内で買えます。
実は結構人気です。
今度は実際に使っている開発ボードを紹介します!✌

2018年6月17日日曜日

言うのが簡単、実行で見せよ

「できる」「やる」と言うのが簡単です。
でも、その人の能力、器は実際にどのぐらいなのか?
実行からみるしかない。
いわば、言うだけではなく、実行で見せる。

「できる」「やる」
口ばかりはやめましょう。
自らの行動で人を説得しましょう。

2018年6月12日火曜日

会談成功?

日本に対し関税引き上げ。
カナダに対し関税引き上げ。
北朝鮮に対し褒め言葉。

いくら中がよくても、トランプ氏は勝手に行動する。
今日笑っても、
明日は対立。
これはトランプ氏です。

このような世の中に生活する私たち、
どうなるでしょう。

2018年6月11日月曜日

トランプ氏交渉術、米朝首脳会談での効果は?

米朝首脳会談。明日の日本時間午前10時(シンガポール現地時間9時)。
歴史的な瞬間。
でも、果たして効果は?期待できるのでしょうか?

元FBIのコミー長官は、自分の本で、
「トランプ氏はマフィアボスに似ている」と暗示しました。
トランプ氏を理解して交渉するには、
マフィアボスの考えを理解する必要があります。
部下には強く見せる、
でも他のボスとはお互いの行動を調整、lose-loseにならないよう。
メキシコの壁、貿易関税、
アメリカ国内でトランプ氏を強く見せるための手段です。
それを公に否定しなければ、裏で交渉して何とかできる。
要は、言っていることとやっていることが一致しなくても、いい。
というやり方。
外見がよければいい。
中身はどうでもいい。
トランプ氏の「交渉術」です。

このような交渉術は、
明日の会談で通じるのかな?
私は疑問を抱えます。

2018年6月5日火曜日

さよなら蚊!

気温も上がってきて、そろそろ蚊も増えるでしょう。
そのため、自作「蚊ゼッパー」を準備しました。
とても簡単です。
手動のゼッパーを解体して、
電源のところにスイッチ付きUSBコードをつなぎます。
電気部分を100均で買った木箱の中、
網(2枚、正と負)をグルーガンで貼り、
完成!

威力は結構あります。
音も結構大きいです。
今日から試運転!

2018年6月4日月曜日

梅収穫!

先日、書道の先生のところへ行きました。
梅がなっていて、採ってきました。
 一本の木から、約2キロ。
 洗って、そして1キロずつに分けました。
ついに。。。瓶入り!
飲むのがお楽しみ!

2018年5月25日金曜日

会談中止

一人の判断で、地域を不安にさせる。
これは。。。信じられません。
急に一方的に「会談中止」と言い出して、
平和にチャンスを与えないしか見えない。
というか、おそらく北朝鮮はこのように、
会談中止について宣伝するでしょう。

「主孰有道」、正義はどちらにあるか?
このように一方的に行動をとると、
今後、強硬な行動をとろうとしても、
周りの賛成や支援は少ないでしょう。

このような人が大国の大統領って、
世界はどうなるでしょう?
不安と怒りばかり。

『ソロ』公開、日本は一ヶ月後

今日はスターウォーズ新作『ソロ』の公開日です。
あ、日本ではなく、アメリカで。
日本での公開日は約一ヶ月後の6月29日です。
なぜ一ヶ月後なのか、おそらく字幕の翻訳と吹き替え作業が間に合わないからと思います。

SWファンとして、一ヶ月は大きいです。
一ヶ月もあれば、SWファンがYouTubeでいろいろ詳細を議論し、内容がばれます。😢
でも、そういう議論を聞けば、
逆に映画を見る時、どこを注目すればいいのかがわかります。

でも、やはり同時公開がほしかったです。

2018年5月24日木曜日

日大より政府に目を向けてくれ

確かに人にケガをさせるのがよくない。
でも、国民の税金を扱う政府の改ざん・隠蔽問題はもっと重要でしょう。

テレビのニュースを見ると、
傷害事件の報道ばかり。
森友、加計の事件についての報道はわずか。
真相を追求するなら、
森友、加計の真相を追求してほしい。
だって、傷害事件の真相は、警察が追求するから。
役割分担して、真実を明らかにしてほしい。

2018年5月22日火曜日

新しい開発板、ESP-32Fキットを購入

果云科技という中国メーカーのESP-32F開発キットを購入しました。
Image result for esp-32f kit
Image result for esp-32f kit
0.96インチOLEDバージョンや1.44インチTFTバージョンもあります。
M5Stackのぱくり版みたいのものです。
でも、M5Stackより大きいし、ケースもありません。
そして、このキットに関する情報がとても少ないのです。
英語のサイトはなし、日本語のサイトももちろんありません。
見つけたのが中国語のサイトに、
ESP-32F関連ソフトやマニュアルのダウンロードサイトです。

幸い、中国語がわかります。
そして、Arduino IDEにESP-32Fを追加した時、
自分で苦労した分、みんなが同じようにならないため、
ここで簡単に手順を紹介します。

まず、ESP-32Fのマニュアルやソフトは
https://pan.baidu.com/s/1ycfadOAvoBZxL1R_L1MY-A
からダウンロードできます。中国語ですけどね。
暗号やパスワードに聞かれたら、bwleを入力してください。

そこのArduino ESP32というフォルダから、
arduino-esp32.rar
というファイルをダウンロードします。

次に、Arduinoのhardware/espressif/esp32にboards.txtというファイルに、
以下のものを追加します。
ーー追加開始ーー
esp-32f.name=ESP-32F

esp-32f.upload.tool=esptool
esp-32f.upload.maximum_size=1310720
esp-32f.upload.maximum_data_size=294912
esp-32f.upload.wait_for_upload_port=true

esp-32f.serial.disableDTR=true
esp-32f.serial.disableRTS=true

esp-32f.build.mcu=esp32
esp-32f.build.core=esp32
esp-32f.build.variant=esp-32f
esp-32f.build.board=ESP-32F

esp-32f.build.f_cpu=240000000L
esp-32f.build.flash_mode=dio
esp-32f.build.flash_size=4MB
esp-32f.build.boot=bootloader_esp32f
esp-32f.build.partitions=default

esp-32f.menu.FlashFreq.80=80MHz
esp-32f.menu.FlashFreq.80.build.flash_freq=80m
esp-32f.menu.FlashFreq.40=40MHz
esp-32f.menu.FlashFreq.40.build.flash_freq=40m

esp-32f.menu.UploadSpeed.921600=921600
esp-32f.menu.UploadSpeed.921600.upload.speed=921600
esp-32f.menu.UploadSpeed.115200=115200
esp-32f.menu.UploadSpeed.115200.upload.speed=115200
esp-32f.menu.UploadSpeed.256000.windows=256000
esp-32f.menu.UploadSpeed.256000.upload.speed=256000
esp-32f.menu.UploadSpeed.230400.windows.upload.speed=256000
esp-32f.menu.UploadSpeed.230400=230400
esp-32f.menu.UploadSpeed.230400.upload.speed=230400
esp-32f.menu.UploadSpeed.460800.linux=460800
esp-32f.menu.UploadSpeed.460800.macosx=460800
esp-32f.menu.UploadSpeed.460800.upload.speed=460800
esp-32f.menu.UploadSpeed.512000.windows=512000
esp-32f.menu.UploadSpeed.512000.upload.speed=512000
ーー追加終了ーー

そして、ダウンロードしたRARファイルのesp32/variantsディレクトリから、
esp-32f
というディレクトリをArduinoのhardware/espressif/esp32/variantsへコピーします。
また、ダウンロードしたRARファイルのesp32/tools/sdk/binディレクトリから、
bootloader.bin
というファイルをArduinoのhardware/espressif/esp32/tools/sdk/binへコピーし、
bootloader_bootloader_esp32f_80m.bin
に名前を変更します。

ちなみに、ダウンロードしたRARファイルのesp32/librariesディレクトリには
ESP-32F
というディレクトリがあります。
中にはESP-32F関連のexamplesがあります。
RGB LEDのスケッチやスピーカーのスケッチを試しでコンパイルして、
ESP-32Fへアップし、ちゃんと動くかどうかを確認しましょう。

この情報が役に立てればうれしいです!😊