您無(wú)聊嗎?還可以建造一個(gè)激光炮塔。您知道嗎?一個(gè)會(huì) pew pew 發(fā)射,向許多不同方向發(fā)射紅光的光束,甚至可能會(huì)扔進(jìn)煙霧機(jī)嗎?是的,其中之一。
您需要什么
2個(gè)伺服器
激光模塊,例如該傳感器套件
壓電蜂鳴器或其他小型輸出設(shè)備
用于固定
長(zhǎng)母-公跳線(xiàn)以及常規(guī)跳線(xiàn)的金屬電纜扎帶
可選地,需要一臺(tái)煙霧機(jī)–激光的功率非常低,因此即使在黑暗的房間中也無(wú)法看到無(wú)煙的光束。

構(gòu)建計(jì)劃
轉(zhuǎn)塔的基本思想是將激光模塊放在一個(gè)伺服器的頂部以提供水平旋轉(zhuǎn)。然后將該封裝安裝到另一個(gè)呈90度角放置的伺服器上,以提供垂直移動(dòng)。我們有一個(gè)壓電揚(yáng)聲器來(lái)提供 pew pew 聲音效果,我正在扔煙機(jī)以達(dá)到良好的效果。
伺服測(cè)試
視您的伺服器而定,導(dǎo)線(xiàn)的顏色可能會(huì)有所不同,但是通常:
紅色是正極線(xiàn),在我的兩個(gè)伺服器上,它都是三芯線(xiàn)的中心-連接到+ 5v
棕色或黑色是負(fù)極,要連接到Arduino的GND。
白色或橙色是信號(hào)線(xiàn),要連接到具有PWM功能的數(shù)字I/O針(在下面的演示中為9和10)。
連接好兩個(gè)伺服器后,請(qǐng)上傳以下示例代碼。我已經(jīng)命名了一個(gè)伺服“ hori”來(lái)控制水平運(yùn)動(dòng),另一個(gè)命名為“ vert”。每個(gè)人都應(yīng)執(zhí)行全方位的運(yùn)動(dòng)掃描(在我的情況下約為60度)。
#include
Servo vert,hori; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
hori.attach(9);
vert.attach(10); // attaches the servo on pin 9,10 to the servo objects
vert.write(0);
hori.write(0);
}
void loop()
{
for(pos = 0; pos 《 180; pos += 10) // goes from 0 degrees to 180 degrees
{ // in steps of 10 degrees
vert.write(pos);
hori.write(pos); // tell servo to go to position in variable ‘pos’
delay(100); // waits 100ms for the servo to reach the position
}
for(pos = 180; pos》=1; pos-=10) // goes back from 180 degrees to 0 degrees
{
vert.write(pos); // tell servo to go to position in variable ‘pos’
hori.write(pos);
delay(100); // waits 100ms for the servo to reach the position
}
}
一切都好嗎?然后繼續(xù)前進(jìn)。
測(cè)試激光和 Pew Pew 聲音
激光模塊就像一個(gè)LED,但是模塊中內(nèi)置了一個(gè)電阻器。因此我們可以將其直接連接到數(shù)字I/O-非常簡(jiǎn)單。如果您使用的激光模塊與我相同,則“ – ”將進(jìn)入 GND , S 將進(jìn)入引腳12。上面的示例代碼使第12針成為輸出:
int laser = 12;
pinMode(laser,OUTPUT);
然后使用標(biāo)準(zhǔn)的 digitalWrite()方法在每個(gè)循環(huán)中使該引腳閃爍,每次循環(huán)閃爍。
我們將僅使用PWM以舒適的聲音水平驅(qū)動(dòng)壓電蜂鳴器-如果需要,您可以嘗試使用音調(diào)庫(kù),但是我只需要一個(gè)簡(jiǎn)單的噪音即可。將黑線(xiàn)接地,將紅線(xiàn)連接到引腳11。在相關(guān)引腳上定義您的蜂鳴器,設(shè)置為輸出模式,然后使用 analogWrite(buzzer,100)進(jìn)行激活(或您想要的最多254個(gè)數(shù)字);和 analogWrite(buzzer,0)(關(guān)閉模擬音頻)。
完整的示例代碼已修改為掃描兩個(gè)伺服,激活激光并播放令人討厭的聲音。
您的所有組件都應(yīng)該正常工作-現(xiàn)在我們需要將所有組件綁在一起。
創(chuàng)建轉(zhuǎn)塔
使用電纜扎帶,將一個(gè)伺服器連接到另一個(gè);哪一個(gè)都沒(méi)關(guān)系,只需確保其中一個(gè)在水平方向上移動(dòng)而另一個(gè)在垂直方向上移動(dòng)即可。如果角度不正確,您可以在測(cè)試期間拔下轉(zhuǎn)子葉片并重新安裝。
使用一些堅(jiān)固的造型線(xiàn)來(lái)固定激光器
最后,我將整個(gè)設(shè)備連接到帶有更多電纜扎帶的桌腿上一點(diǎn)廢木頭。
對(duì)炮塔編程
我不認(rèn)識(shí)你,但是我的想法是激光炮塔來(lái)自無(wú)數(shù)的科幻電影和《星際迷航》劇集。總是有人會(huì)飛越炮塔,而 pew-pew 的小射門(mén)會(huì)以?huà)呗拥哪J斤w出,總是太慢了幾毫秒,所以我們的主角實(shí)際上并沒(méi)有受到打擊。這就是我要復(fù)制的內(nèi)容,盡管可以隨意調(diào)整主例程以適合您對(duì)轉(zhuǎn)塔應(yīng)該做什么的想法。
這是我最終在主循環(huán)中使用的偽代碼:
隨機(jī)化脈沖之間的時(shí)間,以及每次射擊之間的時(shí)間。
隨機(jī)化每個(gè)伺服,垂直和水平方向的開(kāi)始和結(jié)束位置。
隨機(jī)化拍攝數(shù)量。
計(jì)算出每次拍攝后的變化程度,以開(kāi)始和結(jié)束位置之間的差除以拍攝數(shù)量。
將伺服器移至開(kāi)始位置,并稍等一會(huì)兒到達(dá)目的地(100毫秒)
循環(huán),直到拍攝完所有鏡頭為止,每次按先前計(jì)算的方式稍微移動(dòng)伺服器;
重復(fù)。
我還添加了一個(gè)單獨(dú)的 fire()方法來(lái)稍微構(gòu)建代碼更好。調(diào)整所有 random()函數(shù)的范圍,以加快或減慢每個(gè)參數(shù);或增加鏡頭數(shù)量以增加舞蹈俱樂(lè)部的氛圍。向下滾動(dòng)以查看操作中的代碼的視頻!
#include
Servo vert,hori; // create servo object to control a servo
int pos = 0; // variable to store the servo position
int laser = 12;
int buzzer = 11;
void setup()
{
hori.attach(9);
vert.attach(10); // attaches the servo on pin 9 to the servo object
pinMode(laser,OUTPUT);
pinMode(buzzer,OUTPUT);
}
void loop()
{
int timeBetweenBursts = random(200,1000);
int timeBetweenShots = random(50,200);
int vertStart = random(1,180);
int vertEnd = random(1,180);
int horiStart = random(1,180);
int horiEnd = random(1,180);
int numShots = random(5,20);
int vertChange = (vertEnd - vertStart) / numShots; //how much to move vertical axis by each shot
int horiChange = (horiEnd - horiStart) / numShots;
vert.write(vertStart);//let it get to start position first, wait a little
hori.write(horiStart);
delay(100);
for(int shot = 0; shot vert.write(vertStart);
hori.write(horiStart);
vertStart += vertChange;//increment the vert value for next time
horiStart += horiChange;
fire();
delay(timeBetweenShots); //add a bit of variety to the speed of shots
}
delay(timeBetweenBursts);
}
void fire(){
digitalWrite(laser,HIGH);
analogWrite(buzzer,100);
delay(20);//adjust this to change length of turret shot
digitalWrite(laser,LOW);
analogWrite(buzzer, 0);
}
操作中
我認(rèn)為這個(gè)小玩具沒(méi)有實(shí)際用途,但這確實(shí)很有趣,而且您可以調(diào)整很多變量以獲得理想的效果。也許對(duì)于自制樂(lè)高電影會(huì)派上用場(chǎng)嗎?
責(zé)任編輯:wv
-
激光
+關(guān)注
關(guān)注
21文章
3668瀏覽量
69699 -
Arduino
+關(guān)注
關(guān)注
190文章
6526瀏覽量
197083
發(fā)布評(píng)論請(qǐng)先 登錄
Inces-Gaussian光束產(chǎn)生渦旋陣列激光光束的觀測(cè)
Inces-Gaussian光束產(chǎn)生渦旋陣列激光光束的觀測(cè)
光與電的毫秒級(jí)博弈:構(gòu)建基于LTP激光位移技術(shù)的真空斷路器機(jī)械特性“數(shù)字孿生”圖譜
ToF 技術(shù)再進(jìn)化:面陣固態(tài)激光雷達(dá)在各環(huán)境中的可靠性
自動(dòng)駕駛激光雷達(dá)可以安裝在哪些位置?
如何用Arduino Nano/UNO R3開(kāi)發(fā)板給另一個(gè)Arduino IDE不能下載的Arduino Nano/UNO R3開(kāi)發(fā)板重新燒錄引導(dǎo)程序bootlaoder
Arduino與LabVIEW聯(lián)合編程指南
激光器電源技術(shù)電子書(shū)
免費(fèi)分享Arduino入門(mén)+進(jìn)階(全套例程+書(shū)籍)
如何使用Arduino構(gòu)建激光炮塔
評(píng)論