目前分類:未分類文章 (2)

瀏覽方式: 標題列表 簡短摘要

在以前要控制一整排的 rgb 三色led總是需要接很多線及花很多的mcu 腳位才能完成,隨著科技的進步,現在只需要三支腳位就可以了(vcc signal gnd)

這兩天把買來很久的rgb ring ws212b -16 拿出來玩玩看

根據拍賣上的資料

LED驅動芯片WS2812(集成在LED裡面)
  • 智能反接保護,電源反接不會損壞IC。
  • IC控制電路與LED點光源公用一個電源。
  • 控制電路與RGB晶片集成在一個5050封裝的元器件中,構成一個完整的外控圖元點。
  • 內置信號整形電路,任何一個圖元點收到信號後經過波形整形再輸出,保證線路波形畸變不會累加。
  • 內置上電重定和掉電重定電路。
  • 每個圖元點的三基色顏色可實現256級亮度顯示,完成16777216種顏色的全真色彩顯示,掃描頻率不低於400Hz/s。
  • 串列級聯介面,能通過一根信號線完成資料的接收與解碼。
  • 任意兩點傳傳輸距離在不超過5米時無需增加任何電路。
  • 當刷新速率30幀/秒時,級聯數不小於1024點。
  • 資料發送速度可達800Kbps。
  • 光的顏色高度一致,性價比高。
文章標籤

Mr Sitdownplz 發表在 痞客邦 留言(0) 人氣()

先前看到很多報導有關緊急煞車的時後煞車燈會自動閃爍的系統 可有效提醒後方駕駛注意

 
後來仿間也出現了很多類似的產品
 
最簡單的大概就是用ne555了吧 透過簡單的設定加上可relay 就可以完成了…
 
 
若是單單使用NE555的話,變成每次踩煞車都會閃爍,之後驗車會有問題,而且也不合乎所謂的緊急煞車閃爍,因此後來電路上就會變成加上個G-senor來判斷車子狀況
電路的部分,懶的用protel畫,就先用手劃個簡單圖來看看吧
 
簡單來說就是用mcu+gsenor來判斷車子是否為緊急煞車! 當G值大於0.6時轉為閃爍狀態 !
g-sensor模組目前網路上都買的到現成的,一塊也才100塊左右
而輸出控製的部分,就不用relay了,不然每次聽到relay機械作動聲都覺得有點煩,因此,在這裡就利用電晶體來做一個開關電路來控制
....
 
IMG_20150913_110650  
 
程式的部分 就很簡單,讀i2c, 判斷是否有大於0.6G, 是否有break訊號
內容可能有些不完整,目前還在整理中,待完成後再放上完整版給各位
 
/**************************************************/

#include <16F690.h>
#include <math.h>
#use delay (clock = 4000000)

#use i2c(master, sda=PIN_B4, scl=PIN_B6)

 


int adxl345_read(int add){
int retval;
i2c_start();
i2c_write(W_DATA);
i2c_write(add);
i2c_start();
i2c_write(R_DATA);
retval=i2c_read(0);
i2c_stop();
return retval;
}

long x,y,z;
int i=0;

int1 indicator=0;

//Function declearation
void initialize();
void readRegister(int max);

 


#define BLINKTIME 50
#define range 70
void main() {

unsigned lightState= 0;
signed int16 tempx,tempy,tempz;
unsigned int16 blinkcounter = BLINKTIME;
char enFlag =0;
float Heading;
volatile unsigned char BreakFlag;
int x=10;
int i=0;
signed int16 tmp[3];

output_high(PIN_B7);

adxl345_init();

BreakFlag=input(PIN_A2);
tmp[0]=0,tmp[1]=12;tmp[2]=248;
BASIC[0]=0,BASIC[1]=12;BASIC[2]=248;



while(1){
output_low(PIN_C2);
A_data[0]=adxl345_read(0x32); //Read X axis(LSB)
A_data[1]=adxl345_read(0x33); //Read X axis(MSB)
A_data[2]=adxl345_read(0x34); //Read Y axis(LSB)
A_data[3]=adxl345_read(0x35); //Read Y axis(MSB)
A_data[4]=adxl345_read(0x36); //Read Z axis(LSB)
A_data[5]=adxl345_read(0x37); //Read Z axis(MSB)

Xa=make16(A_data[1],A_data[0]);//Converting two 8 bit integer to one 16 bit integer
Ya=make16(A_data[3],A_data[2]);
Za=make16(A_data[5],A_data[4]);

Heading = atan2((signed int16)Ya,(signed int16)Xa)* 180 / pi + 180;

 

if(i>0)
if(Heading >0.6& BreakFlak)
{
enFlag = 1;

}
else
{

}

//output_high(PIN_C2);
for(i = 0;i<30;i++){
if(enFlag ==1 && blinkcounter >0)
{
if(lightState ==1)
{
lightState=0;
// output_low(PIN_C2);
output_low(PIN_B7);

}
else if(lightState ==0)
{
// output_high(PIN_C2);
output_high(PIN_B7);
lightState=1;

}
blinkcounter --;
if(blinkcounter <=1)
{

output_high(PIN_B7);
blinkcounter =BLINKTIME;
enFlag =0;
}

}
delay_ms(150);
}


}

/**************************************************************************/

 
未完待續...
文章標籤

Mr Sitdownplz 發表在 痞客邦 留言(0) 人氣()