相關商品

  • Arduino LED發(fā)光模塊 食人魚燈 白光高亮 數(shù)字模塊 電子積木
  • Arduino LED發(fā)光模塊 黃光高亮 食人魚燈 數(shù)字模塊 電子積木
  • Arduino LED發(fā)光模塊 食人魚燈 藍色高亮 數(shù)字模塊 電子積木
  • Arduino LED發(fā)光模塊 食人魚燈 綠色高亮 數(shù)字模塊 電子積木
  • Arduino 魔法書 實現(xiàn)夢想的工具和技術
  • Arduino LED發(fā)光模塊 食人魚燈 紅光高亮 數(shù)字模塊 電子積木
  • Arduino UNO R3 控制器 ATmega328P-PU+ATmega16U2 arduino 原裝進口
  • Arduino 可拼接面包板 面包實驗板 可自貼面包板 洞洞實驗板
  • Arduino Mini 面包板 優(yōu)質(zhì)迷你 可自貼面包板 電子積木
  • Arduino Mini可拼接面包板 透明面包板 實驗板 實驗面包板
  • Arduino Mini可拼接面包板 透明面包板 實驗面包板
  • 170孔優(yōu)質(zhì)面包板 電路板 洞洞板 實驗板 可自貼原型擴展板
  • 奧松機器人 Arduino UNO R3 V5.0傳感器擴展板 電子積木 正品保障 傳感器套件專配 單片機開發(fā)
  • Arduino 7彩面包板實驗跳線套裝 智能電子 機器人配件
  • Arduino 7彩面包板實驗跳線套裝 連接線 盒裝 電子積木
  • Arduino Due ARM控制器 Arduino原裝進口 32bit CortexM3
  • LED 發(fā)光二極管 5mm 高亮 紅色 (5只) Arduino互動電子元件
  • Arduino Starter Kit Arduino入門套件 意大利中國代理
  • Arduino Yun Arduino官方原裝 Arduino Yún WiFi Linux
  • Arduino無線SD擴展板 Arduino原裝進口
  • Arduino Ethernet w/o PoE Arduino原裝進口 arduino網(wǎng)絡擴展板
  • Arduino UNO R3 SMD 控制器 ATmega16U2 開發(fā)版 單片機 sparkfun原裝進口
  • PicoBoard互動創(chuàng)新板(單板非套件) 傳感器互動板 Scratch教學傳感板
  • PVCBOT零基礎機器人制作配書套件 小學生DIY模型科技小制作套裝
  • PVCBOT零基礎機器人制作教材  DIY機器人配書套件 科技小制作小發(fā)明
  • PVCBOT零基礎機器人制作工具包 五金焊接電子模型玩具工具箱套裝
  • ArduPilot 固定翼 飛控 多旋翼 Arduino 控制器 Sparkfun原裝進口
  • A-Star 32u4 Mini LV 可編程模塊 ATmega32U4開發(fā)板 pololu原裝
  • A-Star 32U4 Mini ULV 可編程模塊 ATmega32U4開發(fā)板 Pololu原裝
  • Arduino 雙路大功率直流電機驅(qū)動擴展板 VNH5019 美國Pololu原裝
  • Arduino 直流電機驅(qū)動板 MiniMoto DRV8830 IIC/I2C Sparkfun原裝
  • Arduino 機器人權威指南 愛上Arduino制作指南
  • Arduino 模擬傳感器 Slider Sensor 直滑電位計 位置 滑動傳感器
  • Arduino Intel Galileo Gen 2 伽利略開發(fā)板 官方授權
  • 動手玩轉(zhuǎn)Arduino套件 愛上Arduino互動電子入門套件
  • 動手玩轉(zhuǎn) Arduino 愛上 Arduino 互動電子入門套件 Arduino必備教材
  • PVCBOT機器人設計與制作套件 DIY機器人套件升級版 第二冊套件 配套書籍
  • 4WD機器人調(diào)試助手v2.0軟件 智能小車 Arduino 履帶 WiFi藍牙小車
  • 當前位置: 首頁 > 產(chǎn)品評測 > 【奧松新品】基于Arduino的觸摸式變色臺燈

    【奧松新品】基于Arduino的觸摸式變色臺燈

    編輯:Peter2013-09-26 130708050@qq.com 瀏覽次數(shù):1713

    最近小編入手了一塊基于I2C通信方式的觸摸控制板,可以和手中的Arduino控制器配合應用,于是小編就想做個好玩的東西——基于Arduino觸摸式變色臺燈

    Arduino

    Arduino是一款便捷靈活、方便上手的開源電子原型平臺,包含硬件(各種型號的Arduino控制器)和軟件(Arduino IDE)。Arduino能通過各種各樣的傳感器來感知環(huán)境,通過控制燈光、馬達和其他的裝置來反饋、影響環(huán)境。對Arduino的編程是利用Arduino編程語言(基于Wiring)和Arduino開發(fā)環(huán)境(based on Processing)來實現(xiàn)的?;?span style="color:#FF0000;">Arduino的項目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上運行的軟件,它們之間進行通信來實現(xiàn)。

    MPR121

    MPR121飛思卡爾公司設計研發(fā)的一種電容式觸摸感應控制器,具有內(nèi)部情報功能,可以感受手指對接收器的觸摸或者接近,從而發(fā)出相應的感應信號提供給控制器。MPR121較之前的版本增加了一個內(nèi)部情報和飛思卡爾的第二電容檢測引擎,其次還增強了電極計數(shù),硬件配置的I2C地址,一個擴大過濾系統(tǒng)和防反跳,完全獨立電極帶內(nèi)置自動配置等功能。該設備還包括一個13模擬電極,代表同時充電的電極連接在一起,允許更大的附近探測距離和增加傳感區(qū)域。

    下面就看看我們需要的器材都有哪些:

    Arduino控制器,各種類型的都可以,這里我們采用手中現(xiàn)有的Arduino UNO控制器,當然了,我們還得有和Arduino配套使用的傳感器擴展板。
    Arduino UNOArduino傳感器擴展板

    然后就是我們的重要器件了——I2C Touch Sensor和照明用的各色LED了,小編手中正好有紅色、綠色、黃色和白色的,完全可以用于此次的制作了。
    I2CTouch Sensor紅色LED白色LED黃色LED綠色LED

    除了上述的器件,我們還需要一塊面包板和連接線
    面包板面包板跳線

    讓我們現(xiàn)在簡單的驗證一下這個想法是否可行,首先將各種需要的器件都按照需要使用面包板連接在一起,驗證一下代碼是否可行(庫文件點這里)。

    #include
    #include

    #define MPR121_R    0xB5
    #define MPR121_W    0xB4
    #define MPR121addr  0x5a

    int StateOfTouch1 = 0;
    int StateOfTouch2 = 0;
    int StateOfTouch3 = 0;
    int StateOfTouch4 = 0;
    int irqpin        = 2;
    uint16_t touchstatus;
    volatile int GetTouchSignal = 0;
    unsigned char reg = 0;
    unsigned char status1 =0;
    unsigned char status2 =0;
    long previousMillis = 0;
    long interval = 100;

    void setup()
    {
    Serial.begin(9600);
    DDRC |= 0b00010011;
    PORTC = 0b00110000;
    i2cInit();
    Serial.println("setting device up..");
    delay(100);
    mpr121QuickConfig();
    }

    void loop()
    {
    unsigned char MPR_Query=0;
    unsigned long currentMillis = millis();
    if(currentMillis - previousMillis > interval)
    {
    previousMillis = currentMillis;
    Read_MPR121();
    }
    if (Serial.available()>0)
    {
    Serial.println("Get a command form PC..");
    reg = Serial.read();
    Serial.print("Quiry the Reg of ");
    Serial.println(reg,BIN);
    MPR_Query = mpr121Read(reg);
    Serial.print("the reg is = 0x");
    Serial.println(MPR_Query,HEX);
    }
    delayMicroseconds(1000);
    }

    void Read_MPR121()
    {
    status1=mpr121Read(0x00);
    status2=mpr121Read(0x01);
    CheckStatus();
    }

    void  CheckStatus()
    {
    if ((status1&0x01)==0x01)
    {
    StateOfTouch1 =1;
    }
    else
    {
    if (StateOfTouch1 ==1)
    {
    Serial.println("channel 0 has pressed..");
    digitalWrite(10, HIGH);
    digitalWrite(11, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    StateOfTouch1 =0;
    }
    }
    if ((status1&0x02)==0x02)
    {
    StateOfTouch2 =1;
    }
    else
    {
    if (StateOfTouch2 ==1)
    {
    Serial.println("channel 1 has pressed..");
    digitalWrite(10, LOW);
    digitalWrite(11, HIGH);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    StateOfTouch2 =0;
    }
    }
    if ((status1&0x04)==0x04)
    {
    StateOfTouch3 =1;
    }
    else
    {
    if (StateOfTouch3 ==1)
    {
    Serial.println("channel 2 has pressed..");
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
    digitalWrite(12, HIGH);
    digitalWrite(13, LOW);
    StateOfTouch3 =0;
    }
    }
    if ((status1&0x08)==0x08)
    {
    StateOfTouch4 =1;
    }
    else
    {
    if (StateOfTouch4 ==1)
    {
    Serial.println("channel 3 has pressed..");
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, HIGH);
    StateOfTouch4 =0;
    }
    }
    }

    byte mpr121Read(uint8_t address)
    {
    byte data;
    i2cSendStart();
    i2cWaitForComplete();
    i2cSendByte(MPR121_W);
    i2cWaitForComplete();
    i2cSendByte(address);
    i2cWaitForComplete();
    i2cSendStart();
    i2cSendByte(MPR121_R);
    i2cWaitForComplete();
    i2cReceiveByte(TRUE);
    i2cWaitForComplete();
    data = i2cGetReceivedByte();
    i2cWaitForComplete();
    i2cSendStop();
    cbi(TWCR, TWEN);
    sbi(TWCR, TWEN);
    return data;
    }

    void mpr121Write(unsigned char address, unsigned char data)
    {
    i2cSendStart();
    i2cWaitForComplete();
    i2cSendByte(MPR121_W);
    i2cWaitForComplete();
    i2cSendByte(address);
    i2cWaitForComplete();
    i2cSendByte(data);
    i2cWaitForComplete();
    i2cSendStop();
    }

    void mpr121QuickConfig(void)
    {
    Serial.println("config MPR121..");
    mpr121Write(MHD_R, 0x01);
    mpr121Write(NHD_R, 0x01);
    mpr121Write(NCL_R, 0x00);
    mpr121Write(FDL_R, 0x00);
    mpr121Write(MHD_F, 0x01);
    mpr121Write(NHD_F, 0x01);
    mpr121Write(NCL_F, 0xFF);
    mpr121Write(FDL_F, 0x02);
    mpr121Write(ELE0_T, TOU_THRESH);
    mpr121Write(ELE0_R, REL_THRESH);
    mpr121Write(ELE1_T, TOU_THRESH);
    mpr121Write(ELE1_R, REL_THRESH);
    mpr121Write(ELE2_T, TOU_THRESH);
    mpr121Write(ELE2_R, REL_THRESH);
    mpr121Write(ELE3_T, TOU_THRESH);
    mpr121Write(ELE3_R, REL_THRESH);

    mpr121Write(ATO_CFGU, 0xC9);
    mpr121Write(ATO_CFGL, 0x82);
    mpr121Write(ATO_CFGT,0xb5);
    mpr121Write(ATO_CFG0, 0x1B);
    mpr121Write(ELE_CFG, 0x8c);
    Serial.println("config MPR121 Done!");
    }

    void  checkInterrupt(void)
    {
    int IRQ =0;
    IRQ = digitalRead(irqpin);
    if(IRQ == 0)
    {
    GetTouchSignal=1;
    }
    else
    {
    GetTouchSignal=0;
    }
    }
    相關聯(lián)接
    Arduino UNO

    Arduino 傳感器擴展板

    紅色LED

    面包板

    面包板跳線


    • 用戶評價

    匿名用戶
    咨詢內(nèi)容:
    這個教程不完整啊,起完整版的
    總計 1 個記錄,共 1 頁。 第一頁 上一頁 下一頁 最末頁
    用戶名: 匿名用戶
    E-mail:
    評價等級:
    評論內(nèi)容:
    驗證碼:
    captcha

    Hi,大家好,我是小奧!

    歡迎來到奧松機器人的世界!

    需要咨詢服務請點小奧哦!

    • 銷售咨詢: 銷售咨詢
    • 銷售咨詢: 銷售咨詢
    • 技術支持: 技術支持
    • 咨詢電話:
      0451-86628691
    Top