資料介紹
描述
“Segbot”是 UIUC ME 461 級(jí)制造的平衡 segway 機(jī)器人。segbot 由 Dan Block (d-block@illinois.edu) 教授設(shè)計(jì)的電路板和 F28379D 微控制器組成,該微控制器是德州儀器 C2000 系列的一部分。該項(xiàng)目的目標(biāo)是讓 segbot 播放歌曲和舞蹈以響應(yīng)檢測(cè)到不同的音符。
音符檢測(cè)
音符檢測(cè)是使用模數(shù)轉(zhuǎn)換完成的,將從麥克風(fēng)接收到的模擬信號(hào)轉(zhuǎn)換為數(shù)字值。沒有占空比輸出的脈寬調(diào)制被用作定時(shí)器,以 10 kHz 的采樣率觸發(fā) ADC 中斷。為了識(shí)別不同的頻率,使用Goertzel 算法一次對(duì) 1000 個(gè) ADC 值進(jìn)行離散傅里葉變換。如果算法的輸出超過某個(gè)閾值,則檢測(cè)到音符。閾值是一個(gè)稍微隨意的值,調(diào)整為在適當(dāng)?shù)臅r(shí)間做出響應(yīng),這意味著如果由于意外事件(例如落筆)而出現(xiàn)頻率,則不會(huì)檢測(cè)到音符。
// DFT with Goertzel Algorithm
float goertzel_mag(int numSamples,int TARGET_FREQUENCY,int SAMPLING_RATE, float* data)
{
int k,i;
float floatnumSamples;
float omega,sine,cosine,coeff,q0,q1,q2,magnitude,real,imag;
float scalingFactor = numSamples / 2.0;
floatnumSamples = (float) numSamples;
k = (int) (0.5 + ((floatnumSamples * TARGET_FREQUENCY) / SAMPLING_RATE));
omega = (2.0 * PI * k) / floatnumSamples;
sine = sin(omega);
cosine = cos(omega);
coeff = 2.0 * cosine;
q0=0;
q1=0;
q2=0;
for(i=0; i
{
q0 = coeff * q1 - q2 + data[i];
q2 = q1;
q1 = q0;
}
// calculate the real and imaginary results
// scaling appropriately
real = (q1 - q2 * cosine) / scalingFactor;
imag = (q2 * sine) / scalingFactor;
magnitude = sqrtf(real*real + imag*imag);
return magnitude;
}
乒乓緩沖器
實(shí)現(xiàn)了一個(gè)乒乓緩沖器版本,以將 ADC 讀數(shù)存儲(chǔ)在單獨(dú)的陣列中,這樣一個(gè)可以收集數(shù)據(jù),而另一個(gè)可以在 Goertzel 函數(shù)中執(zhí)行計(jì)算。使用了三個(gè)這樣的數(shù)組,以便 Goertzel 算法在檢查對(duì)應(yīng)于三種不同歌曲和舞蹈的三個(gè)單獨(dú)音符之間交替。當(dāng)檢測(cè)到其中一個(gè)目標(biāo)頻率時(shí),它會(huì)發(fā)出歌舞開始的信號(hào)。
//Use three-part "Ping-Pong" Buffer in ADC interrupt
//Ping
if(PingPong == 0){
adcb_arrayPing[adcbcount] = adcb0result; // add ADC reading to array
if(adcbcount == (n_samples-1)){
adcbcount = -1; //incremented to 0 at end of interrupt
RunPing = 1; //check in while loop
PingPong = 1; //switch to Pong buffer
}
}
//Pong
if(PingPong == 1){
adcb_arrayPong[adcbcount] = adcb0result;
if(adcbcount == (n_samples-1)){
adcbcount = -1; //incremented to 0 at end of interrupt
RunPong = 1;
PingPong = 2; //switch to Dong buffer
}
}
//Dong
if(PingPong == 2){
adcb_arrayDong[adcbcount] = adcb0result;
if(adcbcount == (n_samples-1)){
adcbcount = -1; //incremented to 0 at end of interrupt
RunDong = 1;
PingPong = 0; //switch to Ping buffer
}
}
// IDLE loop. Use to pass arrays through Goertzel fxn and check for note detection
while(1)
{
//after n samples, pass data through Goertzel fxn
// use Ping Pong buffer
if(RunPing == 1){
goer_result = goertzel_mag(n_samples,NOTE,sampling_rate, adcb_arrayPing);
RunPing = 0;
if(goer_result > thresh){
note_detected = 1;
}
}
if(RunPong == 1){
goer_result2 = goertzel_mag(n_samples,NOTE2,sampling_rate, adcb_arrayPong);
RunPong = 0;
if(goer_result2 > thresh){
note2_detected = 1;
}
}
if(RunDong == 1){
goer_result3 = goertzel_mag(n_samples,NOTE3,sampling_rate, adcb_arrayDong);
RunDong = 0;
if(goer_result3 > thresh){
note3_detected = 1;
}
}
歌舞
為了讓 segbot 播放歌曲,蜂鳴器由脈沖寬度調(diào)制控制。三個(gè) CPU 定時(shí)器中斷中的每一個(gè)都被設(shè)置為不同的周期以對(duì)應(yīng)歌曲的節(jié)奏。歌曲的音符組合成一個(gè)數(shù)組,用來改變PWM的周期,在檢測(cè)到第一個(gè)音符的情況下,每次發(fā)生定時(shí)器中斷時(shí),蜂鳴器都會(huì)播放相應(yīng)的音符。播放的歌曲是對(duì)披頭士的“Hey Jude”、夏奇拉的“Hips Don't Lie”和海灘男孩的“Little Saint Nick”的演繹。為了增強(qiáng)“小圣尼克”的表現(xiàn),增加了一個(gè)鈴鐺,并結(jié)合 RC 伺服電機(jī)使用 PWM,在歌曲的不同部分敲擊表面。
讓 segbot 平衡是在此項(xiàng)目中完成的,再次使用 PWM 觸發(fā) ADC,其中值通過 SPI 寫入,以便從 MPU-9250 讀取加速度和陀螺儀值。實(shí)施卡爾曼濾波器以在將值發(fā)送到平衡 segbot 的控制律之前對(duì)其進(jìn)行過濾。與播放歌曲類似,為了讓 segbot 跳舞,為轉(zhuǎn)彎速率和向前/向后偏移創(chuàng)建了一個(gè)數(shù)組。當(dāng)檢測(cè)到相應(yīng)的音符時(shí),在 CPU 定時(shí)器中斷中執(zhí)行舞蹈。
//Sing and dance when the Goertzel value exceeds threshold
if(note_detected == 1){
GPIO_SetupPinMux(16, GPIO_MUX_CPU1, 5);// set up buzzer
if (numtimer1calls < songsize){
//play the song
if(song[numtimer1calls]==0){
GpioDataRegs.GPACLEAR.bit.GPIO16 = 1; // ground the buzzer
}else{
EPwm9Regs.TBPRD = (int)(3125000/song[numtimer1calls]/2);
}
//dance
FwdBkOffset = fwddance[numtimer1calls];
turnrate = turndance[numtimer1calls];
} else{
GPIO_SetupPinMux(16, GPIO_MUX_CPU1, 0); // set GPIO16 back to GPIO
GpioDataRegs.GPACLEAR.bit.GPIO16 = 1; // ground the buzzer
note_detected = 0;
numtimer1calls = 0;
FwdBkOffset = 0;
turnrate = 0;
}
numtimer1calls++; // only increment after note is detected
}
?
- 手勢(shì)控制機(jī)器人開源項(xiàng)目
- WiFi控制機(jī)器人開源項(xiàng)目
- 二輪自平衡機(jī)器人開源設(shè)計(jì)
- 掃地機(jī)器人開源資料 43次下載
- 關(guān)于傳感器機(jī)器人的開源項(xiàng)目
- 兒童助理機(jī)器人開源項(xiàng)目
- Arduino機(jī)器人開源項(xiàng)目
- 消毒機(jī)器人開源項(xiàng)目
- 線跟隨機(jī)器人開源項(xiàng)目
- 5合1 Arduino機(jī)器人開源項(xiàng)目
- 機(jī)器人開源項(xiàng)目
- 自主機(jī)器人開源項(xiàng)目
- 基于STM32開源項(xiàng)目:球上自平衡機(jī)器人
- 基于JJBoover的遠(yuǎn)程控制ARDUNO自平衡機(jī)器人資料下載 2次下載
- 自平衡人形機(jī)器人動(dòng)作控制器的設(shè)計(jì)
- 字節(jié)發(fā)布機(jī)器人領(lǐng)域首個(gè)開源視覺-語言操作大模型,激發(fā)開源VLMs更大潛能 360次閱讀
- 機(jī)器人技術(shù)中常用的路徑規(guī)劃算法的開源庫(kù) 842次閱讀
- 機(jī)器人項(xiàng)目涉及的技術(shù) 857次閱讀
- 利用STM32實(shí)現(xiàn)自平衡機(jī)器人功能項(xiàng)目 873次閱讀
- 基于STM32的自平衡機(jī)器人設(shè)計(jì) 802次閱讀
- 如何使用Arduino制造一個(gè)自動(dòng)平衡機(jī)器人 4429次閱讀
- 基于使用A4988驅(qū)動(dòng)程序和HC-05 bt模塊構(gòu)建自平衡機(jī)器人 2007次閱讀
- 基于ATmage128單片機(jī)和紅外測(cè)距傳感器實(shí)現(xiàn)自平衡機(jī)器人系統(tǒng)的設(shè)計(jì) 2272次閱讀
- 基于ATmega128單片機(jī)實(shí)現(xiàn)自平衡機(jī)器人控制系統(tǒng)的應(yīng)用方案 3851次閱讀
- 面對(duì)疫情 醫(yī)療機(jī)器人能幫上什么忙? 2126次閱讀
- dfrobotSparki機(jī)器人套裝簡(jiǎn)介 2064次閱讀
- 協(xié)作機(jī)器人的起源_為什么需要協(xié)作機(jī)器人 8127次閱讀
- Segway路萌機(jī)器人新酷潮品極速開箱,真機(jī)上手一驗(yàn)便知 8468次閱讀
- 機(jī)器人自動(dòng)化工程項(xiàng)目方案設(shè)計(jì)包括的6個(gè)步驟解析 1.2w次閱讀
- 11個(gè)機(jī)器學(xué)習(xí)開源項(xiàng)目 2767次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多