顯示具有 ARDUINO example 標籤的文章。 顯示所有文章
顯示具有 ARDUINO example 標籤的文章。 顯示所有文章

2015年1月3日 星期六

Lab03-ARDUINO光敏電阻感測元件:第3個實驗

A:要學甚麼?

光敏電阻 隨外界光強度變化電阻值=>光線越亮  電阻越低.

PWM 輸出頻度 控制輸出 LED 功率 => 亮度變化

B:達到效果?

越暗 燈要越亮=>自動化的點燈 跟  節能


C:材料
ARDUINO UNO
光敏電阻 *1 
紅色M5 直插LED*1
220Ω直插電阻
麵包板*1 

麵包板跳線*1

D:程式碼
int potpin=0;//定義類比介面0 連接光敏電阻
int ledpin=11;//定義數位介面11 輸出PWM 調節LED 亮度
int val=0;//定義變數val
int PL=0; //初始化 PWM 輸出
void setup()
{
pinMode(ledpin,OUTPUT);//定義數位介面11 為輸出
Serial.begin(9600);//設置串列傳輸速率為9600
}
void loop()
{
val=analogRead(potpin);//讀取感測器的模擬值並賦值給val
Serial.println(val);//顯示val 變數數值
PL=(val/4);
analogWrite(ledpin,PL);// 打開LED 並設置亮度(PWM 輸出最大值255)
delay(500);//延時0.5 秒....太快會眼花
}


E:線路圖




F:結果照片
一般狀況下(家裡光源:Val=350上下,下午17點街道環境光源:Val=28上下差十倍)。
經量測電流5mA;光敏電阻兩端電壓1.58V;0.5mA。



把光敏電組遮蓋達到模擬,環境 暗=>LED 更亮
環境亮=>LED暗






要注意的是, 感光的部分 用類比迴路偵測=>偵測到的數值=>改變 數位輸出的脈波頻度=>LED光強度改變
程式裡 數值的傳遞要注意, 數值格式類型,是否已經宣告,公式代換後的輸出變數 最大值是否超過 等等

G:結果影片








H:應用思考

1.光敏電阻 電阻值 跟 照度計的 照度對應 會是如何? 可否作為一個簡易照度計? 如何使簡易照度計精度更高?
1-1:光源強度不同,變更串接電阻的大小來應對。
2.如何同時控制 多個 LED 來顯示照度 階層?
3.如何 控制 大電流 電燈 ? 接一個 繼電器 ?
3-1:在固定亮度下,因感應到的光敏電阻值還是會一值浮動變化在一個範圍。所以需設定範圍值來起動開關。否則電燈會開開關關。
4.ARDUINO 電壓輸出 分層 0-255, 電壓輸入 分程 0-1023 (1024階),每階差 4.887mV ?或其他值?
5.可否作為高速計數器? 怎麼做?  ARDUINO 感應速度 對應 高速變化 會是多少 次/sec?






2014年12月30日 星期二

Lab10-ARDUINO回授伺服機SERVO-Knob第10個實驗


這個用的是  Tower Pro 的 micro servo99 之 SG90 伺服機 ,不知道買到的是不是盜版,因為感覺有點澳
ARDUINO UNO R3 版
開發環境 1.5.8 IDE 

材料
要幾條線
跟一個伺服機
麵包版
可變電阻旋鈕
ARDUINO UNO 版(別的應該也可以)
USB 線連 ARDUINO 版
原始 範例程式碼 來自 Arduino 開發環境 FILE\EXAMPLES\SERVO\KNOB ==>以下程式後來進行了修改
1.限制轉動角度MAPPING不超過1015,不小於10
2.輸出到監控畫面 val and volt(計算過後的電壓) Angle(計算過後的絕對角度)

/* 
 Controlling a servo position using a potentiometer (variable resistor) 
 by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> 

 modified on 8 Nov 2013
 by Scott Fitzgerald
 http://arduino.cc/en/Tutorial/Knob
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin

/////////////////////////////
float volt ; //   additional -2014-dec-30th -Monitoring voltage
float Angle; //  additional -2014-dec-30th -Monitoring voltage
///////////////////////////////

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
///////////////
  Serial.begin(9600);  //  2014-dec-30th -Monitoring voltage
///////////
}

void loop() 
{ 
  val = analogRead(potpin);   // reads the value of the potentiometer (value between 0 and 1023) 
  
  ////////below added 2014 DEC 30th
  volt=val*(5.0/1023.0) ; //cal the voltage ,
  //must use float and 5.0 digital point 
   Angle=val*(180.0/1023.0) ; //cal the angle
   Serial.print(val);
  Serial.print("   Voltage : ");
  Serial.print(volt);
  Serial.print("  Angle:   ");
  Serial.println(Angle);
  /////above added 2014 DEC 30th
  
  if ((val>10) && (val<1015)){
  val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                  // waits for the servo to get there 
  }
  
  //////  below additional -2014-dec-30th -Monitoring voltage
  if (val<10) {
    Serial.println(" below 10"); //safe control
  }
  if (val>1015) {
   Serial.println("  over 1015"); //safe control
    }
 //////////////////////////above
遇到問題

1.計算電壓與角度變數要用浮點數 float宣告,計算式的數字要加小數點且加個0,所以起初值都是0,改了就好了
2.很奇怪的是,選鈕一直轉 ,analog read 讀到的180後直接跳1023,估計應該是被map過後,所以改了一下
3.改來改去又忘了接USB線
4.新增 SERIAL監控 忘了 用 Serial.begin(9600) 開啟,所以起初沒有輸出到監控畫面
5.一直切換到簿同開發畫面(其他開啟的程式視窗)會產生異常,可見編譯與燒錄時,IDE都會取得作用中的視窗 




結果畫面




結果錄影







2014年12月24日 星期三

Lab07-ARDUINO UNO R3 :第7個實驗練習-無源BUZZER MIDI 聖誕歌曲-Jingle Bell


//來應景下吧,送給親愛的人!
//Cooper Maa 之buzzer 聖誕版

#include "C:/pitches.h"  // "pitches.h" ==改成 "C:/pitches.h ,then compiler find it
// notes in the melody:
int melody[] = {
  NOTE_G4, NOTE_G4 ,NOTE_E5, NOTE_D5, NOTE_C5, NOTE_G4,//雪花隨風飄 1
  NOTE_G4, NOTE_G4, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_A4,//花鹿在奔跑 2
  NOTE_A4, NOTE_A4, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_A4,//聖誕老公公 3
  NOTE_G5, NOTE_G5, NOTE_F5, NOTE_D5, NOTE_E5, NOTE_C5,//駕著美麗雪橇 4
  NOTE_G4, NOTE_G4, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_G4,//經過了原野 5
  NOTE_G4, NOTE_G4, NOTE_E5, NOTE_D5, NOTE_C5, NOTE_A4,//越過了小橋 6
  NOTE_A4, NOTE_F5, NOTE_E5, NOTE_D5, NOTE_G5, NOTE_G5, NOTE_G5, NOTE_G5,//跟著和平歡喜歌聲 7
  NOTE_A5, NOTE_G5, NOTE_F5, NOTE_D5, NOTE_C5,//翩然地來到 8/// 65421
  NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,//叮叮噹叮叮噹 9
  NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5, NOTE_E5,//鈴聲多響亮 10
  NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,//你看他呀不避風霜 11
  NOTE_E5, NOTE_D5, NOTE_D5, NOTE_C5, NOTE_D5, NOTE_G5,//面容多麼慈祥 12
  NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,//叮叮噹叮叮噹 13
  NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5, NOTE_E5,         //鈴聲多響亮 14
  NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,//他給我們帶來幸福 15
  NOTE_G5, NOTE_G5, NOTE_F5, NOTE_D5, NOTE_C5}; //家喜洋洋 16
  int duration[] = {
  250,250,250,250,250,500,  //1雪花隨風飄
  250,250,250,250,250,500,  //2花鹿在奔跑
  250,250,250,250,250,500,  //3聖誕老公公 
  250,250,250,250,250,1500, //4駕著美麗雪橇
  250,250,250,250,250,500,  //5經過了原野
  250,250,250,250,250,500,  //6越過了小橋
  250,250,250,250,250,250,250,250,//7跟著和平歡喜歌聲
  250,250,250,250,500,            //8翩然地來到
  250,250,500,250,250,500,        //9叮叮噹叮叮噹
  250,250,250,250,500,            //10鈴聲多響亮
  250,250,250,250,250,250,250,250,//11你看他呀不避風霜
  250,250,250,250,500,500,        //12面容多麼慈祥
  250,250,500,250,250,500,        //13叮叮噹叮叮噹-2
  250,250,250,250,500,            //14鈴聲多響亮-2
  250,250,250,250,250,250,250,250,//15他給我們帶來幸福
  250,250,250,250,1000};  //16大家喜洋洋
void setup() {
}
void loop() { 
  for (int thisNote = 0; thisNote < 98; thisNote++) {
    // 在 pin8 上輸出聲音,每個音階響 0.5 秒
    tone(8, melody[thisNote], 250);
    // 間隔一段時間後再播放下一個音階
    delay(duration[thisNote]);///////// 音節
  }
  // 兩秒後重新播放
  delay(2000);
}

2014年12月21日 星期日

Lab05-ARDUINO UNO R3:Arduino 與 PLC 連線,運用VB模擬



ARDUINO 模擬 PLC 回應 型式一(FORM1 資料格式)

練習測試 :開始試做 FORM1

格式測試 (暫未實際動態模擬)

使用;VB6,ARDUINO UNO board,ARDUINO IDE開發環境,USB line

1.ARDUINO 端程式


void setup() {
  // put your setup code here, to run once:

  Serial.begin(9600);
  while (!Serial)  { //  // Open serial communications and wait for port to open
  }                 //otherwise the data will send and lost before you recieve

  }
void loop() {
  // put your main code here, to run repeatedly:
  //Simulate PLC sned back the data-format as form1 spec.
  // below we can get form1 data-format as STX+01FF10100100+ETX+73
  char val; //define char,use print(char) will send out a char(like STX) not a number.
  val=2;
  Serial.print(val);
  Serial.print("01FF10100100");
  val=3;
  Serial.print(val);
  Serial.print("73");
  while (true) ; // keep loop here, then loop will not send again again
                 // repeatly will casue com-buffer > form1 format
}

2.VB6 端 程式

注意:1. 請先加入MS comm 元件 專案\設定使用元件\Microsoft comm control 6.0(元件)
     2. Comport setting 設定 一致;arduino 預設 9600,n,8,1
     4. 元件 commPort 一致 ,從裝置管理員看.

數據解析 副程式=>並將燈號圖示進行顏色導通顯示(綠色)

Private Sub ParserData()
Dim RcvBuf As String
Dim SumChkStrRcv As String
Dim SumChkStr As String
Dim H02Pos As Integer
Dim H03Pos As Integer
Dim i As Integer
    'PLC 回傳數據處理 之 副程式
        RcvBuf = Text9.Text
        H02Pos = InStr(RcvBuf, Chr(2))
        H03Pos = InStr(RcvBuf, Chr(3))
        If H02Pos >= 1 And (H03Pos - H02Pos) >= (TxtRcvLen.Text - 3) Then
           SumChkStrRcv = Mid(RcvBuf, H03Pos + 1, 2)
           SumChkStr = chksum(Mid(RcvBuf, H02Pos + 1, H03Pos - 1))
           If SumChkStrRcv = SumChkStr Then
               For i = 0 To (Val(Text7.Text) - 1)
                  If Mid(RcvBuf, 6 + i, 1) = 1 Then
                     ShpX(i).FillColor = vbGreen
                  Else
                     ShpX(i).FillColor = &HC0C0C0
                  End If
               Next
               Text10.Text = 6 'ACK
'            Else
'               MsgBox "通信錯誤"
'               Text10.Text = 21 'NAK
            End If
            Call Command3_Click
           MSComm1.InBufferCount = 0
        End If
End Sub




測試結果 可接收


2014年12月16日 星期二

Lab01-ARDUINO UNO R3 :第1個實驗練習-超簡單內建PIN 13 LED閃爍

這是第一個練習程式,用以先熟悉 arduino IDE 開發環境與與法的簡單



程式目的:(1)讓arduino 板上預設LED 閃爍(PIN 13)
         (2)很快的測試 PCB 電路板是否可燒入

硬體材料:
          (1)arduino uno 版子 + USB 線(連接PC-arduion UNO版子)
          (2)

軟體材料:(1) 作業系統WINDOWS OR MAC OS--我使用WINDOWS XP
         (2) arduino ide 開發環境安裝=>可參照ARDUINO.TW 網站

STEP 1:點擊打開 arduino 程式開發環境
       

STEP 2:從"功能表"選單File\example\載入程式,如圖























STEP 3:除了原有的程式編輯視窗,另外出現一個新程式編輯視窗
       裡面有程式碼.然後按左上方勾勾,進行編譯測試.







STEP 4: 把arduino 版子用usb連上PC後,選擇 開發環境上方之 功能表\TOOLS\PORT
        你會看到出現 COM1...COM3 COM4..選擇你在裝置管理員看到的 Comport.
STEP 5: 按開發環境上方的 向右邊=> 這格箭頭.  就開始燒入.
        從下方綠色進度表可以看到是否完成.
        然後ARDUINO UNO版上的 LED 就會閃爍 (根據程式設定DELAY函數內的時間長短).



程式與翻譯文:
/*
  Blink 閃爍
  Turns on an LED on for one second, then off for one second, repeatedly.
  點亮一顆LED後, 持續一秒亮著,關閉LED後 持續一秒暗著, 一直重複循環.  
  Most Arduinos have an on-board LED you can control. On the Uno and
   大部分的 arduino 系列版子,都有一顆 你可以控制的LED, 在 uno 與 
  Leonardo, it is attached to digital pin 13. If you're unsure what
  Leonardo, (LED)它被依附在 數位腳位pin13 旁.如果你不確定 哪個 
  pin the on-board LED is connected to on your Arduino model, check
  pin 被聯結 依附板上的 LED .                                 確認下
  the documentation at http://arduino.cc
        文件 在 HTTP://arduino.cc
  This example code is in the public domain.
  這個 案例程式碼 是 公諸於世
  modified 8 May 2014
  編寫於,2014 五月 8號
  by Scott Fitzgerald
  編寫由 Scott Fitzgerald .
 */


// the setup function runs once when you press reset or power the board
//初始設定功能,一開始時只跑一次,當你 按下(重置)RESET版子,或 啟動版子電源.  
void setup() {
  // initialize digital pin 13 as an output.
  //初始化 數位腳位 pin13,設定為 輸出腳位
  pinMode(13, OUTPUT);  
}

// the loop function runs over and over again forever 
//(迴圈的作用 在跑程式 一遍又一遍 不停止)

void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
//(點亮 LED,HIGH 是電壓電位) 數位腳位讀取 PIN 13
  delay(1000);              // wait for a second// 等待 一秒鐘 (1000ms,1千個毫秒)
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
                            // 關掉LED, 藉由將腳位電壓降低  
  delay(1000);              // wait for a second // 等待 一秒鐘 (1000ms,1千個毫秒)

}




2014年12月15日 星期一

Lab06-ARDUINO:LCD"Hello world"液晶顯示屏-第6個實驗練習-1602A

ARDUINO UNO R3
LCD 顯示 "hello world"

引言;
1.已經做了幾個實驗後,終於開始想起要來寫實驗紀錄跟學習到的技巧與解決問題的技巧.
2.網路上很多高手,所以除了別人的案例,想做Arduino.cc的官網翻譯與官網案例翻譯並實驗.
3.寫些鏈結不同領域的東西進來發表,例如:LAbView + Arduino.或者 Arduino + PLC 等等.

先寫這篇主要因為想用ARDUINO 控制PLC 並在LCD 上顯示狀態.或者以燈號顯示狀態.

專案構思選擇:
(1)Arduino 與PLC RS232 通=> 要能傳出字串 ENQ+01+FF+BR+B+X0000+08+檢查碼
(2)Arduino 能夠獨立解析收到PCL傳出的字元STX+01+FF+BR+B+0+1+0+1+1+1..ETX,然後解析
(3)ARDUINO 解析後依據內容顯示 LCD 或 輸出燈號.或顯示在七段顯示器.

先查詢網上案例資源:
http://www.geek-workshop.com/thread-78-1-1.html
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=955&highlight=lcd
http://blog.sina.com.cn/s/blog_6243051e01014ly8.html

---------------
待續再寫

2014年12月11日 星期四

Lab04-ARDUINO UNO R3 :第4個實驗練習=LabView讀取Arduino,LabView與Arduino通訊(LabView communicate with Arduino.

2014年/Dec

這件事我花了不少時間.問了老師,FB社團,查NI 等相關網站,Google 了 一下.

紀錄今天的進度與方案;

使用了幾年前的筆記本電腦 CPU 1.5 GHz,RAM 1G RAM.
Window XP Home Edition,SP3
目前2014/Dec 跑起來真的不快.

下載了NI 的 免費LabView 2014 web-base installer.準備安裝 labView Developement system.
http://www.ni.com/download/web-based-installer-labview-development-system-14.0/5072/en/

1.裝的過程中,要求我先裝 .Net Framwork 4.0,我去找了資源如下安裝
http://www.microsoft.com/en-us/download/confirmation.aspx?id=17718

2.然後回到最初安裝 NI web-installer(預設9GB,myGod)
http://www.ni.com/download/web-based-installer-labview-development-system-14.0/5072/en/

或者
1.35GB

Download the Evaluation Version of NI LabVIEW

http://www.ni.com/gate/gb/GB_EVALLV/US

3.然後安裝
NI VISA Driver
==>按照底下做法
http://ming-shian.blogspot.tw/2013/10/labviewarduino-by-visa.html
(1)硬體接線 (類比也應該可以吧,aduino 類比也是數位)


(2)寫入以下程式 Load到Arduino裡面=>開監看確認com port連上


(4)撰寫labView程式如下---
(說真的如果沒學過LabView,其實會看不懂底下的圖塊作用,還好上課學了,其實沒學labview,也就不會去用這個)


LabView連上ARDUINO的實驗結果




當然也有幾種做法,
1.使用 LIFA 內建 VI 開啟加入專案,去連.
    http://ming-shian.blogspot.tw/2013/09/labviewarduino.html

     韌體部分: 兩種選擇

  • LIFA_BASE.ino 編譯時 會有錯誤
  • 不過,因為函式庫可能有衝突現象,先暫時把出問題的IRremote 等等先移開另存,便可解決

  • 如果只是單純的I/O
  • 使用一般的analog read/write 或 digital read/ write便可



2.使用 LIFA / LINX 內建 VI 開啟加入專案,去連.(2015目前LINX 將取代LIFA)




  • 首先也是必須安裝NI VISA 驅動程式
  • 然後開啓 LINX 支援 LabView 的元件套件 或者開啓LIFA 元件
  • 韌體如同1.之兩種選擇




3.出錯的話
(1)用MAX,裝置管理員或LabVIEW的Max裡看看設備是否都連上線了。
(2)ARDUINO 板是否已上電腦
(3)Serial PORT 的選擇對不對 LabView (看VISA PORT NAME)跟 ARDUINO 都要選擇,且一樣
(4)VISA安裝 SERIAL 功能,必須連帶安裝remote server 項目,還有Framework4.0 =我的是這樣,你的可能還要安裝看你的系統而定
(5) LabView 開發環境中還有VI 在運行
(6) 開關COMPORT 速度過快 未正常關掉=重開吧!
(7) 沒有設定 VISA PORT NAME ,沒有設定好 BAUDRATE ,,檢查碼,停止位元,(GOOGLE 查下)
   ARDUINO預設 9600,8N1

其他資源
ARDUINO.TW
arduino.CC
https://labviewhacker.com/doku.php......

應用思考題:

1.ARDUINO 是否可當作一個簡易 I/O 硬體 ,作為 LabView 控制儀器界面?RS232/485 ,USB ?
2.ARDUINO 可否作為高速計數器, high speed counter ?