NullなNuma

自由気ままに何か書く

C-FORCE

C-FORCE

最近話題になっていた「C-FORCE」

Nintendo Switchのドック代わりに使うことができる

HDMI出力のアダプターで、USBハブにもなるすぐれものです

(しかし私の家にはType-C接続できる機器はSwitchぐらいしかありません)

www.kickstarter.com

 クラウドファンディング

KICKSTARTERやIndiegogoで出資を募っていました

最初は「Switch-Con」という名前でしたが商標の関係らしく

「C-FORCE」を余儀なくされたみたいです

https://www.switch-con.com

私はKICKSTARTERで出資しましたが

EARLYBIRDだったので一足早く発送されてきました

製品

KICKSTARTERだけの特典らしくHDMIケーブルがついてきました

f:id:nullnuma:20170806213410j:plain

f:id:nullnuma:20170806213518j:plain

外見

f:id:nullnuma:20170806213537j:plainf:id:nullnuma:20170806213549j:plain

側面のコネクタ

USB3.1A x2

f:id:nullnuma:20170806213555j:plain

USB Type-C PD専用?,HDMIコネクタ

f:id:nullnuma:20170806213600j:plain

USB3.1 Type-C x2

f:id:nullnuma:20170806213605j:plain

接続してみた

f:id:nullnuma:20170806213614j:plain

 使ってみた

f:id:nullnuma:20170806213836j:plain

HDMIケーブルとSwitchに付属のACアダプターをつなぐと問題なく映像が出力されました

ACアダプターを接続しないと表示されないのはドックと同じ仕様でした

まとめ

 EARLYBIRDで出資したので$59,¥6720($1=¥113.915)でゲットすることができました

HDMI出力だけでなくUSBハブとしても使うことができるので満足です

 

リフロー炉製作(2)

前回はオーブントースターを改造したので
制御の部分を作ります

製作

簡単に扱えるArduinoを使います

使用した部品

  • MAX31855(温度計)
  • タクトスイッチ(スタート用)
  • 圧電スピーカー
  • OLEDディスプレイ
  • SSRキット

回路を組むとこんな感じ
SSRキット
f:id:nullnuma:20170727225813j:plain
Arduinoとその仲間たち
f:id:nullnuma:20170727225848j:plain

はんだペースト
Aliで輸入したけどちゃんとつかえたので当たりをひいた
f:id:nullnuma:20170727225937j:plain

プログラム

当初は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 リフロー!

はんだペーストを基板に載せてその上に部品を載せる
小さいパッドにはんだペーストを載せるのはなかなかきつい
f:id:nullnuma:20170727230051j:plain
そして作ったリフロー炉に入れれば
f:id:nullnuma:20170727230019j:plain
はいできあがり、光らない…。1個だけ光らない…。
f:id:nullnuma:20170727230157j:plain
LEDチップの端子と基板は導通が全てあるけど光らなかったので
もともとLEDチップが死んでいたのかなとか考えた

実装する前にちゃんと動作するか確かめるためのものが
必要だということがわかりました

次回はユニバーサル基板で実装しようと思います

ハイローズ(Hi-rose) オーブントースター HR-T121

ハイローズ(Hi-rose) オーブントースター HR-T121

K型熱電対温度センサモジュールキット(SPI接続)MAX31855使用 5V版

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でした
f:id:nullnuma:20170716164254p:plain
メーカーのサイトを探してドライバを導入


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型熱電対センサーをカプトンテープで貼り付ける 

加熱中

f:id:nullnuma:20170626101117j:plain

 

結果は

f:id:nullnuma:20170626100837p:plain

こんな感じでいい具合で加熱されている

一応250度まで温度は上昇したのでオーブントースターはこれを使用する

途中250度前後はバイメタルで電源が入ったり切れたりしていたので

ちゃんと制御すればもっときれいに温度が上がると思う

 

次回はオーブントースターを分解して配線を取り出す

リフロー炉製作(0)

リフロー炉を作る

LEDモジュールを大量に並べた基板をKiCadを使って発注しました。
今回使用した部品が表面実装部品(以下SMD)だったし
これから作っていくにしてもSMDを使うのは避けられないなと考えたので
リフロー炉を作ることにしました。

続きを読む

レーザー加工機製作6(実際に!)

 実際に動かしてみました

加工するデータはこれです

f:id:nullnuma:20170405090035p:plain

れんちょんがスコーしてるとこですね

すこーー (・ε・) ーー

InkscapeベクターにしてからJ Tech Phoonics Laser Toolという

エクステンションでGコードに変換します

NCVCで表示したのがこれ

f:id:nullnuma:20170405090253p:plain

 

実際に動かします

これは外側だけやってみたやつです

うっすられんちょんが…

f:id:nullnuma:20170405085735j:plain

 

レンズの焦点距離をちゃんと調節すれば

ダイソーで売っていた5.5mm厚のMDF板がこんな感じになります

f:id:nullnuma:20170405090400j:plain

ただ焼くとニオイが結構きついんですね…

 

ちなみにアクリルでやるとこんな感じに!f:id:nullnuma:20170405090457j:plain

f:id:nullnuma:20170405090509j:plain

 

目標は達成できたのでひとまず終わりかな?

何か進捗あったらまた更新するのん