in my 40s logo image In my 40s

featured image

PICマイコンでラーメンタイマーを製作

Created:
Lastmod:

Raspberry piを使いデータロガーを自作し、電子工作の面白さに目覚めました。Raspberry piはLinuxを立ち上げてpythonプログラムを実行するという、小型PCみたいな物でしたが、電源ONしてすぐに使えるマイコンに興味を持ち、電子工作の入門としてPICマイコンを使用したラーメンタイマー製作にチャレンジしました。

ラーメンタイマーに必要な機能

まず第一に、時間を測るタイマーが必要です。そしてスタートボタンも必要ですね。一定時間が経つとお知らせ機能も必要で、これはやり方はいろいろあると思いますが、やはり音で知らせるのがいいかなと思い、ブザーにします。また、タイマーが動作中の状態も表示したいので、これはLEDを複数並べて次々と光らせることで視覚的に表現します。動力は電池にしたく、PICマイコンを動かせ小型なコイン電池を使うことにしました。

ディスプレイに時間を表示させると、終了までの時間が分かり便利ですが、今回はまず単純なものを作り、ディスプレイは今後チャレンジしたいと思います。時間セットも汎用的に使うタイマーであれば必須ですが、今回はラーメン用、3分固定で割り切ります。

機能 機器
タイマー PICマイコン
スタートボタン オルタネイトスイッチ
タイマー完了通知 ブザー+メロディーIC
動作中通知 LED+10進カウンタIC
動力 コイン電池
電源スイッチ スタートボタン兼用
時間表示 なし
時間セット なし (3分固定)

タイマーは、有名な555ICを使うのが電子工作入門としては鉄板ですが、3分測定するだけでなく、一定時間音を鳴らして止めたい、1秒ごとにLEDを次々と光らせるために10進カウンタICへ入力したい、という機能も必要なのでPICマイコンを選定しました。まあ、NE555でLEDチカチカは既にやってみたのでPICマイコンを使ってみたい!という興味が第一です。

必要なもの

部品

上記機能を実現する機器と配線、基板、箱などのリストです。

名称 仕様 個数
PICマイコン PIC10F222-I/P 1
オルタネイトスイッチ □12mm 1
パッシブブザー φ12mm 1
三端子メロディーIC UM66T32L 1
NPNトランジスタ 2SC1815 1
LED φ3mm 10
抵抗 220Ω 1/4W 1
ICソケット 8ピン 1
ICソケット 16ピン 1
ポリウレタン銅線 0.32mm, 20m 1
電池ホルダー CR2032 1
ユニバーサル基板 9.7x8.9cm,4分割 1
支柱セット ナイロン製, M2 1
プラスチックケース 4.4cm×6.5cm×1.4cm(ダイソー) 1
プラダンの切れ端 ホームセンターで以前買ったもの 1

NPNトランジスタは、ブザーの音量を大きくするために使用しています。はじめPICマイコンの出力を直接メロディーICに入れましたが音がかなり小さかったので追加しました。

LED用の抵抗は、今回の使い方だと点灯しているLEDは常に1個だけなので、抵抗も1つでよいです。後の写真ではLEDごとに10個抵抗をつけてしまい、あとから気づきました。図は抵抗1個に直しておます。

PIC書き込みツール

PIC10F222は、秋月電子でお値段なんと40円程度と激安なのですが、書き込みツールが有料です、しかも高い!秋月電子でPickit5を購入しました。

工具

使用した主な工具は下記です。

  1. ニッパー
  2. ピンセット
  3. ワイヤーストリッパー
  4. ハンダごて
  5. 4mmスパナ
  6. カッター
  7. φ8mmポンチ

カッターとポンチはケースの穴あけ用です。カッターでの穴あけはなかなか難しく、カット面が非常に汚く残念な外観になってしまい、コンビニでプリントしたシールを貼ってごまかしました。DIYではケースが鬼門ですね。3Dプリンタが欲しい。。。

ユニバーサル基板にはんだ付け

今回、配線はポリウレタン銅線を使ってみました。はんだ付けの際に絶縁被覆を溶かすため、数秒はんだを溶かして待つ必要があるのではじめは導通不良が起きてしまいましたが、慣れると被覆を剥く必要が無く、被覆のない分線も細いので配線しやすかったです。

反面、意図しない部分の被覆を焦がして導通させていまうリスクもあり、その場合のトラブルシューティングがとても大変になるのでは、とも感じましたのでデメリットもあるかと思います。

ユニバーサル基板に機器とポリウレタン銅線をはんだ付け

基板は、上下ラインが横に、中間は縦方向に3穴が導通したブレッドボードに少し近いようなElectric Cookie製の小型基板を使いました。少しだけ配線が楽になった気がします。

写真ではごちゃごちゃしすぎてよくわからないため、次に回路図を掲載します。

回路図

回路図と言っても、図面を描けるほどの知識は無いため、fritzingで適当に配置したスケッチです。

ラーメンタイマー スケッチ

回路図はこんな感じになりました。

ラーメンタイマー 回路図

パスコンとか、トランジスタに抵抗付けたほうがいいとか、ツッコミどころはいろいろあるかと思いますが、アマチュアのDIYということでご参考程度にしていただけたらと思います。

PICプログラム

MPLABのインストールや、ブレッドボードでPickitとPICマイコンの配線をして書き込む方法あたりは省略します。取説やネットの情報で分かるかと思います。

// CONFIG
#pragma config IOSCFS = 4MHZ    // Internal Oscillator Frequency Select bit (4 MHz)
#pragma config MCPU = OFF       // Master Clear Pull-up Enable bit (Pull-up disabled)
#pragma config WDTE = OFF        // Watchdog Timer Enable bit (WDT enabled)
#pragma config CP = OFF         // Code protection bit (Code protection off)
#pragma config MCLRE = OFF      // GP3/MCLR Pin Function Select bit (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD)

#include <xc.h>
#define _XTAL_FREQ 4000000

void setup(void);

void main(void) {
    unsigned char Count = 0; // Timer0用カウンター
    
    OPTION = 0b11000111; //GPWU無効、GPPU無効、プリスケーラー256
    OSCCAL = 0;
    ADCON0bits.ANS0 = 0; // GP0をデジタル
    ADCON0bits.ANS1 = 0; // GP1をデジタル
    TRISGPIO = 0; // 0bxxxxx111 GP0-GP2までOutput

    TMR0 = 0;
    setup();
    
    while(1){
        __delay_ms(818);
        GP1 = 1;
        __delay_ms(100);
        GP1 = 0;
        Count++;
        if(Count >= 180){
            GP2 = 1;
            __delay_ms(19000);
            setup();
            Count = 0;
        }
    }
}

void setup(void){
    GP0 = 1; // RESET
    GP1 = 0; // COUNT UP
    GP2 = 0; // BUZZAR
    __delay_ms(100);
    GP0 = 0;
}

プログラムの内容ですが、__delay_ms()関数でGPIOピンをON/OFFするというだけの原始的なものです。1周期でGP1ピンON/OFFさせて10進カウンタICに入力。これがLEDを次々と点滅させていきます。180カウント(秒)したらGP2ピンを一定時間出力してメロディーICを鳴らすだけです。

プログラム上でのミリ秒はいい加減なので、実際に時計で3分測定して微調しました。TMR0というライマーレジスタを使うともっと精度が出るのでしょうか。また、より高機能のモデルでは割り込みなどを使ってタイマーカウント中に他の計算をさせるとかもできるようですが、40円で機能の少ないモデルなのであまり深追いはせず、シンプルにしました。

100円ショップのケースに収納

さて、プログラムを書き込み動作確認までできたので、最後にケースに入れて完成です。なかなかこれといったいいものが無く、ダイソーで見つけた小さなプラスチックケースに格納することにしました。

基板をケースに入れる

シンデレラフィットと言ってもいいくらいなかなかいい感じのサイズ感ですが、それでも若干隙間は空くため、家にあったプラダンを切って隙間に詰めました。

蓋を閉めて完成です!ガタガタな穴の切り口を隠すために貼ったシールがいい感じです。ラーメンのゆるキャラはGeminiに描いてもらいました。

ケースに入れて完成したラーメンタイマー

使用感

カップラーメンや袋ラーメン、そばを茹でる際に使ったところ、普通に使えています。電源ON/OFFボタンとスタートボタンを兼用しているので、電源切り忘れとかも無いですし、ONしたらすぐにタイマー開始してくれるのがRaspberry piを使うのに比べて楽でいいですね。

ファイルに保存、ネットワークを使い通信、とかなると別途機器を揃え配線、プログラム必要なのでシンプルな用途には向いているけどいろいろやりたくなってくると大変そうな感じです。PICなどのマイコン、ArduinoやESP32などのマイコンボード、PCのようなRaspberry piと用途によって使い分けが正解なのでしょう。

まとめ

PICマイコンを使ってシンプルなラーメンタイマーを作りました。こういった用途にはPICマイコンの低機能モデルで十分で、初めて使う初心者でもちゃんと完成させることができました。趣味レベルのDIYでもいろいろ作れそうな感触も得たのでこれからも広げていきたいなと思いました。

関連記事

featured image

PICマイコンでテレビのリモコンを製作

PICマイコンを使ってテレビのリモコンを製作する方法を解説します。リモコンの赤外線通信を解析し、PICマイコンで赤外線LEDを点滅させます。

featured image

FRISKケースを使ってテレビのリモコンを電子工作

FRISKケースの中にPICマイコン、赤外線LED、ボタンをはんだ付けした基板を格納しテレビのリモコンを製作しました。

featured image

Raspberry Pi Zero 2 W で格安データロガーを製作 MCP3208 MCP3304編

Raspberry Piと12bit AD MCP3208, 13bit ADC MCP3304 を使いアナログ入力データロガーを自作しました。10bit ADC MCP3008と比較し測定精度を評価します。MQTTを使い、ワイヤレスでの通信にも挑戦。

featured image

Raspberry Pi Zero 2 W とADコンバータを使って格安データロガーを作ってみた

Raspberry Piと10bit ADコンバータ MCP3008を使いアナログ入力データロガーを自作しました。