Arduino創意編程基礎知識培訓

工程技術基礎知識培訓

content:
1. 認識Arduino
2. 學習常用元器件
3. C語言基本語法

/***************************************************************************************************/
/-----------------------------------------------------分界線-----------------------------------------------------/
/***************************************************************************************************/

一、 認識Arduino

1.什麼是arduino

Arduino 是一個開源電子原型平臺基於靈活、易於使用的平臺,這個平臺包含軟件和硬件。這是特意爲藝術家、設計師,業餘愛好者,和感興趣的人創建交互式對象和環境。
Arduino能通過各種各樣的傳感器來感知環境;通過控制燈光、馬達和其他的執行器來影響環境。板子上的微控制器可以通過Arduino的編程語言來編寫程序,編譯成二進制文件,燒錄進微控制器。對Arduino的編程是利用 Arduino編程語言和Arduino開發環境來實現的。基於Arduino的項目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上運行的軟件,他們之間進行通信 (比如 Flash, Processing, MaxMSP)來實現。

 2.發明人及發明原因

Arduino是意大利人發明的硬件和軟件,它的核心開發團隊成員包括:Massimo Banzi,David Cuartielles,Tom Igoe,Gianluca Martino,David Mellis 和 Nicholas Zambetti。
當然Arduino的發展也是有故事的:
在這裏插入圖片描述
據說Massimo Banzi之前是意大利Ivrea一家學校的老師。他的學生經常抱怨找不到便宜好用的微控制器。 2005年冬天,Massimo Banzi跟David Cuartielles討論了這個問題。 David Cuartielles是一個西班牙籍晶片工程師,當時在這所學校做訪問學者。兩人決定設計自己的電路板,並引入了Massimo的學生 Mellis爲電路板設計編程語言。兩天以後,Mellis就寫出了程式碼。又過了三天,電路板就完工了。這塊電路板被命名爲Arduino。幾乎任何人,即使不懂電腦編程,也能用Arduino做出 很酷的東西,比如對感測器作出迴應,閃爍燈光,還能控制馬達。
後來他們將Arduino相關設計圖放在了網上,保持設計的開放源碼理念,在共享創意許可下,任何人都被允許生產電路板的複製品,還能重新設計,甚至銷售原設計的複製品。你不需要付版稅,甚至不用取得 Arduino 團隊的許可。唯一被保留的只有Arduino這個名字。它被註冊成了商標。如果有人想用這個名字賣電路板,那他們可能必須付一點商標費用給 Arduino 的核心開發團隊成員。

3.arduino名字的由來

意大利北部一個如詩如畫的小鎮“Ivrea”,橫跨過藍綠色Dora Baltea河,它最著名的事蹟是關於一位受壓迫的國王。公元1002年,國王Arduin成爲國家的統治者,不幸的是兩年後即被德國亨利二世國王給廢掉了。今日,在這位無法成爲新國王的出生地,cobblestone街上有家叫“di Re Arduino”的酒吧紀念了這位國王。Massimo Banzi經常光臨這家酒吧,而他將這個電子產品計劃命名爲Aruino以紀念這個地方。

4.開源硬件和開源軟件

arduino板就是一種保持了開源理念的硬件,簡單來講就是將設計的原理圖進行公佈,而且允許生產電路板的複製品,能重新設計,銷售原設計的電路板。
開源軟件同樣也是將程序源碼進行開放,擁有開放的源代碼庫,可以免費調用,不需要重寫源代碼。
eg:
蘋果公司爲閉源:
IPhone–IOS
MAC BOOK–OS
IPad–IPadOS

google公司爲開源:
小米–MIUI OS
錘子–Smartisan OS
vivo–Funtouch OS

開源就是資源共享,開源的好處可見一斑,可以節省研發費用及研發時間,對社會發展起到很好的推動作用。

5.認識arduino Uno板

在這裏插入圖片描述
在這裏插入圖片描述
當前arduino官方發行了兩版外觀幾乎相同的arduino Uno板卡,唯一的不同在於芯片的封裝類型,當然使用起來幾乎一樣;我們就以arduino Uno板卡爲例對arduino硬件進行介紹。
Arduino Uno板卡採用芯片名稱爲ATMega328P,板子的右上角爲一個USB-B型串口,可直接通過串口線與電腦設備連接;左上角爲DC電源母座,可外接電源供電;另外整個板卡的外圍區域分爲3種不同類型的端口區域,分別爲power區域、DIGITAL區域及ANALOG區域。

6.arduino IDE的安裝及使用

我們統一使用的arduino IDE的版本,分別適用於windows系統和Linux系統,版本號分別爲1.8.6和1.8.7,可以在相應的系統下解壓直接打開軟件使用。在這裏插入圖片描述
打開後的界面:
在這裏插入圖片描述

7.基本arduino編程語言使用

void setup 爲初始化函數,用來對需要使用的端口進行設置。
void loop 爲循環函數(主函數),用來循環執行寫入的命令。

我們需要通過串口線將PC機和Uno板進行連接,這被稱爲串口連接。我們可以通過串口線將我們編好的程序寫入Uno板,讓Uno板執行相應的命令。
首先通過LED燈來試一下。
在這裏插入圖片描述

/*************閃爍程序************/
void setup()  //爲引腳設置輸入輸出模式
{
	pinMode(2,OUTPUT);  //設置2引腳爲輸出
	pinMode(3,OUTPUT);  //設置3引腳爲輸出
}//(只運行一次)

void loop()  //進入循環
{
	digitalWrite(2,HIGH);  //2引腳置高位
	digitalWrite(3,LOW);   //3引腳置低位
	delay(300);            //延時300毫秒
	digitalWrite(2,LOW);   //2引腳置低位
	digitalWrite(3,LOW);   //3引腳置低位
	delay(300);            //延時300毫秒
}//(循環執行)

設置流水燈程序:

/**********流水燈程序*************/

void setup()
{
  pinMode(2,OUTPUT);  //設置爲輸出引腳
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
}
void loop()
{
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  delay(300);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  delay(300);
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
  delay(300);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  delay(300);
  digitalWrite(6,HIGH);
  digitalWrite(7,LOW);
  delay(300);
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  delay(300);
}

/******************************************************************************/
/------------------------------------分界線---------------------------------/
/******************************************************************************/

二、常用元器件的使用

/----------------------------------拓展板---------------------------------/
在這裏插入圖片描述
我把常用的元器件分爲兩種:一種叫做傳感器,一種叫做執行器。
傳感器是將外界的變化以電信號的方式傳輸回arduino板,得到反饋。
執行器是消耗arduino板的電能,改變外界的環境。

/----------------------------------------傳感器------------------------------------/
1.按鍵的使用

在這裏插入圖片描述
首先需要知道傳感器爲數字傳感器還是模擬傳感器,然後接到相應的針腳。
然後通過串口監視器得到傳感器的反饋值。

(串口監視器)
在這裏插入圖片描述

  /*****************打印Hello!***********************/
  void setup()
  {
    Serial.begin(9600) //初始化串口,一般波特率爲9600
  }

  void loop()
  {
    Serial.print("Hello!"); //串口打印
    //Serial.println("Hello!"); //串口換行打印
  }

  /******************打印按鍵值***************************/
  void setup()
  {
    Serial.begin(9600);
    pinMode(4,INPUT);
  }

  void loop()
  {
    Serial.println(digitalRead(4));
  }

在這裏插入圖片描述
按鍵上拉/下拉電阻
在這裏插入圖片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/

2.電位器的使用

在這裏插入圖片描述
判斷爲數字還是模擬傳感器
通過串口監視器進行觀察

  /******************打印電位器值***************************/
  void setup()
  {
    Serial.begin(9600);
    pinMode(A0,INPUT);
  }

  void loop()
  {
    Serial.println(analogRead(A0));
  }

觀察一下模擬信號的變化

3.超聲波的使用

超聲波的接線:
在這裏插入圖片描述
VCC - > 正極
GND - > 負極
Trig - > 輸出
Echo - > 接收

/******************************************************************************************************************************/
/-----------------------------------------------------------分割線--------------------------------------------------------/
/******************************************************************************************************************************/

超聲波原理:
在這裏插入圖片描述
/******************************************************************************************************************************/
/------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/
超聲波的使用:

#include<SR04.h>
SR04 sr04(6,7); //ECHO & Trig
               // 接收 & 發送
void setup()   
{
  pinMode(6,INPUT); //Echo
  pinMode(7,OUTPUT); //Trig
  Serial.begin(9600);
}
int distance;
void loop()
{
  distance = sr04.Distance();
  Serial.print(distance);
  Serial.println(" cm");
}

需要用到一個 #include<> 來導入特定的庫文件
這裏導入的庫名叫SR04,是超聲波專用庫,".h"是它的後綴名。
並且需要用到“對象的實例化”-----SR04 sr04(6, 7);

各位可以把SR04這個庫比喻成一個蓋樓的圖紙,只有一個圖紙是不能住人的。
需要通過一個實例化把它變成一個實際可用的樓房,纔可以被我們使用。

庫其實就是開源項目的一個例子,我們想要使用一個複雜元器件,不需要弄清楚具體的原理,僅需要通過庫文件來使用它就可以。可見開源對我們的開發有着很大的好處。

4.庫文件的導入

/******************************************************************************************************************************/
/------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/
在這裏插入圖片描述
/******************************************************************************************************************************/
/------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/
在這裏插入圖片描述

5.LCD1602的使用及I2C通信

在這裏插入圖片描述
/******************************************************************************************************************************/
/------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/
在這裏插入圖片描述
/******************************************************************************************************************************/
/------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/
在這裏插入圖片描述
/******************************************************************************************************************************/
/------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/

在這裏插入圖片描述
/******************************************************************************************************************************/
/------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/
在這裏插入圖片描述

6.PWM脈寬調製信號

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
電位器控制燈亮度:

在這裏插入圖片描述

void setup()
{
  pinMode(A0,INPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  digitalWrite(2,0);
}
int a,b;
void loop()
{
  a = analogRead(A0);
  b = map(a,0,1023,0,255);
  analogWrite(3,b);
}

三 C語言基本語法

1.基本數據類型

在這裏插入圖片描述
補充一個類型:布爾類型 —> bool :True & False

2.數據運算

在這裏插入圖片描述
int flag;
自增運算:flag++;
自減運算:flag- -;

/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/

3 if的用法

在這裏插入圖片描述
按鍵控制燈程序:

/*********單按鍵控制燈*******/     (if-else語句)
  void setup()
  {
    Serial.begin(9600); //初始化串口
    pinMode(2,OUTPUT);  //設置2號針腳爲輸出
    pinMode(3,OUTPUT);  //設置3號針腳爲輸出
    pinMode(4,INPUT);   //設置4號針腳爲輸入
  }
  void loop()
  {
    Serial.println(digitalRead(4)); //串口打印4號針腳數值
    
    if(digitalRead(4)==LOW)  //判斷如果4號針腳爲LOW(注意=和==的區別)
    {
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW);
    }
    else                     //其他情況
    {
      digitalWrite(2,LOW);
      digitalWrite(3,LOW);
    }
  }
  /*********************雙按鍵控制燈********************/
  void setup()
  {
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,INPUT);
    pinMode(5,INPUT);
  }
  void loop()
  {
    if(digitalRead(4)==LOW)
    {
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW);
    }
    if(digitalRead(5)==LOW)
    {
      digitalWrite(2,LOW);
      digitalWrite(3,LOW);
    }
  }
/***********************單按鍵切換燈亮滅**********************/
  void setup()
  {
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,INPUT);
  }
  int flag = 0;  //定義一個整型變量(要放在loop循環外面)
  void loop()
  {
    if(digitalRead(4)==LOW)
    {
      flag = flag + 1;    //flag在原來的基礎上加 1
      delay(300);         //延時防誤判
    }
    if (flag % 2 == 0)  //判斷flag爲偶數(%爲取餘數)
    {
      digitalWrite(2,LOW);
      digitalWrite(3,LOW);
    }
    if(flag % 2 == 1)   //判斷flag爲奇數
    {
      digitalWrite(2,HIGH);
      digitalWrite(3,LOW);
    }
  }
5 for循環的使用

在這裏插入圖片描述
/******************************************************************************************************************************/
/----------------------------------------------------------------------------分割線---------------------------------------------------------------/
/******************************************************************************************************************************/
在這裏插入圖片描述
呼吸燈:

int i;//定義int(整型)變量i,用來循環
void setup()
{
pinMode(3,OUTPUT);  //設置3號針腳作爲輸出針腳

}
void loop()
{
  for(i=0;i<=255;i++)  //使用for循環實現呼吸燈漸亮
    {
      analogWrite(3,i);//模擬量寫入當前的亮度級別
      delay(10);       //維持在亮度爲i的級別上10毫秒
      }
  for(i=255;i>=0;i--) //使用for循環實現呼吸燈漸滅
    {
      analogWrite(3,i);
      delay(10);
      }
}
6 while循環的使用

在這裏插入圖片描述
/******************************************************************************************************************************/
/------------------------------------------------------------------while和if的區別-------------------------------------------------------------/
/******************************************************************************************************************************/
在這裏插入圖片描述

 7 子函數的用法

在這裏插入圖片描述

void setup()
{
  pinMode(2,OUTPUT); //燈
  pinMode(3,INPUT); //按鍵
}

void open();
void close();  //聲明函數

void loop()
{
  if (digitalRead(3) == 0)
  {
    open();
  }
  else
  {
    close();
  }
}
void open()
{
  digitalWrite(2,0); //開燈
}
void close()
{
  digitalWrite(2,1); //關燈
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章