Arduino小白的學習記錄:基於摩爾斯電碼的鐳射發射器實驗
一、介紹
由於其良好的指向性和能量集中性,鐳射廣泛用於醫療和軍事等領域。顧名思義,鐳射發射器模組是一種可以發射鐳射的模組。今天這個實驗呢,我們就用鐳射發射器來做一個製作一個摩爾斯電碼的發射裝置,是不是很好奇呢,接下里就讓我們一起來看一下吧!
圖5。1 鐳射發射器模組
二、材料準備
Arduino Uno 主機板*1
USB資料線*1
麵包板*1
鐳射發射器模組*1
杜邦線若干
三、實驗原理
鐳射是一種透過基於受鐳射發射的電子輻射的光學放大過程發光的裝置。鐳射與其他的光源不同,因為他們相干發光。
空間相干性使得鐳射可以聚焦到狹小的地方,從而使鐳射切割和光刻等應用以及鐳射束在很遠的距離保持狹窄(準直),從而實現鐳射指示器等應用。鐳射器還可以具有稿時間相干性,這使得它們具有非常窄的光譜,即它們僅發出單色光。它的時間相干性可以用來產生短至飛秒的光脈衝。
圖5。2 電路原理圖
這個實驗中我們透過鐳射發射器發射鐳射的時間間隔來模擬摩爾斯電碼,根據事先寫好的程式我們可以模擬出26個英文字母的大小寫和10個阿拉伯數字,以及一些字元,可以滿足一些基本的通訊需求了。
四、實驗過程
首先,我們需要建立電路,由於鐳射發射器模組只有兩個引腳,所以連線也很簡單,如圖我們首先將紅線接在板子的5V接腳上,一段連線鐳射發射器模組的VCC(實際中是S),將另一根白線接在板子的7號接腳上,另一端接在鐳射發射器模組的SIG端(實際中是-)。
圖5。3 類比電路連線圖
按照上面的說明接好線後就是圖5。4的樣子了。
圖5。4 實際的電路接線圖
給板子接上USB連線線後,我們就可以進行程式部分的工作了。
五、程式碼
/************************************
* 專案名字:鐳射器發射實驗
* 介面列表:
* laser Arduino Uno R3
* S 5V
* - 7
*
*編寫:南友***********************/
#include
“retrieval。h”
const
int
laserPin
=
7
;
//定義板子的7號引腳為laserPin
static
int
dotDelay
=
200
;
//設定一個基礎延遲時間:200毫秒
void
setup
()
{
pinMode
(
laserPin
,
OUTPUT
);
//定義板子的7號引腳為訊號的輸出埠
Serial
。
begin
(
9600
);
}
void
loop
()
{
char
ch
=
0
;
if
(
Serial
。
available
()
>
0
)
//從串列埠監視器中讀取資料
{
ch
=
Serial
。
read
();
//將讀取到的資料賦給字元型常量ch
}
morseSignal
(
ch
);
}
void
flashDot
(
char
cha
)
//函式定義
{
digitalWrite
(
laserPin
,
HIGH
);
if
(
cha
==
‘。’
)
{
delay
(
dotDelay
);
}
else
{
delay
(
dotDelay
*
3
);
//延時3倍的基礎時長
}
digitalWrite
(
laserPin
,
LOW
);
delay
(
dotDelay
);
}
void
flashSequence
(
char
*
sequence
)
//函式定義
{
int
i
=
0
;
while
(
sequence
[
i
]
!=
NULL
)
{
flashDot
(
sequence
[
i
]);
i
++
;
}
delay
(
dotDelay
*
3
);
}
void
morseSignal
(
char
ch
)
//函式定義
{
if
(
ch
>=
‘a’
&&
ch
<=
‘z’
)
{
flashSequence
(
letters
[
ch
-
‘a’
]);
}
else
if
(
ch
>=
‘A’
&&
ch
<=
‘Z’
)
{
flashSequence
(
letters
[
ch
-
‘A’
]);
}
else
if
(
ch
>=
‘0’
&&
ch
<=
‘9’
)
{
flashSequence
(
numbers
[
ch
-
‘0’
]);
}
else
if
(
ch
==
‘ ’
)
{
delay
(
dotDelay
*
4
);
//gap between words
}
}
因為在這個程式的開頭我們呼叫了一個頭檔案retrieval。h,所以在編譯的時候我們需要把標頭檔案也放在這個原始檔的資料夾下,這樣就可以在進行編譯的時候進行呼叫了。下面將標頭檔案部分的程式碼也放在下面:
#ifndef __RETRIEVAL_H__
#define __RETRIEVAL_H__
char
*
letters
[]
=
{
“。-”
,
//A
“-。。。”
,
//B
“-。-。”
,
//C
“-。。”
,
//D
“。”
,
//E
“。。-。”
,
//F
“——。”
,
//G
“。。。。”
,
//H
“。。”
,
//I
“。——-”
,
//J
“-。-”
,
//K
“。-。。”
,
//L
“——”
,
//M
“-。”
,
//N
“——-”
,
//O
“。——。”
,
//P
“——。-”
,
//Q
“。-。”
,
//R
“。。。”
,
//S
“-”
,
//T
“。。-”
,
//U
“。。。-”
,
//V
“。——”
,
//W
“-。。-”
,
//X
“-。——”
,
//Y
“——。。”
//Z
};
char
*
numbers
[]
=
{
“——-”
,
//0
“。——”
,
//1
“。。——-”
,
//2
“。。。——”
,
//3
“。。。。-”
,
//4
“。。。。。”
,
//5
“-。。。。”
,
//6
“——。。。”
,
//7
“——-。。”
,
//8
“——。”
//9
};
#endif
如果大家不知道怎麼建立這個標頭檔案的話,下面是我分享的一個百度網盤的連結,裡面就是一個編寫好的標頭檔案,大家直接下載下來也可以哦!
連結:
https://
pan。baidu。com/s/14C1PIJ
pvieBlxN6rtNdidg
提取碼:ibee
六、效果展示
將程式上傳到Arduino板子上後,我們就可以看到鐳射發射器的效果了。
圖5。5 鐳射發射器
如圖5。5所示,我們可以看到鐳射發射器處於一個常亮的狀態。接下來我們就透過一個影片來看看如何用這個鐳射發射器發射摩爾斯電碼吧!
七、總結分析
這個實驗的電路原理部分相對來說不難,主要可能關於摩爾斯電碼的程式碼實現部分有點繞,因為這裡需要編寫和呼叫很多函式,我們可以發現程式碼量也增加了很多,另外還呼叫了一個頭檔案。
這個小實驗最有意思的地方應該是透過串列埠監視器向鐳射發射器傳送訊號了,然後鐳射發射器將訊號以摩爾斯電碼的形式發射出來。我們直接閱讀這些由燈的亮滅組成的訊號可能有些困難,藉助一個摩爾斯電碼的表就會好很多。多試幾次,你就可以透過這個小實驗跟小夥伴進行一個簡單的通訊了,怎麼樣,是不是很有趣呢,快去試試吧~