2024 03,28 18:42 |
|
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
|
2020 08,15 23:37 |
|
お久しぶりの投稿です。
今週は夏季連休!!ということで、昔を思い出し「夏休みの自由工作」を やってみようと思います。 ということで作成したのが、「ESPduinoを使った天気予報ガジェット」です。 完成時の表示はこちら。 OpenWeatherMapから3時間ごとの天気予報を取得し、LCD上にイラストでわかりやすく天気を表示させてみました。 アイコンだと見やすくていいですね~~ これで朝起きてすぐに今日の天気が分かります。 マイコンはAmazonで売っていたESPduino-32を利用しました。Aruduino unoと同じ形状のESP32ボードです。 これの上にTFT LCDシールドを取り付けてプログラムを制作しました。 TFT LCDシールドはAdafruit 2.8インチ TFTタッチシールドを使用しました(昔購入して引き出しにしまってあったやつ、これを使いたいがためにESPduino買ったようなもの)。 表示は10分ごとに更新がかかり、wifi経由で情報を取得します。 制作における大まかな流れを記載します。 ①天気予報情報取得 1.OpenWeatherMapからAPI Keyを取得する。 API Keyは会員登録することで取得することができます。 2.OpenWeatherMapから天気予報情報のJSONデータの取得URLを調べる。 URLが合っているかどうかはブラウザ上で確認が可能です。 例)名古屋市の3時間ごとの天気予報データ(API Keyは各自で入力する必要あり) 3.JSONデータの取得方法を調べる 便利なサイトがありました。JSONデータを入力するとデータ取得用プログラムが表示されます。 https://arduinojson.org/v6/assistant/ ②TFT LCDの制御 Arduino unoとピン配置が異なるので、LCDやSDカードのCSピン位置の設定を変更する必要があります。 ESPduinoのピン配置は基板上のシルクに記載があるので、arduinoの回路図を見比べながら調査。 ○変更前 #define TFT_DC 9 #define TFT_CS 10 #define SDCS 4 ○変更後 #define TFT_DC 13 #define TFT_CS 5 #define SDCS 17 ③LCD表示用イラストの出力 いらすとやの天気イラストを利用させていただきました。 使ったのはこちらのイラスト。 https://www.irasutoya.com/2014/08/blog-post_181.html https://www.irasutoya.com/2013/03/blog-post_3599.html この画像をダウンロードするとpng形式となるため、そのまま出力するのはちょっと面倒くさい。。。 なので、BMP形式に変換してSDカードへ保存して利用しました。 BMP形式にはwindows標準ツールのペイントを利用して変換実施。 また、左上に表示している漢字は画像として表示を行っています。漢字出力させるより簡単。 ↓こちらのデータもペイントで作成。画像サイズは80x50 全BMPファイルは24ビットビットマップ形式で保存してあります。 色データが連続して保存されているため出力も比較的簡単。 BMPファイルについての詳しい情報はこちらのページが詳しいです。 最終的に↓のような形でSDカードへ保存した。 天気予報アイコンの画像サイズは80×80 ==================== 完成時のプログラムを掲載します。 API KeyやWifi情報は各自で入力してください。 長野県長野市の3時間毎の天気情報が表示されます。 プログラム先頭ID情報を変更することで、地域の変更が可能です。 weather_LCD_ESPduino.ino ==================== ※参考にしたサイト様 https://qiita.com/marksard/items/472000594ca83b64f00c https://arduinojson.org/v6/example/generator/ http://iizukakuromaguro.sakura.ne.jp/367_unixdatetimeino/367_unixdatetimeino.html PR |
|
2019 05,26 01:35 |
|
お久しぶりの投稿です。
扁桃腺手術が終わり、元気になりました。 あとで、家族から話を聞いたところ、どうやら父親も小さい頃扁桃腺を取ったそうな。 もしかしたら遺伝なのかもしれないですね。 今回は、Arduino NANOを使ってVFD(蛍光表示管)の時計を作ろう!ということをやっていきます。 なぜ、これを作ろうとしたかというと・・・ GWに京都で「Maker Faire Kyoto」が開催され、そこへ行った際に 共立電子のブースに売ってた蛍光表示管キットを買ったのがきっかけです。 ←こちらですね。購入先URL 表示価格より結構安くなっててお買い得でした。 Arduino NANOは、Amazonで激安で売られてたパチもんを使用。 こちらです→ KKHMF Mini USB Nano V3.0 たかが数百円でこんなものが買えるなんて・・・衝撃です。 これにした理由は、会社の上司が「安い!純正品と使い勝手一緒!」と言ってたので。 とりあえず、表示機を抜きにしてブレボ&PCで動作確認を実施。 時刻の取得については、秋月電子通商にて販売中のリアルタイムクロック「RTC-8564NB」を使用。 I2Cでデータ取得、水晶内蔵、面倒な設定ほとんど無しの便利なモジュール。 ↓現状の回路図(右下の枠内は未実装です。VFDへ接続するシフトレジスタ回路) プログラムはこちらから。 現状、VFDによる表示を行っていないため、ターミナル上へ時刻表示をおこなっております。 ○入力部の説明 SW1・・・時計表示or時刻設定切り替えスイッチ(2秒長押しで切り替え) SW2・・・時刻設定時数値カウントアップ用 今回、しっかりしたプログラムをArduinoで書きましたが、ライブラリがしっかりしてて、めっちゃ簡単ですね・・・。 仕事の都合上、PICマイコンを用いることが多いのですが、PIC使いたくなくなってきちゃう。。。 Maker Faire Kyoto行ったときも、PIC使ってる人がほぼいなかったですし、時代はAVRですねぇ(´・ω・`) |
|
2014 11,21 22:29 |
|
お久しぶりの更新です。ホント久しぶりです。
最近の趣味はランニングです。上司に影響され、半年続けてます。 どうも、ゲームやる気が起きず、暇な時はよく走りに行ってます。 ・・・でも、毎日走る元気もない。 暇な時間ができるので、電子工作再開しようかな?と思いました。 というわけで、「Arduino」買ってみました。 秋月電子の「Arduino Uno Rev3」です。3000円くらい。 PICは会社で使ってるし、別のマイコン使ってみたいなと思ったのがきっかけ。 ついでに、すぐ取り掛かれるやつが欲しかったのでこれに決めました。 ホント簡単ですね(-_-;) なんかPICで苦労してることがすべて省略できるという感じ。 PICもあれはあれでいいと思うが、これはこれで・・・いいかも(ΦωΦ) 家でチョチョっとやるにはPICより簡単でいいですね~。 暇ならそのうち色々やってみたいなと思ってます。 とりあえずの目標は、グラフィック液晶使ってなんか作りたいなと。 ↓テストでLCDとSDカード |
|
2012 07,02 22:01 |
|
蒸し暑い!!蒸し暑いよ!!大事なことなので二回言いました。
愛知って蒸し暑いですね。ムシムシしてます。去年、蒸し暑さに耐え切れず購入した除湿機が本領を発揮する時が来た・・・。とはいっても洗濯物の乾燥で使ってるんですけどね。 明日、年休で何処か行こうかな~と思ってたら雨らしい。どうしようかな・・・引き篭もるか強引にでも外に出るか・・・。 --------------------- んで、本題です。 最近、仕事の疲れで帰ってから「ちょっと横になるかな~」と思ってベッドに寝るといつの間にか朝ということが増えました。 勿論蛍光灯つけっぱ。明るい中寝ると、疲れが全然取れず次の日がめちゃくちゃ辛い・・・。 そのための対策に電気付けっぱで寝てたら一定時間経過後に自動消灯するタイマーを製作することにしました。(受信機側はこちら) 名付けて「うたた寝タイマー」!!! てなわけで、前からちまちま作ってたのがつい最近完成しました。 電源はUSB供給。 使用PICはPIC16F716。 右に付いてるスライドスイッチ×2でタイマーの時間調整をしてます。(1・10・30・60分から選択可) 表面実装用LED付きタクトスイッチを2つ使用(赤と黄色)。元々透明ケースに入れる予定だったので縦向きに付いてます。 要はリモコンの送信機です。今後、何かどうかに応用できるかもなぁ・・・。 使用センサは圧力センサFSR-408と照度センサNJL7502Lの二種類。圧力センサは青色のターミナルに接続。 照度センサは周りが明るいかどうかの検出用。 圧力センサは布団の下(尻の辺り)に敷いてベッドの上に人がいるかどうかの検知に利用。 100均で買ったA4?のPPケースの上に圧力センサを貼っています。長く貼りたいので斜め貼り。(写真左) その後、ベッドと布団の間に敷けば完成。(写真右) 敷いたことによる寝る時の違和感は今のところ感じません。 ちょっとの圧力で大きく反応してくれるので寝てて反応しないことはまずないはず・・・。 回路図はこちら。 信号のデジタル化や、バースト波生成など大概の部分はハード上で行なっているのでプログラムはあまり凝ってないです。 ソースファイルはこちら。使用コンパイラはCCS-C Compilerです。 HEXファイルはこちら。 結構、リモコン送信部分のプログラムが時間かかりました。テレビリモコンと波形見比べながらちょくちょく修正して完成に至ってますので、数値関連が計算値と違う部分があります。 いつもどおり、これらの回路・プログラムの利用は全て自己責任で。 さて・・・これでうたた寝し放題だ!ベッドでちょっと休憩も怖くないぜ!! |
|
2012 04,01 01:19 |
|
最近、部屋のフローリングが痛んできたのでカーペットを購入して敷きました。
いいですね~、足の冷えが軽減されてパソコン作業が楽になりました(^^) そういや、もう4月ですね~。早い早い。 気候も暖かくなって過ごしやすくなってきました。 愛知県ってもうそろそろ桜が咲くとかどうとか。花見でもしてみようかな。 さて、本題。 今回は、C18に搭載?されているソフトウェアI2Cの動作テストを行いました。 正直使い方がよく分からない上資料も無いので前から手を付けていませんでした。 資料が無いのでどうしようかと思い・・・「自分でソースファイル全部読みゃ良いじゃんww」という結論に。 ちゃちゃっと読んでみると・・・そのまんまでしたねw I/Oポートと各種遅延時間を設定してあげたら動きました。 色々やってますけど、ちゃんと100kHz・400kHzで動いてません・・・。一応動作したので載せときます。 I/OポートからH信号を出力する際に、ポートを入力にしてH信号を出力していた方法は「こんなやり方もあるのか~」とちょっと目から鱗。 今後も利用できるよう汎用的に使えるファイル一式を作成しました。 圧縮したものがこちら。(2012年4月5日変更しました) なおテストの際、PIC18F4550を利用しました。動作クロックは48[MHz]です。 SDA = RC0 SCL = RC1 となっています。 また、今回のテストでは単バイト受信しか行なっていないので、他の関数は動作しない可能性があります。 近々修正して上げる予定ですので。 圧縮ファイル内には ・SW_I2Cフォルダ(I2C各種制御) ・sw_i2c_eep_my.h(I2CEEPROM処理) ・i2c_data.h(I2C用変数宣言) が入っています。 これをそのままメインのソースファイルがあるフォルダにコピーします。 プログラム内で #include "SW_I2C/sw_i2c_my.h" と宣言してやればSW_I2C関連の制御が一式行えます。 私が作成したSW_I2Cですが、 ①通信速度設定 ②SDA・SCLピンの設定 ③遅延時間の設定 の設定を事前にを行います。 まず、SW_I2Cフォルダ内sw_i2c.hで①と②の設定です。 ①15~17行目 使う通信速度のコメントを消して下さい。 /*使用する通信速度のコメント消去*/ //#define SPEED_100K /*100kbps*/ #define SPEED_400K /*400kbps*/ ②23~33行目 使用したいI/Oポートを記述してください。 /*DATAピン設定*/ #define DATA_LOW TRISCbits.TRISC0 = 0; // define macro for data pin output #define DATA_HI TRISCbits.TRISC0 = 1; // define macro for data pin input #define DATA_LAT LATCbits.LATC0 // define macro for data pin latch #define DATA_PIN PORTCbits.RC0 // define macro for data pin /*CLKピン設定*/ #define CLOCK_LOW TRISCbits.TRISC1 = 0; // define macro for clock pin output #define CLOCK_HI TRISCbits.TRISC1 = 1; // define macro for clock pin input #define SCLK_LAT LATCbits.LATC1 // define macro for clock pin latch #define SCLK_PIN PORTCbits.RC1 // define macro for clock pin 次に、SW_I2Cフォルダ内sw_i2c_delay.hで③の設定です。 遅延時間ですが通信速度の半周期を設定時間としています。 100[kbps]の場合、10[us] / 2 = 5[us] 400[kbps]の場合、2.5[us] / 2 = 1.25[us] が設定時間です。 sw_i2c_delay.h内には ・SWDelayI2C ・SWDelayI2C_LO ・SWDelayI2C_HI の3種類の遅延関数があります。 実際のところ、送受信時の各種処理時間によって計算と実測の値が異なってきます。 そのため、実測値を100[kbps] or 400[kbps]にするために遅延時間を短くした遅延関数を作成してあり、SW_DelayI2C_LOとSW_DelayI2C_HIがそうです。 SW_DelayI2Cは計算値そのままの遅延関数です。 別に、全て計算値でも動作はするのでそこら辺はお好みでどうぞ。 今回の動作テストでは、I2C通信のEEPROM 24LC256を利用しました。 プログラムは圧縮ファイル内のsw_i2c_eep_my.hです。 ①読み込みプログラム /*=====I2C EEPROM 読み込み=====*/ unsigned char S_EE_Read(char chip, unsigned int address){ unsigned char data; SWStartI2C(); SWWriteI2C((0xA0 | ((chip & 0x07) << 1)) & 0xFE); SWAckI2C(); SWWriteI2C(address >> 8); SWAckI2C(); SWWriteI2C(address & 0xff); SWAckI2C(); SWRestartI2C(); SWWriteI2C((0xA0 | ((chip & 0x07) << 1)) | 0x01); SWAckI2C(); data = SWReadI2C(); SWAckI2C(); SWStopI2C(); return (data); } ②書き込みプログラム /*=====I2C EEPROM 書き込み=====*/ void S_EE_Write(char chip, unsigned int address ,unsigned char data){ SWStartI2C(); SWWriteI2C((0xA0 | ((chip & 0x07) << 1)) & 0xFE); SWAckI2C(); SWWriteI2C(address >> 8); SWAckI2C(); SWWriteI2C(address & 0xff); SWAckI2C(); SWWriteI2C(data); SWAckI2C(); Delay100TCYx(75); /*wait 3ms*/ SWStopI2C(); } ※2012年4月5日更新 圧縮フォルダにi2c_data.hが入っていなかったので追加しました。 ※2012年4月24日更新 sw_i2c_eep_my.hのS_EE_Write関数を修正しました。 |
|
忍者ブログ [PR] |