“(SKU:RB-01C076)CarDuino UNO R3(直插芯片)”的版本間的差異
(→?產(chǎn)品相關(guān)推薦) |
|||
第42行: | 第42行: | ||
==應(yīng)用例程== | ==應(yīng)用例程== | ||
+ | ==模塊測試 == | ||
+ | 我們使用Arduino控制器來做個測試,要用到硬件設(shè)備如下: | ||
+ | # Arduino控制器×2 | ||
+ | # Arduino 傳感器擴(kuò)展板×2 | ||
+ | # 紅外發(fā)射模塊×1和紅外接收模塊×1 | ||
+ | # 電位計模塊×1和 LED 發(fā)光模塊×1 | ||
+ | # 通用3P傳感器連接線×4 | ||
+ | # USB 數(shù)據(jù)通信線×2 | ||
+ | [[文件:3232-4.jpg|500px|有框|居中]] | ||
+ | :如圖所示,使用傳感器連接線將電位計模塊連接到作為發(fā)射部分的Arduino傳感器擴(kuò)展板的模擬口0 上,紅外發(fā)射頭連接到 Arduino傳感器擴(kuò)展板的數(shù)字口2 上。然后使用傳感器連接線將紅外發(fā)射頭連接到作為接收部分的Arduino傳感器擴(kuò)展板的數(shù)字口2上,將LED 發(fā)光模塊連接到Arduino傳感器擴(kuò)展板的數(shù)字口9 上。 | ||
+ | :將發(fā)送部分代碼編譯后下載到作為發(fā)送部分的Arduino里,將接收部分代碼編譯后下載到作為接收部分的Arduino里,就可以在串口助手窗口上顯示接收到的當(dāng)前值(注:串口助手波特率調(diào)到115200 )。Arduino實(shí)驗代碼如下。 | ||
+ | :發(fā)送部分程序: | ||
+ | <pre style='color:blue'>#define ADD 0x00 | ||
+ | int IR_S = 2; // 定義數(shù)字口2 為發(fā)射模塊接口 | ||
+ | int a; | ||
+ | void setup() | ||
+ | { | ||
+ | pinMode(IR_S, OUTPUT); //定義IR_S為輸出模式 | ||
+ | Serial.begin(115200); //定義頻率為115200 | ||
+ | } | ||
+ | void loop() | ||
+ | { | ||
+ | uint8_t dat,temp; | ||
+ | { | ||
+ | a=analogRead(0); // 讀取模擬口0 的值 | ||
+ | temp =a/4; | ||
+ | Serial.println(temp,DEC ); // 將讀取的數(shù)值打印到串口上 | ||
+ | IR_Send38KHZ(280,1);//發(fā)送9ms 的起始碼 | ||
+ | IR_Send38KHZ(140,0);//發(fā)送4.5ms 的結(jié)果碼 | ||
+ | |||
+ | IR_Sendcode(ADD);//用戶識別碼 | ||
+ | dat=~ADD; | ||
+ | IR_Sendcode(dat);//用戶識別碼反嗎 | ||
+ | IR_Sendcode(temp);// 操作碼 | ||
+ | dat=~temp; | ||
+ | IR_Sendcode(dat);//操作碼反碼 | ||
+ | |||
+ | IR_Send38KHZ(21,1);// 發(fā)送結(jié)束碼 | ||
+ | } | ||
+ | delay(200); | ||
+ | } | ||
+ | |||
+ | void IR_Send38KHZ(int x,int y) //產(chǎn)生38KHZ紅外脈沖 | ||
+ | { | ||
+ | for(int i=0;i<x;i++)//15=386US | ||
+ | { | ||
+ | if(y==1) | ||
+ | { | ||
+ | digitalWrite(IR_S,1); | ||
+ | delayMicroseconds(9); | ||
+ | digitalWrite(IR_S,0); | ||
+ | delayMicroseconds(9); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | digitalWrite(IR_S,0); | ||
+ | delayMicroseconds(20); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void IR_Sendcode(uint8_t x) | ||
+ | { | ||
+ | for(int i=0;i<8;i++) | ||
+ | { | ||
+ | if((x&0x01)==0x01) | ||
+ | { | ||
+ | IR_Send38KHZ(23,1); | ||
+ | IR_Send38KHZ(64,0); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | IR_Send38KHZ(23,1); | ||
+ | IR_Send38KHZ(21,0); | ||
+ | } | ||
+ | x=x>>1; | ||
+ | } | ||
+ | } </pre> | ||
+ | :此代碼的功能是從模擬口0 讀取電位計的值,并通過紅外發(fā)射頭將讀取的數(shù)值發(fā)送出去。 | ||
+ | 接收部分程序: | ||
+ | <pre style='color:blue'>#define IR_LED 2 //IR 接收數(shù)字口2 | ||
+ | #define MAX 128 | ||
+ | #define MICRO_STEP 10 | ||
+ | #define IDLE_PULSE 4000 | ||
+ | unsigned long pulses[MAX]; | ||
+ | unsigned char IRCOM[7]; | ||
+ | unsigned long z; | ||
+ | int w; | ||
+ | byte f=B00000000; // 定義f 為位 | ||
+ | int n; | ||
+ | int ledpin=9; // 定義數(shù)字口9 為LED 模塊接口 | ||
+ | void setup() | ||
+ | { | ||
+ | pinMode(IR_LED, INPUT); | ||
+ | Serial.begin(115200); | ||
+ | pinMode(ledpin,OUTPUT); //定義ledpin 為輸出模式 | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | if( digitalRead(IR_LED) == LOW) | ||
+ | { | ||
+ | // 開始接收數(shù)據(jù) | ||
+ | int count = 0; | ||
+ | int exit = 0; | ||
+ | while(!exit) | ||
+ | { | ||
+ | while( digitalRead(IR_LED) == LOW ) | ||
+ | delayMic roseconds(MICRO_STEP); | ||
+ | unsigned long start = micros(); | ||
+ | int max_high = 0; | ||
+ | while( digitalRead(IR_LED) == HIGH ) | ||
+ | { | ||
+ | delayMic roseconds(MICRO_STEP); | ||
+ | max_high += MICRO_STEP; | ||
+ | if( max_high > IDLE_PULSE ) | ||
+ | { | ||
+ | exit = 1; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | unsigned long duration = micros() - start; | ||
+ | pulses[count++] = duration; | ||
+ | } | ||
+ | for(int i=3; i<4; i++) | ||
+ | { | ||
+ | for(int j=0;j<8;j++) | ||
+ | { | ||
+ | if(pulses[ i*8+j+1] < IDLE_PULSE) | ||
+ | { | ||
+ | IRCOM[i]=IRCOM [i] >> 1; | ||
+ | if((pulses[i*8+j+1])>1000) | ||
+ | {IRCOM[i] = IRCOM[i] | 0x80;} | ||
+ | } | ||
+ | z= pulses[i*8+j+1]; | ||
+ | /***************************************************/ | ||
+ | //將接收到的脈沖數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制 | ||
+ | /***************************************************/ | ||
+ | if(z<800) | ||
+ | w=10000000; //如果Z 小于800 w=10000000 | ||
+ | else | ||
+ | w=00000000; //如果Z 大于800 w=00000000 | ||
+ | f=f>>1; // 將f 右移1 位 | ||
+ | f=f+w; | ||
+ | /***************************************************/ | ||
+ | } | ||
+ | } | ||
+ | n=int(f); | ||
+ | Serial.print(n);// 將接收到的數(shù)據(jù)打印到串口上 | ||
+ | analogWrite(ledpin,n); //將接收到的數(shù)據(jù)寫入ledpin 接口,控制LED 亮度 | ||
+ | } | ||
+ | } </pre> | ||
+ | :此部分代碼功能是通過紅外接收頭接收發(fā)送部分發(fā)送出的電位計的值來控制LED的亮度變化并通過串口助手顯示當(dāng)前接收到的值。如下圖所示左側(cè)串口助手(串口號為:117 )顯示的是紅外發(fā)送部分當(dāng)前發(fā)送出的電位計的值,右側(cè)串口助手(串口號為:88)顯示的是紅外接收部分接收到的數(shù)值。 | ||
+ | [[文件:3232-5.jpg|500px|有框|居中]] | ||
==產(chǎn)品相關(guān)推薦== | ==產(chǎn)品相關(guān)推薦== | ||
1.購買地址<br/> | 1.購買地址<br/> |
2015年6月12日 (五) 09:32的版本
目錄 |
產(chǎn)品概述
Carduino UNO R3是Arduino USB接口系列的最新版本, Carduino Uno R3與Arduino Uno R3一樣的AREF邊緣增加了SDA和SCL端口,此外,RESET邊上還有兩個新的端口。一個端口是IOREF,它能夠使擴(kuò)展板適應(yīng)主板的電壓,另一個空的端口預(yù)留給將來擴(kuò)展的可能。Carduino UNO R3能夠兼容傳感器擴(kuò)展板v5.0并且能用它額外的端口適應(yīng)新的擴(kuò)展板。 Carduino可以用于做項目開發(fā)的控制核心也可以與PC進(jìn)行直接的USB連接完成與電腦間的互動,運(yùn)行于開源的IDE開發(fā)環(huán)境,軟件可以在Arduino官網(wǎng)直接下載(支持Window,Linux以及Max系統(tǒng)),處理器核心是ATmega328,同時具有14路數(shù)字輸入/輸出口(其中6路可作為PWM輸出),6路模擬輸入,一個16MHz晶體振蕩器,一個USB口,一個電源插座,一個ICSP header和一個復(fù)位按鈕。
規(guī)格參數(shù)
- 工作電壓:5V
- 輸入電壓:接上USB時無須外部供電或外部7V~12V DC輸入
- 輸出電壓:5V DC輸出和3.3V DC輸出 和外部電源輸入
- 微處理器:ATmega328
- Bootloader:Carduino Uno
- 時鐘頻率:16 MHz
- 輸入電壓:7-12V(推薦)
- 輸入電壓:6-20V(限制)
- 支持USB接口協(xié)議及供電(不需外接電源)
- 支持ISP下載功能。
- 14路數(shù)字輸入輸出口:工作電壓為5V,每一路能輸出和接入最大電流為40mA。
(1)串口信號RX(0號)、TX(1號): 與內(nèi)部 ATmega8U2 USB-to-TTL 芯片相連,提供TTL電壓水平的串口接收信號。
(2)外部中斷(2號和3號):觸發(fā)中斷引腳,可設(shè)成上升沿、下降沿或同時觸發(fā)。
(3)脈沖寬度調(diào)制PWM(3、5、6、9、10 、11):提供6路8位PWM輸出。
(4)SPI(10(SS),11(MOSI),12(MISO),13(SCK)):SPI通信接口。
(5)LED(13號):Arduino專門用于測試LED的保留接口,輸出為高時點(diǎn)亮LED,反之輸出為低時LED熄滅。
- 6路模擬輸入A0到A5:每一路具有10位的分辨率(即輸入有1024個不同值),默認(rèn)輸入信號范圍為0到5V
- AREF:模擬輸入信號的參考電壓。
- Reset:信號為低時復(fù)位單片機(jī)芯片。
- 直流電流:40mA(I/O端口)
- 直流電流:50mA(3.3V端口)
- Flash 內(nèi)存:32 KB (ATmega328其中0.5 KB用于引導(dǎo)程序)
- SRAM:2 KB (ATmega328)
- EEPROM:1 KB (ATmega328)
- 尺寸:75x55x15mm
使用方法
1.引腳說明
2.編譯環(huán)境下載(當(dāng)前最新版本IDE是Arduino1.6.4)
Arduino IDE編譯環(huán)境下載
3.驅(qū)動安裝
Arduino驅(qū)動安裝方法
4.程序下載
程序下載方法
應(yīng)用例程
模塊測試
我們使用Arduino控制器來做個測試,要用到硬件設(shè)備如下:
- Arduino控制器×2
- Arduino 傳感器擴(kuò)展板×2
- 紅外發(fā)射模塊×1和紅外接收模塊×1
- 電位計模塊×1和 LED 發(fā)光模塊×1
- 通用3P傳感器連接線×4
- USB 數(shù)據(jù)通信線×2
- 如圖所示,使用傳感器連接線將電位計模塊連接到作為發(fā)射部分的Arduino傳感器擴(kuò)展板的模擬口0 上,紅外發(fā)射頭連接到 Arduino傳感器擴(kuò)展板的數(shù)字口2 上。然后使用傳感器連接線將紅外發(fā)射頭連接到作為接收部分的Arduino傳感器擴(kuò)展板的數(shù)字口2上,將LED 發(fā)光模塊連接到Arduino傳感器擴(kuò)展板的數(shù)字口9 上。
- 將發(fā)送部分代碼編譯后下載到作為發(fā)送部分的Arduino里,將接收部分代碼編譯后下載到作為接收部分的Arduino里,就可以在串口助手窗口上顯示接收到的當(dāng)前值(注:串口助手波特率調(diào)到115200 )。Arduino實(shí)驗代碼如下。
- 發(fā)送部分程序:
#define ADD 0x00 int IR_S = 2; // 定義數(shù)字口2 為發(fā)射模塊接口 int a; void setup() { pinMode(IR_S, OUTPUT); //定義IR_S為輸出模式 Serial.begin(115200); //定義頻率為115200 } void loop() { uint8_t dat,temp; { a=analogRead(0); // 讀取模擬口0 的值 temp =a/4; Serial.println(temp,DEC ); // 將讀取的數(shù)值打印到串口上 IR_Send38KHZ(280,1);//發(fā)送9ms 的起始碼 IR_Send38KHZ(140,0);//發(fā)送4.5ms 的結(jié)果碼 IR_Sendcode(ADD);//用戶識別碼 dat=~ADD; IR_Sendcode(dat);//用戶識別碼反嗎 IR_Sendcode(temp);// 操作碼 dat=~temp; IR_Sendcode(dat);//操作碼反碼 IR_Send38KHZ(21,1);// 發(fā)送結(jié)束碼 } delay(200); } void IR_Send38KHZ(int x,int y) //產(chǎn)生38KHZ紅外脈沖 { for(int i=0;i<x;i++)//15=386US { if(y==1) { digitalWrite(IR_S,1); delayMicroseconds(9); digitalWrite(IR_S,0); delayMicroseconds(9); } else { digitalWrite(IR_S,0); delayMicroseconds(20); } } } void IR_Sendcode(uint8_t x) { for(int i=0;i<8;i++) { if((x&0x01)==0x01) { IR_Send38KHZ(23,1); IR_Send38KHZ(64,0); } else { IR_Send38KHZ(23,1); IR_Send38KHZ(21,0); } x=x>>1; } }
- 此代碼的功能是從模擬口0 讀取電位計的值,并通過紅外發(fā)射頭將讀取的數(shù)值發(fā)送出去。
接收部分程序:
#define IR_LED 2 //IR 接收數(shù)字口2 #define MAX 128 #define MICRO_STEP 10 #define IDLE_PULSE 4000 unsigned long pulses[MAX]; unsigned char IRCOM[7]; unsigned long z; int w; byte f=B00000000; // 定義f 為位 int n; int ledpin=9; // 定義數(shù)字口9 為LED 模塊接口 void setup() { pinMode(IR_LED, INPUT); Serial.begin(115200); pinMode(ledpin,OUTPUT); //定義ledpin 為輸出模式 } void loop() { if( digitalRead(IR_LED) == LOW) { // 開始接收數(shù)據(jù) int count = 0; int exit = 0; while(!exit) { while( digitalRead(IR_LED) == LOW ) delayMic roseconds(MICRO_STEP); unsigned long start = micros(); int max_high = 0; while( digitalRead(IR_LED) == HIGH ) { delayMic roseconds(MICRO_STEP); max_high += MICRO_STEP; if( max_high > IDLE_PULSE ) { exit = 1; break; } } unsigned long duration = micros() - start; pulses[count++] = duration; } for(int i=3; i<4; i++) { for(int j=0;j<8;j++) { if(pulses[ i*8+j+1] < IDLE_PULSE) { IRCOM[i]=IRCOM [i] >> 1; if((pulses[i*8+j+1])>1000) {IRCOM[i] = IRCOM[i] | 0x80;} } z= pulses[i*8+j+1]; /***************************************************/ //將接收到的脈沖數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制 /***************************************************/ if(z<800) w=10000000; //如果Z 小于800 w=10000000 else w=00000000; //如果Z 大于800 w=00000000 f=f>>1; // 將f 右移1 位 f=f+w; /***************************************************/ } } n=int(f); Serial.print(n);// 將接收到的數(shù)據(jù)打印到串口上 analogWrite(ledpin,n); //將接收到的數(shù)據(jù)寫入ledpin 接口,控制LED 亮度 } }
- 此部分代碼功能是通過紅外接收頭接收發(fā)送部分發(fā)送出的電位計的值來控制LED的亮度變化并通過串口助手顯示當(dāng)前接收到的值。如下圖所示左側(cè)串口助手(串口號為:117 )顯示的是紅外發(fā)送部分當(dāng)前發(fā)送出的電位計的值,右側(cè)串口助手(串口號為:88)顯示的是紅外接收部分接收到的數(shù)值。
產(chǎn)品相關(guān)推薦
1.購買地址
CarDuino UNO R3 控制器購買地址
2.相關(guān)書籍
首本Arduino中文教材 入門必讀
3.學(xué)習(xí)套件
愛上Arduino 互動入門套件