スキップしてメイン コンテンツに移動

カレンダー型のArduino互換基板を作ってみた

背景

プリント基板(PCB)で何か作れないかという話になりまして、プログラムを書き込んでArduinoとして動かせるカレンダーを作ってみることになりました。

カレンダー基板を作って動かすまでの内容を共有してみます。

Arduino互換機カレンダーの特徴的な要件

  • 日付を区切る縦線は、触れれば信号線になる線にしたい
  • 卓上カレンダーとして使えるように、めくれるようにしたい
  • ロゴを入れたい

Arduino UNOなどに使われるatmega328pを組み込み、Arduinoの互換機として動かせるようにしました。

基板を設計

atmega328p周りの回路

基板の左上にUART、右上にISP向けのピンを配置し、プログラムを書き込めるようにしました。

書き込み用のUARTとISPのピン

「日付を区切る縦線は、触れれば信号線になる線にしたい」という要件を満たすために、カレンダーの縦幅に合わせたフットプリントを作りました。

  
縦棒のフットプリント、プレビューの表と裏

「卓上カレンダーとして使えるように、めくれるようにしたい」という要件を満たすために、カレンダー用の穴のフットプリントを作り、基板に配置しました。

 
カレンダー用の穴のフットプリントとプレビュー

「ロゴを入れたい」という要件を満たすために、画像からフットプリントを作成しました。(参考: 画像から部品を作って、KiCadの基盤にオリジナルのロゴを追加する方法

 
ロゴのフットプリントとプレビュー

ということで、出来上がったPCBがこちらです。

基板の設計画面とプレビュー

黒板を連想させたくないということで、白い背景に黒文字の基板として注文することにしました。

白配色でのプレビューの表と裏

基板を注文

elecrowのPCB製造サービスで0.6mm厚の基板を注文しました。

elecrowでのPCB注文画面

部品を発注

部品はdigikeyで注文しました。

部品表はこちら: nyampass-calendar/2019_01/docs/bom.csv

届いた基板を確認

注文から約一週間後に基板が届きました。

elecrowから届いた、パック詰めされた基板

各日付とnyampassのロゴがしっかり入っています。

基板の表と裏

基板に部品を実装

DigiKeyで注文した部品を実装します。

ピンセットとクリームはんだと基板

クリームはんだと部品を載せた基板 右側のコンデンサは載せる前

以前作った温度調節できるホットプレートで基板を焼いて、クリームはんだを熔かします。

参考: 試行錯誤な日々: ホットプレートを改造してリフローマシンを作る方法

ホットプレートで焼かれている基板

クリームはんだが溶けて、部品が基板に付きました。

焼き終わった基板

プログラムを作成

基板ができたので、それで動かすプログラムを作ります。 今回はこのように動くプログラムを作ってみました。

  • D6に5Vが加わるとモードが切り替わる
  • モードは2種類
  • モードによって0.5秒か2秒間隔でD5とGNDを繰り返す

PlatformIOのプロジェクトとして書かれたプログラムのコードはこちらをご覧ください。

nyampass-calendar/main.cpp at master · nyampass/nyampass-calendar · GitHub

プログラムを書き込む

プログラムを書けたので、Arduino as ISPとして動かすArduino UNOを経由してカレンダー基板にプログラムを書き込みます。

まず、Arduino Unoを ISPバイスとして動かすために、下記のようなコマンドでプログラムを書き込みます。

mkdir arduino-isp
cd arduino-isp
pio init -b uno # Arduino Uno
cd src
wget https://raw.githubusercontent.com/arduino/Arduino/master/build/shared/examples/11.ArduinoISP/ArduinoISP/ArduinoISP.ino
cd ../
pio run -t upload
cd ../
rm -r arduino-isp

Arduino Unoにプログラムを書き込み ISP用の線を繋げていなくても書き込みは可能です

プログラムを書けたらArduino UnoのISP書き込みピンとカレンダーのISPのピンを接続し、先ほど紹介してPlatformIOのプロジェクトのディレクトリ内で下記のコマンドを実行して、プログラムを書き込みます。

pio run -t program

カレンダー基板にプログラムを書き込み

連携する装置を作成

プログラムを書き込めたら、カレンダー基板と連携する装置を作ります。 下記の部品を使って、LED点灯とスイッチ操作が出来る装置を作りました。

  • ブレッドボード
  • ジャンパワイヤ
  • ワニ口クリップ
  • LED
  • 抵抗
  • ブレッドボードDC電源基板
  • 5V DCアダプタ

LEDの点灯とスイッチ入力をするための装置

動作確認

ワニ口クリップでカレンダー基板に繋げて、電源を接続すると、LEDが点滅しました。

スイッチを押すと点滅が遅くなるので、プログラムが期待通りに動いていることも確認できました。

カレンダー基板で点滅させているLED

まとめ

カレンダー型の基板作成し、Lチカの速度をスイッチで変えられるプログラムを動かせました。

記事の内容を面白がってもらえれば嬉しいです。

それでは、メリークリスマス&良いお年を。

コメント

このブログの人気の投稿

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その2

前回の記事 に引き続きPhaser3+Typescriptを使って RPG の基礎を作っていきます。 この記事は前回の記事を呼んだ前提で説明していきますので、ぜひそちらを先に読むことをお勧めします。 また、今回の記事は前回よりも難易度と内容量が上がっていますが、記事の最後に作業後の リポジトリ のリンクがありますので、そちらを先にダウンロードしてそちらと比較しながら学習することができます。 前回まで作成した状態のプログラムが以下の リポジトリ からダウンロードできますので前回まででうまくいっていない方は参考にしてみてください。 github.com 最終目標(再掲) ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・ゲームの作り方の断片を知る ・キャラの表示できるようにする ・キャラを移動できるようにする ・当たり判定をつける ・ NPC の追加してみる ・話しかけられるようにする 開発前提(再掲) ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール(再掲) ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 当ブログ仕様の画像素材の注意点 当ブログで使用する画像素材は『 ピポヤ倉庫 』より許可なしで無償再配布・改変が認められたものを改変して作成されたものです。 中には許可なく再配布・改変してはいけない素材もインターネット上には多く存在するのでそれらを使用するときは十分に規約を呼んでから使用しましょう。 1. キャラの表示 想定画面 今回は、はじめにキャラつまり操作

M5Stackで、においセンサー(TGS2450)を使ってみる。(LCDに表示編)

今回は、においセンサー(TGS2450)から取得したデータをM5Stackの LCD にグラフ表示をしていきます。 今回主に使用したもの M5Stack 10Ω抵抗 5本 Pch  MOSFET  2SJ334(スイッチとして利用) M5StackSideBB(ブレッドボード) M5Stackのピンはそのままだと配線するとき手間がかかるかと思いますので、今回はM5StackSideBBを利用しました。 ブレッドボードも付いているので、手軽に電子工作できるので個人的にオススメです。 SideBB for M5Stack www.switch-science.com 諸注意 本ブログのプログラムはArduinoIDEまたはPlatformIOでM5Stackの開発ができる状態であること前提のものですので、各自導入をお願いします。 過去に Windows のArduinoIDEで M5Stackの開発環境を構築する記事 があるので、参考にしてください。 においセンサー(TGS2450)について 今回使用したセンサーは 秋月電子通商 で購入できます。 http://akizukidenshi.com/catalog/g/gP-00989/ akizukidenshi.com TGS2450には4つのピンがあり、使用するのはそのうちの3本でヒーターを温めるピン、センサー情報を得るピン、GNDがあります。 ここで注意したいのは、ヒーター電圧は1.6Vと記述されているのでM5Stackで利用するときは分圧して3.3Vを1.6V近くまでに降圧することをお勧めします。 TGS2450のセンサーは可変抵抗になっており、データシートには5.62kΩ〜56.2kΩの間を抵抗が変化し、においが強いとより低くなると記述されていました。 よって、センサーの値をM5Stackで取得するにはセンサー抵抗と外部に接続する任意の値の抵抗による分圧回路によって求めることができます。 TGS2450の動作方法は、250ms周期でセンサーに電圧を5ミリ秒on、245ミリ秒offの状態にしてヒーターは8ミリ秒on、242ミリ秒offにすることで値を取得します。 配線 においセンサーとM5Stackの配線 上の図が配線図です。 30Ωの抵抗は10Ωの抵抗を三つ直列に接続して作成しました。 また、上部の抵抗10Ω二

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その1

今回はPhaser3とTypescriptを使って簡単な RPG ゲームを作る方法を紹介していきます。 内容はPhaser3およびゲーム作りについての記事なので、Nodejsの周辺モジュールなどの説明は一部省いての説明になりますのでご了承ください。 またこの記事では Phaser2 ではなく Phaser3 を使用するので注意してください。 この記事は二部構成になりますので、この記事を読んだ際はぜひ次の記事も読むことをお勧めします。 最終目標 ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・開発環境を整える ・Phaser3の開発構成を知る ・スタート画面を作る ・マップ表示をさせる 開発前提 ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 1. 最低限の開発環境の準備 今回最低限の環境を整えるために、『Typescript + Phaser3』の開発テンプレートを github リポジトリ で公開しました。 以下からZIPをダウンロードするか、 git clone コマンドで各自環境に展開してみてください。 ここから先は リポジトリ のプログラムを元に説明していきます。 github.com 展開するとファイル構造は以下のようになっているかと思われます。 注: 他にもファイルやフォルダがあるかと思われますが、表記されているのは今回使うものになっています。 - src/ (これから書くプログラムの保存領域)