投稿者「admin」のアーカイブ

CNCフライス盤の自作

フライス盤の自作を開始します。主要スペックは以下の通り
・全軸リニアガイド(CPC製)
・全軸ボールネジ NSKコンパクトFAシリーズ USS1005N1D(C3等級)
・スピンドル:最大18,000rpm、350W コレットER16
・ストローク:X軸:320mm、Y軸:304mm、Z軸:80mm
・テーブルサイズ:320mm x 522mm
・完成予想重量:約120kg

組み立て図主要部品の加工は自分では出来ないので図面を書いて外注しました。材質はSS400、クロメートメッキ仕上げ。来週納品予定です。
図面はこちら(PDF)。

 

 

ヒゲゼンマイの作り方

燐青銅板を使ったヒゲゼンマイの作り方です。

ワインダーに燐青銅板を巻きます。3本の板を巻いていきます。このワインダーも自作です。ワインダーに巻いたところ。

そのまま電気炉で加熱処理します。240度で3時間ほど加熱します。その後炉冷。ワインダーから取り出したヒゲゼンマイ。3本を外してたところ。この後テンプに合わせて長さをカットします。

簡単ですね(^^)

PIC16F678 I2C通信(スレーブ)

スレーブ(受信)側のプログラムです。マスターが悪いのか、スレーブが悪いのかその判定が出来ずに苦しみましたがなんとか動きました。CCS-Cコンパイラを使っています。

ヘッダファイル

#include <16F687.h> 

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOPUT                    //No Power Up Timer

#use delay(clock=4000000)
#use i2c(Slave,Fast,sda=PIN_B4,scl=PIN_B6,address=0x10,FORCE_HW)

Cファイル

#include "C:\Documents and Settings\Owner\My Documents\PCW\MKB-33(i2c 7seg)\i2c_7segLED_4.h"

//7セグLEDの桁
#define H1 PIN_B7
#define H2 PIN_A2
#define M1 PIN_A5
#define M2 PIN_A1
#define S1 PIN_A4
#define S2 PIN_A0

#byte ANSEL = 0x11E
#byte ANSELH = 0x11F

#byte CM2CON0 =0x11A
#byte CM2CON1 =0x11B

int const LED7SEG[10] = {252,96,218,242,102,182,190,228,254,246};
int Data1,Data2,Data3;

#INT_SSP
void ssp_interupt (){
  int state;

  state=i2c_isr_state();

  if(state < 0x80)   {
    //state=0はADRESS
    if(state == 1) Data1 =i2c_read(); //1つ目のDATA
    if(state == 2) Data2 =i2c_read(); //2つ目のDATA
    if(state == 3) Data3 =i2c_read(); //3つ目のDATA
  }
}

void set7segLED(int pin, int number){
  output_high(pin);
  output_c(LED7SEG[number]);
  delay_us(10);
  output_low(pin);
  output_c(0);
}

void main() {
  int hour1,hour2,min1,min2,sec1,sec2;

  //c port 全ピン出力モードへ
  set_tris_c(0x00);

  CM2CON0 = 0x00;
  CM2CON1 = 0x00;

  ANSEL  = 0x00;
  ANSELH = 0x00;

  set_tris_b(0x50);//B4 と B6 をインプットへ

  output_float(PIN_B4);
  output_float(PIN_B6);

  enable_interrupts(INT_SSP);     //SSP割り込みを許可
  enable_interrupts(GLOBAL);      //全ての割り込みを許可

  output_low(H1);
  output_low(H2);
  output_low(M1);
  output_low(M2);
  output_low(S1);
  output_low(S2);

   while(1){
      hour1 = Data1/10;
      hour2 = Data1 - hour1 * 10;
      min1 = Data2/10;
      min2 = Data2 - min1 * 10;
      sec1 = Data3/10;
      sec2 = Data3 - sec1 * 10;

      set7segLED(H1,hour1);
      set7segLED(H2,hour2);
      set7segLED(M1,min1);
      set7segLED(M2,min2);
      set7segLED(S1,sec1);
      set7segLED(S2,sec2);
   }

}

3つの8バイトのデータを受信して6個の7セグLEDに表示をするプログラムです。前の記事で紹介したCポートを全ピン出力モードにする部分も含まれています。0〜99までのデータを受信するとの前提の設計です。書籍やサイトでは次の様にpollを使った例が出ていたのですがこれだと最初のデータとしてアドレスを受信してその後のデータを受信してくれませんでした。mainの中のループで以下の様に書いてみました。

if(i2c_poll()){
    Data1 = i2c_read();
    Data2 = i2c_read();
    Data3 = i2c_read();
}

これでは受信ができずに割り込み処理を使って動くプログラムが書けました。i2c_pollを使った書き方は古いスタイルなのでしょうか?

以下のサイトを参考にさせて頂きました。
http://www.freeml.com/picfun/6468/
http://homepage1.nifty.com/rikiya/software/316PICI2C.htm 

PIC16F678のI2C通信(マスター)

PIC16F678同士をI2C通信で接続するテストです。ちょっとはまった部分もありましたので記事にします。CCSのCコンパイラを使っています。

ヘッダファイル

#include 
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOPUT                    //No Power Up Timer
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled

#use delay(clock=4000000)
#use i2c(Master,Fast,sda=PIN_B4,scl=PIN_B6)

クロックは4MHz。なぜか20MHzに上げると動作しませんでした。
B4とB6を使ってクロックとデータを送信しています。プルアップの抵抗(5kΩ)をつけた回路。PIN_A0には動作確認のためLEDを付けています。

Cファイル

#include "C:\Documents and Settings\Owner\My Documents\PCW\MKB-33(i2c 7seg)\i2c_7seg_master16F687.h"

void main()
{
   int h,m,s;

 //  output_float(PIN_B4);
  // output_float(PIN_B6);

   h = 0;
   m = 0;
   s = 0;

   while(1){
      output_high(PIN_A0);

      i2c_start();//start condition

      i2c_write(0x10);//address send
      delay_us(100);

      i2c_write(h);//send data 8bytes
      delay_us(100);

      i2c_write(m);
      delay_us(100);

      i2c_write(s);
       delay_us(100);

      i2c_stop();
      delay_ms(50);
      output_low(PIN_A0);
      delay_ms(20);

      s++;
      if (s>60){
         s = 0;
         m++;
         if (m>60){
            m = 0;
            h++;
            if (h>99) h = 0;
         }
      }

   }

}

output_float(PIN_B4)が必要と書いてある記事や本がほとんどでしたが書かなくても動いてます。ストップウォッチのように3つの数字(秒、分、時)を出力します。delayで動いているので正確な時間では当然ありません。

PIC16F687のCポート

PIC16F687に7セグLEDをつないで回路をつくりました。


C3とC4が制御出来ずにはまりました。C3に出力しようとしても無反応。C4に出力するとC3とC4がhighになってしまいました。

しばらくはまりましたが、データシートにこんな記述を発見。

Note : The ANSEL (11Eh) and ANSELH (11Fh) registers must be initialized to configure an analog channel as a digital input. Pins configured as analog inputs will read ‘0’.

inputについては書いてありますがoutputについては特に書いてありませんが、ANSELとANSELHをセットしなければいけないようです。さらにCM2CON0とCM2CON1もセットしないと出力できませんでした。結果次のようなコードで無事に動きました。

CCS-Cコンパイラを使っています。
プログラムの冒頭部分で

#byte ANSEL = 0x11E
#byte ANSELH = 0x11F

#byte CM2CON0 =0x11A
#byte CM2CON1 =0x11B

main関数の中で

 set_tris_c(0x00);

  CM2CON0 = 0x00;
  CM2CON1 = 0x00;

   ANSEL  = 0x00;
   ANSELH = 0x00;

とりあえずこれでいけるようです。

参考にさせていただいたサイトは
http://www.robotsfx.com/robot/robohow/RoboHow43/RoboHow43.html
でした。

軽井沢ニューアートミュージアム

軽井沢ニューアートミュージアムに作品を展示しています。
新作を含む8作品を展示しています。

 

軽井沢ニューアートミュージアムはこんな建物。駅からまっすぐの通りに面しています。

 

C-DEPOT selection展

青山健一 天野由美子 大竹美佳

金丸悠児 末宗美香子 杉山治
野口都 真壁友 安川啓太


会期:2012年6月27日(水) – 7月16日(月)
会場:軽井沢ニューアートミュージアム 1Fギャラリー
〒389-0102 長野県北佐久郡軽井沢町軽井沢1151-5
tel:0267-46-8691

 

luminous Clock

YouTubeに新作の動画をアップしました。

蓄光材を使った時計です。紫外線LEDを使い回転する蓄光部分に紫外線を照射します。数字の形が光り時を知らせます。数字の形はドットのタイプと7セグLED(デジタル表示)の2つのタイプがあります。

時の輪列

YouTubeに新作の動画をアップしました。

ステッピングモータをクオーツで制御して歯車を回しています。歯車に付けられた目盛で時間が分かります。下から秒、分、時間の歯車が並んでいます。
クオーツ制御なので実用時計としての精度を持った作品です。

時の可視化

2012年 春 新作!! 展示を行います。
展示の詳細はこちら

真壁友・堤岳彦 二人展『機械とデザート』
会期:2012年5月4日(金) – 6月30日(土)

OPEN:金・土・日 / CLOSED:月~木
時間:12:00 – 19:00
会場:C-DEPOT terminal

作家来場日:5/4(金)・5/12(土)
レセプション:5/12(土) 17:00より

[C-DEPOT terminalまでのアクセス]
〒171-0042 東京都豊島区高松1-8-14-1F
tel 03-5926-7160
有楽町線・副都心線「要町駅」3番出口より徒歩4分
http://g.co/maps/azsxt

ご来場を御待ちしてます。