您無(wú)聊嗎?還可以建造一個(gè)激光炮塔。您知道嗎?一個(gè)會(huì) pew pew 發(fā)射,向許多不同方向發(fā)射紅光的光束,甚至可能會(huì)扔進(jìn)煙霧機(jī)嗎?是的,其中之一。
您需要什么
2個(gè)伺服器
激光模塊,例如該傳感器套件
壓電蜂鳴器或其他小型輸出設(shè)備
用于固定
長(zhǎng)母-公跳線以及常規(guī)跳線的金屬電纜扎帶
可選地,需要一臺(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)線的顏色可能會(huì)有所不同,但是通常:
紅色是正極線,在我的兩個(gè)伺服器上,它都是三芯線的中心-連接到+ 5v
棕色或黑色是負(fù)極,要連接到Arduino的GND。
白色或橙色是信號(hào)線,要連接到具有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)單的噪音即可。將黑線接地,將紅線連接到引腳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)固的造型線來(lái)固定激光器
最后,我將整個(gè)設(shè)備連接到帶有更多電纜扎帶的桌腿上一點(diǎn)廢木頭。
對(duì)炮塔編程
我不認(rèn)識(shí)你,但是我的想法是激光炮塔來(lái)自無(wú)數(shù)的科幻電影和《星際迷航》劇集??偸怯腥藭?huì)飛越炮塔,而 pew-pew 的小射門會(huì)以掃掠的模式飛出,總是太慢了幾毫秒,所以我們的主角實(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)注
20文章
3463瀏覽量
67105 -
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192039
發(fā)布評(píng)論請(qǐng)先 登錄
通過(guò)Arduino Nano Matter開(kāi)發(fā)板構(gòu)建智能卷簾系統(tǒng)

VirtualLab應(yīng)用:Ince-Gaussian光束產(chǎn)生渦旋陣列激光束的觀測(cè)
如何使用Arduino實(shí)現(xiàn)CAN總線通信呢
VirtualLab Fusion應(yīng)用:Ince-Gaussian光束產(chǎn)生渦旋陣列激光束的觀測(cè)
AGV激光導(dǎo)航定位技術(shù)綜述與發(fā)展趨勢(shì)

開(kāi)源項(xiàng)目!基于 Arduino 的 MIDI 架子鼓
基于Arduino的串口通信項(xiàng)目
stm32與Arduino的比較
激光雷達(dá)在SLAM算法中的應(yīng)用綜述

如何使用Arduino實(shí)現(xiàn)CAN總線通信
激光雷達(dá)的工作原理和分類

AGV激光導(dǎo)航定位技術(shù)與構(gòu)建地圖

激光焊接工藝有哪些?
軒展科技 FCB-EV9520L攝像機(jī)模組:激光炮砍樹(shù)的智能視覺(jué)解決方案

評(píng)論