---
# System prepended metadata

title: 0612 Arduino01 Preview
tags: [Arduino 回家作業]

---

---
title: 0612 Arduino01 Preview
tags: Arduino 回家作業
---

# 0612 Arduino01 回家作業

## [計數器](https://www.tinkercad.com/things/4tP9KugQtfr-grand-robo/editel?sharecode=bWZeQGBNTpSfKcdObW2S9JRnhd9MSh2oy1gfdE1kEcE)
![](https://i.imgur.com/4GNDaqF.png)
```// C++ code
//
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 10, 9, 8, 3);

void setup()
{
  pinMode(13, OUTPUT);
  pinMode(7, INPUT);
  pinMode(6, INPUT);
  pinMode(5, INPUT);
  pinMode(4, INPUT);
  Serial.begin(9600);
  digitalWrite(13, HIGH);
}

int oneMinute = 60;
int fiveMinute = 300;
int tenMinute = 600;
int countDown = -1;
int pause = 0;
int tmp = 0;

void loop()
{
  if(digitalRead(5)) {
    countDown = oneMinute;
    return delay(10);
  }
  if(digitalRead(6)) {
    countDown = fiveMinute;
    return delay(10);
  }
  if(digitalRead(7)) {
    countDown = tenMinute;
    return delay(10);
  }
  if(digitalRead(4)) {
    if(pause) {
      pause = 0;
      countDown = tmp;
      lcd.setCursor(0, 1);
      lcd.print("");
    }
    else {
      pause = 1;
      tmp = countDown;
      countDown = -1;
      lcd.setCursor(0, 1);
      lcd.print("pasue");
      delay(1000);
    }
  }
  
  if(countDown >= 0) {
    // 設定 LCD 陣列的 Columns 及 rows
    lcd.begin(16, 2);
    // 輸出訊息至 LCD
    lcd.print(countDown/60);
    lcd.print(":");
    lcd.print(countDown%60);
    --countDown;
 	delay(1000);
  }
}  
```

## [實作有四種聲音的鋼琴鋼琴](https://www.tinkercad.com/things/33eOxkVTgZJ-stunning-jaiks-leelo/editel?sharecode=4BiRCtDn4pv_GBv5DYdvyMr2GH-u56ygvMVzmKlpqPY)

![](https://i.imgur.com/HlBEQ3I.jpg)
```C++
// C++ code
//
/*
  Keyboard

  Plays a pitch that changes based on a changing
  input circuit:
  * 3 pushbuttons from +5V to analog in 0 through
  * 3 10K resistors from analog in 0 through 3 to ground
  * 8-ohm speaker on digital pin 8
*/

void setup()
{
  pinMode(8, OUTPUT);
  
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);
}

void loop()
{
  // if button press on A0 is detected
  if (digitalRead(A0) == HIGH) {
    tone(8, 440, 100); // play tone 57 (A4 = 440 Hz)
  }
  // if button press on A1 is detected
  if (digitalRead(A1) == HIGH) {
    tone(8, 494, 100); // play tone 59 (B4 = 494 Hz)
  }
  // if button press on A2 is detected
  if (digitalRead(A2) == HIGH) {
    tone(8, 523, 100); // play tone 60 (C5 = 523 Hz)
  }
  // if button press on A3 is detected
  if (digitalRead(A3) == HIGH) {
    tone(8, 587, 100); // play tone 62 (D5 = 587 Hz)
  }
  delay(10); // Delay a little bit to improve simulation performance
}
```

## [倒車雷達](https://www.tinkercad.com/things/g26QRqYMIQq-incredible-luulia-fulffy/editel?sharecode=N28sKkzYv-pNaaKb-tApmfwKdUusub1fRGwjMGk43L0)
![](https://i.imgur.com/TTTSVdo.png)
```c++
const int SENSOR_PIN=A0;
const int BUZZER_PIN=A1;
const int BUZZER_FREQUENCE=200;
const int DANGER_DISTANCE=200;
int duration=0;
int counter=0;
int cm=0;

void setup()
{
 Serial.begin(9600);
 pinMode(BUZZER_PIN,OUTPUT);
}

long microsecondsToCentimeters(long microseconds) // get distance from duration
{
   return microseconds / 29 / 2;
}

void loop()
{
  // send a signal
  pinMode(SENSOR_PIN, OUTPUT);
  digitalWrite(SENSOR_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(SENSOR_PIN, HIGH);
  delayMicroseconds(5);
  digitalWrite(SENSOR_PIN, LOW);

  // receive signal
  pinMode(SENSOR_PIN, INPUT);
  duration = pulseIn(SENSOR_PIN, HIGH);
	
  // compute distance from signal duration
  cm = microsecondsToCentimeters(duration);  

  if(cm<(DANGER_DISTANCE/100))// extreme dangerous
  {
    tone(BUZZER_PIN, BUZZER_FREQUENCE, 1000);
    delay(1000);
  }
  else if(cm<DANGER_DISTANCE)// dager, higher frquence when closer distance
  {
    for(int i=0;i<DANGER_DISTANCE/cm;i++){
       tone(BUZZER_PIN, BUZZER_FREQUENCE, 100);
      delay(1000/DANGER_DISTANCE*cm);
    }
  }
}
```
## 問答題

### 伺服馬達運作原理
![](https://i.imgur.com/P8UN2JI.png)
伺服馬達的基本原理是接受 PWM 訊號，經由內部電路計算出馬達的轉動角度，大多數伺服馬達旋轉角度是 0 到 180 度，PWM 訊號的頻率必須是 50 Hz，控制馬達角度的脈衝持續時間約是 1.0 ms 到 2.0 ms，脈衝持續時間若為 1.0 ms 時角度為 0 度，1.2 ms 時角度為 45 度，1.5 ms 時角度為 90 度，2.0 ms 時角度為 180 度。

伺服電機分為交流和直流兩種
直流伺服電機機體較細長，轉子慣性較小，且具有線性反應佳與簡單易於控制特性.直流伺服電機操作容易，旋轉方向由電流決定，旋轉速度由改變電壓來控制
 
交流伺服電機使用在感應電機與交流無刷電機。為了讓感應電機變化旋轉速度，必須改變電源頻率.無刷伺服馬達的控制原理是將鐵製核心置於外部。當轉子成為暫時性的磁鐵，定子則成為繞鐵線圈。外部電路的電流將會在既定的轉子位置進行反轉。所以，此款伺服馬達是由交流電所驅動的。


### LCD螢幕運作說明
  主要是利用前後偏光片與前後導電玻璃(透明電極)之間的液晶分子改變極化光的極化方向，造成每一個畫素亮（白）與暗（黑）的變化，再利用彩色濾光片產生紅（R）、綠（G）、藍（B）三種不同顏色排列組合成我們所看到的影像
 #### 流程:LED發出白光，經過導光板照亮整個畫面>穿過擴散膜讓光更柔和>稜鏡膜把光集中到一定角度，確保光往正確的方向走>後偏光片讓光極化，只讓特定特定方向的光通過>後透明電極，通電影響液晶分子排列>薄膜電晶體（TFT）控制電壓大小>前透明電極>穿過彩色濾光片>前偏光片>產生畫面
  ![](https://i.imgur.com/akRLWpK.png)

## 「如何把文組的同學教會寫程式」微講座心得 至少 150 字

> 這次浩文老師的課程我很喜歡，互動性十足。從 slido 到問卷填答、統計資料，還有線上的背景調查，整堂課程沒有無聊想睡的環節。 
> 與不同背景的人溝通合作也幾乎是每個人的必修課，因為現在這個時代已經無法單打獨鬥樣樣來，由不同背景的人組成團隊已成必然。
> 「用他的語言講給他聽」整堂課的重點濃縮大概就是這句話了。至於要如何知道對方的背景，知道對方的語言，那也是必須要練習的了。
> [name=楊傑安]
  這次演講的內容真的很活潑，也很有趣，透過很多互動跟活動讓我們一直專注在演講上面。從做問卷到分析問卷後的每個意義，告訴我們要去了解不同行業的人怎麼想。在告訴不是同行業的人時，也要站在他的角度告訴他你的專業，也透過看影片的方式，讓大家了解到其實一個團隊裡面大家不能只會自己領域方面的事，各方面的了解會讓整個團隊行動起來更流暢。
> [name=陳靖潍]

>浩文老師從一開場就給人一種強烈開朗風趣的感覺，不管是對於希望大家一起放開心胸感受遠距教學，到後來一起填的一份多元領域問卷，老師用很輕鬆寫意的方式帶領大家探討跨領域合作的嚴肅議題。
>從在學校的同儕之間到未來出社會之後更為緊湊的跨領域合作，如何理解並有效的和背景完全不同的成員進行溝通，完成彼此的責任和共同目標，是最重要的能力。
> [name=洪宇辰]

>這次浩文老師的課程我最印象深刻的就是問卷填答的部分，浩文老師捨棄以往演講都是單方面的給予，改成利用問卷調查的方式，造成非常多的互動，整個演講都很有趣。浩文老師利用問券的方式，讓這個來自很多很多科系的新科技、新媒體的的人對彼此有更深的了解。甚至在進一步的給我們未來進入職場非常重要的團隊合作的啟發。
>[name=李智宇]
>
>上周可以有幸參與張老師的演講，我個人覺得真的收穫了很多的。在課程中講師有給我們做一下小測驗，讓我們簡單了解一下針對不同背景的人，會有怎樣的想法。我覺得這個測驗真的還滿有趣的。後來講師開始分享給我們知道業界目前比較喜歡那類型的人才。其中教會我們最重要的一點就是溝通，如果我們不懂得溝通，真的很難和其他人合作。特別是和一位比較喜歡刁難我們的外國人，懂得用別人的語言讓人家覺得我們真心想了解和解決問題。這一點真的很重要的。
>[name=顏偉勝]