Tech Tech Box
いろいろ作っているので
せっかくならどこかで展示や販売したいということで
これから「Tech Tech Box」(テクテクボックス)という名前で
活動していくことにしました
まず最初の活動としてC93に申し込みました
機会があればよろしくお願いします
C-FORCE
C-FORCE
最近話題になっていた「C-FORCE」
Nintendo Switchのドック代わりに使うことができる
HDMI出力のアダプターで、USBハブにもなるすぐれものです
(しかし私の家にはType-C接続できる機器はSwitchぐらいしかありません)
クラウドファンディング
KICKSTARTERやIndiegogoで出資を募っていました
最初は「Switch-Con」という名前でしたが商標の関係らしく
「C-FORCE」を余儀なくされたみたいです
私はKICKSTARTERで出資しましたが
EARLYBIRDだったので一足早く発送されてきました
製品
KICKSTARTERだけの特典らしくHDMIケーブルがついてきました
外見
側面のコネクタ
USB3.1A x2
USB3.1 Type-C x2
接続してみた
使ってみた
HDMIケーブルとSwitchに付属のACアダプターをつなぐと問題なく映像が出力されました
ACアダプターを接続しないと表示されないのはドックと同じ仕様でした
まとめ
EARLYBIRDで出資したので$59,¥6720($1=¥113.915)でゲットすることができました
HDMI出力だけでなくUSBハブとしても使うことができるので満足です
リフロー炉製作(2)
前回はオーブントースターを改造したので
制御の部分を作ります
製作
簡単に扱えるArduinoを使います
使用した部品
- MAX31855(温度計)
- タクトスイッチ(スタート用)
- 圧電スピーカー
- OLEDディスプレイ
- SSRキット
回路を組むとこんな感じ
SSRキット
Arduinoとその仲間たち
はんだペースト
Aliで輸入したけどちゃんとつかえたので当たりをひいた
プログラム
当初はPID制御で温度調節をしようと考えていたのですが
うまく動作しているのか怪しかったので
単純に設定温度を超えたかどうかでON/OFFを切り替えることにしました
プログラムはこんな感じですが(長ったらしいし載せなくてもいいんじゃないか)
#include <SPI.h> #include "Adafruit_MAX31855.h" #include <U8glib.h> /* リフロー手順 1.加熱ステージ1 2.予熱ステージ 3.加熱ステージ2 4.リフローステージ 5.冷却ステージ */ #define Wait 0 #define Heat1 1 #define Preheat 2 #define Heat2 3 #define Reflow 4 #define Cool 5 int Profile[6][2] = { { 0, 0}, {140, 0}, //Heat1 {160, 60}, //Preheat {225, 0}, //Heat2 {230, 20}, //Reflow { 0, 0} //Cool }; //ピンアサイン #define Pin_SSR 8 #define Pin_Buzzer 9 #define Pin_BTN_Start 6 #define Pin_MAXDO 3 #define Pin_MAXCS 4 #define Pin_MAXCLK 5 //LCD U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); //Temp double TargetTemp, Temp; int WindowSize = 5000; unsigned long windowStartTime; //K type thermocouple Adafruit_MAX31855 thermocouple(Pin_MAXCLK, Pin_MAXCS, Pin_MAXDO); byte state; byte beforestate = 0; byte temp[256]; byte temp_cnt; byte TargetFlag = 0; unsigned long HeatingTime; void GetTemp() { double c = thermocouple.readCelsius(); double inter = thermocouple.readInternal(); if (!isnan(c)) { Temp = c; temp_cnt++; temp[temp_cnt] = (byte)(c/2); }else{ Serial.println("error get temp"); } return 0; } void SetTemp() { TargetTemp = Profile[state][0]; windowStartTime = millis(); } void ControlSSR() { if (0 < state && state < 5) { if(TargetTemp > Temp){ digitalWrite(Pin_SSR, HIGH); } else { digitalWrite(Pin_SSR, LOW); } } } void DrawState() { String str_num = String(state,DEC); String str = String("State:" + str_num); u8g.drawStr( 0, 20, str.c_str()); if(TargetFlag > 0){ str_num = String(Profile[state][1]-(millis()/1000 - HeatingTime),DEC); str = String(str_num + "s"); u8g.drawStr( 64, 20, str.c_str()); } str_num = String(temp[temp_cnt] * 2,DEC); str = String("Temp :" + str_num); u8g.drawStr( 0, 40, str.c_str()); str_num = String((Profile[state][0])); str = String("SetTemp :" + str_num); u8g.drawStr( 0, 60, str.c_str()); } void DrawGraph() { //Required firstPage int i; for (i = 0; i < 256; i++) { u8g.drawPixel(255-i, 64-temp[(temp_cnt + i) % 256]/2); } } void RefreshLCD() { u8g.firstPage(); do { switch (state) { case Wait: DrawState(); break; case Heat1: case Preheat: case Heat2: case Reflow: case Cool: if (millis() / 2000 % 2) { DrawGraph(); } else { DrawState(); } break; } } while ( u8g.nextPage() ); } void CalcHeat(){ if(TargetFlag){ //一定加熱 if((millis()/1000 - HeatingTime) > Profile[state][1]){ TargetFlag = 0; state++; SetTemp(); } }else{ if(Profile[state][0] < temp[temp_cnt]*2){ TargetFlag = 1; HeatingTime = millis()/1000; } } } void setup() { // put your setup code here, to run once: Serial.begin(9600); //ピンモード pinMode(Pin_SSR, OUTPUT); pinMode(Pin_BTN_Start, INPUT_PULLUP); //LCD u8g.setColorIndex(1); u8g.setFont(u8g_font_8x13r); state = 0; } void loop() { beforestate = state; GetTemp(); switch (state) { case Wait: if (digitalRead(Pin_BTN_Start) == LOW) { //Start! state++; SetTemp(); TargetFlag = 0; Serial.print(" Next Heat1 Stage"); tone(Pin_Buzzer,1500,100); } break; case Heat1: CalcHeat(); break; case Preheat: CalcHeat(); break; case Heat2: CalcHeat(); if(beforestate != state){ tone(Pin_Buzzer,1000,200); } break; case Reflow: CalcHeat(); if(beforestate != state){ tone(Pin_Buzzer,1500,1000); } break; case Cool: if(beforestate != state){ tone(Pin_Buzzer,1000,1000); } break; } ControlSSR(); RefreshLCD(); delay(100 - millis() % 100); }
Let's リフロー!
はんだペーストを基板に載せてその上に部品を載せる
小さいパッドにはんだペーストを載せるのはなかなかきつい
そして作ったリフロー炉に入れれば
はいできあがり、光らない…。1個だけ光らない…。
LEDチップの端子と基板は導通が全てあるけど光らなかったので
もともとLEDチップが死んでいたのかなとか考えた
実装する前にちゃんと動作するか確かめるためのものが
必要だということがわかりました
次回はユニバーサル基板で実装しようと思います
ハイローズ(Hi-rose) オーブントースター HR-T121
- 出版社/メーカー: 廣瀬無線電機
- メディア: ホーム&キッチン
- この商品を含むブログを見る
K型熱電対温度センサモジュールキット(SPI接続)MAX31855使用 5V版
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
- この商品を含むブログを見る
ESP-WROOM-32の開発キットを購入
ESP-WROOM-32とは
一世代前のESP-WROOM-02ではWi-Fiの通信ができるマイコンでなんと550円!
コレでさえ破格なのにプラスBluetoothの通信までできて
700円というのがESP-WROOM-32
今回はこちらを購入しました
akizukidenshi.com
秋月電子通商で販売されているモジュールで
とりあえず触るにはおすすめな感じのやつです
ドライバを入れる
まずは既に入っているファームウェアでATコマンドを叩きたい
microUSBケーブルで接続するも
挿しただけではmacOSでは認識してくれませんでした
このボードに搭載されているシリアル変換のチップは
よくあるFTDI社のではなくSillicon Labs社のCP2102でした
メーカーのサイトを探してドライバを導入
jp.silabs.com
ここの「Macintosh OSX」用のファイルをダウンロードして
インストールすれば無事認識されました
ATコマンドではなくsscコマンド
いままではATコマンドを利用していたが
今回はsscコマンドを使わなければいけないみたいです
今の状態はこのコマンドで確認できます
op -Q
起動時はモード2でAPモードでした
モードは
1:STAモード
2:APモード
3:STA+APモード
の3種類あります
op -S -o 1 sta -S sta -C -s <SSID> -p <PASS>
子機モードにする
周辺のAPを探す
APに接続する
これで無事にAPに接続することができました
今後いろいろ使って行きたと思います
パソコンが起動しない
6、7年前に作った自作PCが突然or起動して数秒から数十秒で電源が落ちる現象に見舞われた
とりあえずチェック
これだけ使ってるしそろそろ寿命かなと思いつつ
- 余ってた電源をつないでみても直らない
- 熱暴走かなと思ってグリスを塗り直すも直らない
- クーラーの前で動かしてもダメ
- BIOSの設定クリアしてもダメ
友人に尋ねる
色々試したがダメだったので友人に尋ねてヒントを得た
電源スイッチが壊れて挙動が不安定になった
解決
んなバカなと思いつつ電源スイッチ外してショートで起動させると問題なく動く
テスターで測るとなぜか押されてないのに6kΩほどの抵抗値を示す
ということで電源が落ちる理由は
電源スイッチの不良
そんなの誰が気付くんだ…って感じの故障でした
持つべきものは友
リフロー炉製作(1)
オーブントースター
ヨドバシで3000円で売ってたオーブントースターを買ってきた
1200Wらしいので基板をどこまで加熱出来るかとりあえず測る
温度計測
適当な基板にK型熱電対センサーをカプトンテープで貼り付ける
加熱中
結果は
こんな感じでいい具合で加熱されている
一応250度まで温度は上昇したのでオーブントースターはこれを使用する
途中250度前後はバイメタルで電源が入ったり切れたりしていたので
ちゃんと制御すればもっときれいに温度が上がると思う
次回はオーブントースターを分解して配線を取り出す
リフロー炉製作(0)
リフロー炉を作る
LEDモジュールを大量に並べた基板をKiCadを使って発注しました。
今回使用した部品が表面実装部品(以下SMD)だったし
これから作っていくにしてもSMDを使うのは避けられないなと考えたので
リフロー炉を作ることにしました。