NullなNuma

自由気ままに何か書く

Orange Pi Zeroを買ってみた

レーザー加工機のコントローラーとして使おうと考えたので
手頃なSBCであるOrange Pi Zeroを購入しました

Orange Pi Zero

CPUにAllWinner H2(Cortex-A7)
モリー256MB/512MB
イーサネットは10/100M
マイク入力,USB2.0ポート等
安い割に最低限押さえているので軽い処理には十分です
Wi-Fiがついてますが技適がないので日本国内では使えません…

購入

9/24にAliExpressで¥1,023(送料込み)で購入しました
10/2に届きました
1週間強で届いたので結構速い配達でした
f:id:nullnuma:20171002221117j:plain
さっさと無線LANアンテナは取ります
f:id:nullnuma:20171002221128j:plain

動かしてみる

OSにはArmbianと呼ばれる種類のものを入れました
Orange Pi Zero – armbian

Win32 Disk ImagerでmicroSDカードに書き込み
LANケーブルとmicroUSBケーブルを繋ぎ起動させます

https://www.armbian.com/orange-pi-zero/

DHCPで振られたIPアドレスからsshでアクセスします
ユーザー名はroot パスワードは1234で入ることができます
ログイン後すぐにパスワードを変更しろと要求されるので変更し
f:id:nullnuma:20171002220448p:plain
ユーザーを追加しました
新規ユーザーでログインし、apt-getでアップデート,アップグレードしました

とりあえずはslコマンドを走らせてみた(まったくもって無駄)
f:id:nullnuma:20171002223205p:plain

リフロー炉製作(3)

前回までに動作は確認できたので基板に起こして作ります

KiCadで基板を作る

KiCadでちょちょっと作りました
回路図は前回のを起こすだけなのですぐできました
f:id:nullnuma:20171002205352p:plain
NETファイルに変換して基板エディタへ

基板を作成しました
f:id:nullnuma:20171002205435p:plain
f:id:nullnuma:20171002205740p:plain

実装

f:id:nullnuma:20171002211050j:plain
実際に製造してみるとOLEDモジュールや
シリアル変換モジュールの配置を適当にしてしまったので
向きが逆になっていたり無理やりな場所につけてしまっていたりしました
f:id:nullnuma:20171002211133j:plain
まあ仕方ないのでその状態でケースに入るよう工夫します
秋月電子通商のケースを使ってボール盤やヤスリでケースを加工します
akizukidenshi.com

完成

最終的にはなんとか収まってまとまりました
OLEDモジュールの寸法を間違えてしまったので
一回り大きく穴が開いてホットボンドでごまかし(?)ました
f:id:nullnuma:20171002211542j:plain
f:id:nullnuma:20171002211551j:plain

DCジャックから5Vの給電を行いボタンを押せばリフロー開始です
1000W近くの電力を制御するのでヒートシンクが熱を持ちすぎてしまうので
そのうちファンをつけないとだめかもしれません

まとめ

作ってはブレッドボードで終わりだったり
基板に実装するだけでケースを作らなかったりすることが多いので
ここまで綺麗にまとめたものは初めてに近いのではないかと思います
満足の行くものができました

[完]

VOXY(ZRR70)の尾灯の交換

尾灯が切れた

家のVOXY(ZRR70)の尾灯が切れてしまった
尾灯はヘッドライトをつけると後部の点灯するライトで
切れていると整備不良なので交換しました

説明書によるとディーラー行き

説明書を読むと尾灯の交換方法については説明がなく
尾灯は5Wというワット数だけ明記されていて
修理はディーラーに持ってきてね!と書いてありました
持っていったら部品代だけでなく工賃まで取られてしまうので
自分で直してみました

分解

ライトを取るのは簡単で
ライトユニットについている六角のボルトを2本外すだけ

外した後
f:id:nullnuma:20170918140949j:plain

外したライトユニット
f:id:nullnuma:20170918141043j:plain

外したライトユニットの裏側は黒いスポンジで覆われていました
f:id:nullnuma:20170918141124j:plain

スポンジを外すことで電球の部分にアクセスできます
f:id:nullnuma:20170918141152j:plain

尾灯は上から2番目の緑と白の線のライト
書いてある通り右に回すと外れて電球を取り出すことができました
後はホームセンターで買ってきた電球と交換して
逆の手順で元に戻せば完成!

交換後

ヘッドライトをつけると問題なく光るようになりました
特に難しい手順もなくただ外すだけなので
初心者だとしても簡単に交換できる部分でした

グラフィックポイ製作 (0)

今現在製作中であるグラフィックポイについて
これから書いていこうかなと思います

友人がポイというパフォーマンスを行っていることから
このプロジェクトは始まりました
(私はまだポイを行ったことがありません…完成したらやろうかなと考えている)

まずポイについて

ポイはジャグリングの種類の中の一種です

紐の片方に球や布などのテールをつけて両手にもって
回すことで身体の表現と空中に描かれる軌跡によって行うパフォーマンスです

グラフィックポイとは

http://poicommunity.com/shop/user_data/aboutgraphicpoi.php
ここで紹介されているようなものですが
球や布ではなくLEDをつけることでバーサライトのように
空中に文字やイラストを描くことで今まで以上のパフォーマンスを
行うことができるものです

なぜ作るのか

先程紹介したサイトでグラフィックポイが販売されているのですが
いかんせん高い
趣味であるとはいえ17万円を出せるかというと出せない…
買えないなら作ってしまえということで作ります

製作にあたり

私はハードウェア、
パフォーマンスでポイを使っている友人がソフトウェア
という担当で製作する予定です

ハードウェア

既に2,3ヶ月前から構想して既に基板を起こして
テストを行っています

ぼちぼち書いていければと思っています

Tech Tech Box

いろいろ作っているので
せっかくならどこかで展示や販売したいということで
これから「Tech Tech Box」(テクテクボックス)という名前で
活動していくことにしました

まず最初の活動としてC93に申し込みました

機会があればよろしくお願いします

twitter.com

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版