2016年11月11日 星期五

用mblock玩arduino(9)- 超聲波感應器

一、教學目標:學習控制超聲波感應器


Arduino 工作流程


二、接線圖:


HC-SR04超音波感測器介紹:

1.感應角度:不大於15度

2.探測距離:2cm-450cm

3.感測器有四個接腳:接線方式為Vcc接5V,Gnd接地,Trig(控制端)和Echo(接收端)

Trig接腳位12,Echo接腳位13




三、程式碼:



四:作業
1.請將設定一個變數distance,如果變數小於20cm,亮紅燈,否則亮錄燈。
2.請將設定一個變數distance,如果變數小於20cm,圖案向左走50步,20cm~40cm向右走50步,大於40就停止。

五:網路資源:
http://blog.ilc.edu.tw/blog/blog/868/post/93477/620602

用mblock玩arduino(8)- 伺服馬達(servo motor)

一、教學目標:學習控制伺服馬達

二、接線圖:
一般伺服馬達有三條線,電源(紅色)、接地(黑或棕色)、訊號線(白、黃、橘、藍....)
我們訊號線接在 數位輸入 9

三、程式碼:(等待時間不宜過短,等馬達有足夠的時間轉至定位)


⓪應用:如利用一個可變電阻來調整馬達的轉向?





四、作業:
如何用鍵盤來控制馬達(上:0度,右:90度,下:180度)

五:網路資源:
1.http://blog.ilc.edu.tw/blog/blog/868/post/93477/605139

2016年11月7日 星期一

用mblock玩arduino(7)- 變數設定與清單設定

一、教學目標:學習變數的設定,可以將程式前作一致性設定。清單(陣列 array)可視為多個變數的集合,利用迴圈可取出清單的變數

1.
什麼是清單(list)?
清單是集合一群具有「相同名稱」及「資料型態」的變數

Ⓞ練習建立一個清單,名稱叫作 keys,以及一個變數nn, 將清單內的變數取出。



二、接線圖:(5個led燈,每一led燈串接一個330歐姆的電阻,數位腳位7,8,9,10,11)


三、程式碼:
1.將等待時間用 變數設定,可以達到一致性。
如要亮燈的次序是要7->11->7,要如何解??
(1)先作2個變數 number  ,led
(2)再作一個清單 leds








四、作業:
1.請完成編號1-5的led燈,亮的次序為1-3-5-3-1  1-2-3-4-5-4-3-2-1
重覆執行。

五:網路資源
https://scratch.mit.edu/projects/editor/?tip_bar=getStarted

2016年11月5日 星期六

用mblock玩arduino(3)- PWM的類比輸出與呼吸燈

一、學習目標:認識PWM(PWM脈衝寬度調變 ) ,以控制LED燈的亮度
1.PWM 的原理,藉由數位訊號高頻率的切換,調整開關的比例,可以模擬出我們需要的類比訊
2.Arduino 的數位腳位旁,有 ~ 符號,可用為 PWM 輸出腳位,分別是 D3、D5、D6、D9、D10、D11 腳位
二、接線圖:

三、程式碼:




四、作業
1.如何等待的時間可以一次設好?



五、參考資料
Arduino Uno Board 的各個部位
http://thats-worth.blogspot.tw/2013/12/arduino-uno-board-parts-of-arduino-uno.html
脈衝寬度調變 (PWM)
http://thats-worth.blogspot.tw/2014/04/arduino-pwm-arduino-pulse-width.html

用mblock玩arduino(6)-可變電阻類比輸入與LED燈調速

一、教學目標:將LED燈依可變電阻調速

二、接線圖:
四、程式碼:

四、作業

用mblock玩arduino(5)- 蜂鳴器與簡易電子琴

一、課程目標:學習使用蜂鳴器產生音階,並編成一首歌曲,以完成簡易電子琴。

二、接線圖:(請注意蜂器有正負極長腳為正極)
三、程式碼:

四、作業
1.請完成一首兒歌或校歌
2.如何按a鍵時唱Do Re Mi Fa Mi Re Do 三次,完成時並亮紅燈三次。

2016年11月4日 星期五

用mblock玩arduino(4)- 類比輸入與光敏電阻

一、教學目標:
學習利用 光敏電阻(photo resistor)控制LED的明滅

二、接線圖:
(光敏電阻串接10k)
(led 接330歐姆電阻)或直接將led 的長腳插入=>13 短腳=>GND

三、程式碼:






四、作業:
1.請設定一個變數limit, 如果光敏電阻的值 >limit 發出Do (C5的音)且亮紅燈。
否則亮綠燈。
五、參考資料

2016年11月3日 星期四

用mblock玩arduino(2)- 將led燈接在麫包板上

一、學習目標:學習在麫包板接led燈

面包版介紹









二、接線圖(電阻330歐姆,5碼電阻:橘橘黑黑棕) 最後一碼是最粗的

色碼表      色碼說明

三、程式碼:(注意所接的數位腳位)



說明影片





四、作業:
1.如何在數位腳位8,9,10接三個燈,同時亮,且同時暗?
2.如何在數位腳位8,9,10接三個燈,依序一次別一個燈?
3.按鍵盤上的a 亮紅燈,按b亮綠燈?
4.霹靂燈(x5)?




程式碼





2016年11月2日 星期三

用mblock玩arduino(1)-環境設定與簡易測試

實驗器材清單


執行mblock
一、確認執行為Arduino Uno控制板




二、更新韌體



三、測試程式
四 、說明影片
(一)環境設定

(二)程式測試




四、網路資源:



2016年4月1日 星期五

Arduino的教學14-RGB led燈(共陰極)的使用

一、教學目標:
學習控制 rgb(紅、綠、藍)的三色led燈。

二、接線圖

RGB LED依序為、最長腳、
RGB LED的共陰極(最長腳)串接一個330的電阻後再接地(GND)。

RGB LED的R接Arduino腳位11。
RGB LED的G接Arduino腳位10。
RGB LED的B接Arduino腳位9。

三、程式碼
1.每隔一秒改變LED的顏色,紅、綠、藍、黃、青、洋紅、白



#define LEDR 9
#define LEDG 10
#define LEDB 11
 int timelimit=100;
// 關閉LED的函式
void turnoff(){
  digitalWrite(LEDR, LOW);
  digitalWrite(LEDG, LOW);
  digitalWrite(LEDB, LOW);
}
 
void setup() {                
  pinMode(LEDR, OUTPUT);
  pinMode(LEDG, OUTPUT);
  pinMode(LEDB, OUTPUT);
  turnoff();
}
 
// 每隔一秒改變LED的顏色
void loop() {
  turnoff();
  digitalWrite(LEDR, HIGH);
  delay(500);
 digitalWrite(LEDR, LOW);
 delay(500);
} 

// 根據接線圖定義控制R、G、B的腳位
#define LEDR 9
#define LEDG 10
#define LEDB 11

// 關閉LED的函式
void turnoff(){
  digitalWrite(LEDR, LOW);
  digitalWrite(LEDG, LOW);
  digitalWrite(LEDB, LOW);
}

void setup() {                
  pinMode(LEDR, OUTPUT);
  pinMode(LEDG, OUTPUT);
  pinMode(LEDB, OUTPUT);
  turnoff();
}

// 每隔一秒改變LED的顏色
void loop() {
  turnoff();
  digitalWrite(LEDR, HIGH);
  delay(1000);
  
  turnoff();
  digitalWrite(LEDG, HIGH);
  delay(1000);
  
  turnoff();
  digitalWrite(LEDB, HIGH);
  delay(1000);
  
  turnoff();
  digitalWrite(LEDR, HIGH);
  digitalWrite(LEDG, HIGH);
  delay(1000);
  
  turnoff();
  digitalWrite(LEDG, HIGH);
  digitalWrite(LEDB, HIGH);
  delay(1000);
  
  turnoff();
  digitalWrite(LEDB, HIGH);
  digitalWrite(LEDR, HIGH);
  delay(1000);


  turnoff();
  digitalWrite(LEDR, HIGH);
  digitalWrite(LEDB, HIGH);
  digitalWrite(LEDG, HIGH);
  delay(1000);

} 

2.利用pwm輸出,每一秒隨機出現顏色

 
#define LEDR 11
#define LEDG 10
#define LEDB 9

void setup() {                
  pinMode(LEDR, OUTPUT);
  pinMode(LEDG, OUTPUT);
  pinMode(LEDB, OUTPUT);
}

int r = 0;
int g = 0;
int b = 0;
void loop() {
  r = random(0, 255);
  g = random(0, 255);
  b = random(0, 255);
  analogWrite(LEDR, r);
  analogWrite(LEDG, g);
  analogWrite(LEDB, b);
  delay(1000);
}
wemos用
// 根據接線圖定義控制R、G、B的腳位
#define LEDR D4
#define LEDG D3
#define LEDB D2
int t = 5;
// 關閉LED的函式
void turnoff() {
  digitalWrite(LEDR, LOW);
  digitalWrite(LEDG, LOW);
  digitalWrite(LEDB, LOW);
}

void setup() {
  pinMode(LEDR, OUTPUT);
  pinMode(LEDG, OUTPUT);
  pinMode(LEDB, OUTPUT);
  turnoff();
}

// 每隔一秒改變LED的顏色
void loop() {
  //  turnoff();
playOne();

}
//依序亮一個燈
void playOne() {
  digitalWrite(LEDR, HIGH);
  delay(t);
  digitalWrite(LEDR, LOW);

  delay(t);
  digitalWrite(LEDG, HIGH);
  delay(t);
  digitalWrite(LEDG, LOW);
  delay(t);


  digitalWrite(LEDB, HIGH);
  delay(t);
  digitalWrite(LEDB, LOW);
  delay(t);
}
//依序亮二個燈
void playTwo() {
  digitalWrite(LEDR, HIGH);
  digitalWrite(LEDG, HIGH);
  delay(t);

  digitalWrite(LEDR, LOW);
  digitalWrite(LEDG, LOW);
  delay(t);

  digitalWrite(LEDB, HIGH);
  digitalWrite(LEDG, HIGH);
  delay(t);

  digitalWrite(LEDB, LOW);
  digitalWrite(LEDG, LOW);
  delay(t);


  digitalWrite(LEDB, HIGH);
  digitalWrite(LEDR, HIGH);
  delay(t);
  digitalWrite(LEDB, LOW);
  digitalWrite(LEDR, LOW);
  delay(t);
}

四、作業 1.請加入一個可變電阻,可改變其delay的時間。 五、參考資源 http://yehnan.blogspot.tw/2013/01/arduinorgb-led.html http://forum.arduino.cc/index.php/topic,8320.0.html http://howtomechatronics.com/tutorials/arduino/how-to-use-a-rgb-led-with-arduino/

2016年3月21日 星期一

Arduino的教學13-伺服馬達的使用(servo motor)

一、課程目標:學習利用可變電阻來控制伺服馬達
二、接線圖:

一般伺服馬達有三條線,電源(紅色)、接地(黑或棕色)、訊號線(白、黃、橘、藍....)
dataPin=9;

伺服馬達是控制轉幾度!最多180度。 三、程式碼:
Examples -> Servo -> Knob
每次轉1度,由1-180度 再轉回來
#include <Servo.h> // 匯入 Servo 這個 class
Servo myservo;          // 建立 myservo 這個 Servo 物件 
int pos = 0;                // 儲存伺服馬達旋轉角度

void setup()
{
  myservo.attach(9);  // 指定伺服馬達的 control line 為 Arduino Uno 的 pin 9
 } 

void loop()
{
  for(pos = 0; pos < 180; pos += 1)   // 一度一度由 0 度旋轉到 180 度
  {                                 
    myservo.write(pos);             
    delay(15);                      
  }
  for(pos = 180; pos>=1; pos-=1)     // 一度一度由 180 度旋轉到 0 度
  {                               
    myservo.write(pos);             
    delay(15);                      
  }
}


/*
 Controlling a servo position using a potentiometer (variable resistor)
 by Michal Rinott 

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

#include <Servo.h>

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

int potpin = 0;  // 可變電阻的pin analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin
int servoPin=9;//伺服馬達pin
void setup() {
  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023)
  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
}
四、作業練習:
如何將伺服馬達來回轉90度,三次?

2016年3月15日 星期二

Arduino的教學12-常用參考語法

1.數位輸入:File > Examples >01.Basics > Blink
//(1)設定檔
int ledPin =  13;      // the number of the LED pin

//(2)setup 函式
void setup() {
  pinMode(ledPin, OUTPUT);
}

//(3)loop 函式
void loop() {
    digitalWrite(ledPin, HIGH);
 delay(100);
    digitalWrite(ledPin, LOW);
 delay(100);
}
2.類比輸入與Serail Moniter:File > Examples >03.Analog > AnalogInput
//(1)設定檔
int sensorPin = A0;    // select the input pin 
int sensorValue = 0;  // the value coming from the sensor

//(2)setup 函式
void setup() {
Serial.begin(9600);
}

//(3)loop 函式
void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);
 Serial.println(sensorValue);
delay(10);

}
3.使用2x16液晶
//(1)設定檔
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//(2)setup 函式
void setup() {
 lcd.init();  //初使化
  lcd.backlight();//打開背景燈
  lcd.setCursor(1, 0);//設定 第1列,空1格開始
  lcd.print("Hello, world!");
  lcd.setCursor(2, 1);//設定 第2列,空2格開始
  lcd.print("sceond line");}

//(3)loop 函式
void loop() {
delay(100);
lcd.clear();
}

2016年3月6日 星期日

arduino-文章列表


Arduino的教學11- 數位輸入 button 的的使用

一、學習目標: 學習使用button來控制 led燈

二、重點說明:
按鈕一腳串接一個10k的電阻。

三、接線圖:
buttonPin = 2;
ledPin = 13;



四、程式碼
/*
  Button

 Turns on and off a light emitting diode(LED) connected to digital
 pin 13, when pressing a pushbutton attached to pin 2.


 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground

 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.


 created 2005
 by DojoDave 
 modified 30 Aug 2011
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}


練習01-設定按鈕後不同值(按鈕後依序出現 0-4值)
// set pin numbers:
const int buttonPin = 12;     // 按鈕輸入值pin

int ledCount=5;//除數
int no=0;  //流水號
// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status
int thisNo=0;  //餘數值
void setup() {
  pinMode(buttonPin, INPUT);   
  Serial.begin(9600);   
}

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
   
    no++;
    thisNo = no % ledCount;//取餘數
delay(100);
Serial.println(thisNo);
} 

    
  delay(100);
}
練習02-設定按鈕後 依序點亮不同的led燈


// set pin numbers:
const int buttonPin = 2;     // 按鈕輸入值pin
int ledPins[] = { 
  8,9,10};   // an array of pin numbers to which LEDs are attached

int ledCount=3;//除數
int no=0;  //流水號
// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status
int thisNo=0;  //餘數值
void setup() {
  pinMode(buttonPin, INPUT);   
  Serial.begin(9600);   

  for (int thisLed = 0; thisLed < ledCount; thisLed++) {
    pinMode(ledPins[thisLed], OUTPUT); 
  }

}

void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     

    no++;
    thisNo = no % ledCount;//取餘數
    //    digitalWrite(ledPins[thisNo], HIGH );


    for (int thisLed = 0; thisLed < ledCount; thisLed++) {
      if(thisLed == thisNo){

        digitalWrite(ledPins[thisLed], HIGH);
      }
      else{
        digitalWrite(ledPins[thisLed], LOW     );
      }

    }

    delay(100);
    Serial.println(thisNo);
  } 

  delay(100);
}



2016年1月24日 星期日

Arduino的教學10- 利用DHT11抓取溫度和濕度,並顯示於2x16 I2C LCD上

一、學習目標:
學習使用DHT11溫溼度感應器來測量溫度,並顯示於 I2C 2X16

二、重點說明
DHT11功能說明:
1、濕度測量範圍:20~90%RH;
2、濕度測量精度:±5%RH;
3、溫度測量範圍:0~50℃
4、溫度測量精度:±2℃
5、電源供應範圍: 3~5V
6、頻率不可超過:0.5Hz (每2秒一次)

三、接線圖
"+" vcc 極接5V,v
"-" Gnd 極接GND,
data pin接上要輸入的Pin腳=>接在2

四、程式碼
DHT11的程式碼1

#include <dht.h>    
#define dht_dpin 2 //定義訊號要從Pin 2 進來  
 
dht DHT; 
  
void setup(){   
Serial.begin(9600);   
delay(300);             //Let system settle   
Serial.println("Humidity and temperature\n\n");   
delay(700);             //Wait rest of 1000ms recommended delay before   
                        //accessing sensor   
}
  
void loop(){   
DHT.read11(dht_dpin);   //去library裡面找DHT.read11  
Serial.print("Humidity = ");   
Serial.print(DHT.humidity);   
Serial.print("% ");   
Serial.print("temperature = ");   
Serial.print(DHT.temperature);   
Serial.println("C ");   
delay(1000);  //每1000ms更新一次  
}

DHT11 + I2C LCD 程式碼
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

#include <dht.h>    
#define dht_dpin 2 //定義訊號要從Pin 2 進來  
dht DHT; 

int no=0;//計數器
void setup()
{
  lcd.init();                      // initialize the lcd 
Serial.begin(9600);
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("I2C+DHT11");
  Serial.println("Humidity and temperature\n\n");   
  delay(1000);  
}

void loop()
{
  no++;
  DHT.read11(dht_dpin);   //去library裡面找DHT.read11 
  //序列埠輸出
  Serial.print("Humidity = ");   
  Serial.print(DHT.humidity);   
  Serial.print("% ");   
  Serial.print("temperature = ");   
  Serial.print(DHT.temperature);   
  Serial.println("C "); 

  //資料顯示在LCD
  lcd.setCursor(0, 0);
  lcd.print("No.");
  lcd.print(no);
  lcd.setCursor(8, 1);
  lcd.print("H=");
  lcd.print(DHT.humidity);   
  lcd.setCursor(0, 1);
  lcd.print("T=");
  lcd.print(DHT.temperature);   
  delay(500);            //每500ms更新一次  
  lcd.clear();
}
五、參考資料: http://ming-shian.blogspot.tw/2014/05/arduino19dht11.html