İçindekiler:
- Gereçler
- Adım 1: Sarkaç Nedir? Nasıl Modellenir?
- Adım 2: Parçaları Donanım İnşası için Hazırlayın
- 3. Adım: Deney Verisi Toplama
- Adım 4: Veri Analizi
- Adım 5: Gelecekteki Çalışma Önerileri
Video: Basit Harmonik Hareketin Deneysel Çalışması: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
Tarafından arrowlikeTakip Yazar tarafından daha fazla:
Sınıfta, sarkaç deneyini veya basit harmonik hareket deneyini yürütmek için genellikle bir kronometre kullanırız. İşte bir meydan okuma, hareketinin gerçek bir grafiğini üretebilir ve anlık açısal konum ve hızın ne olduğunu görebilir miyiz, bu çok daha fazla bilgi ve eğlenceli.
İlk soru, sarkaç gövdesinin ağırlıksız bir ip mi yoksa rijit bir düzgün çubuk mu olduğuna karar vermemiz gerekiyor. Kordon yaklaşımı daha kolay görünüyor. Bir tane inşa etme pratiğinden, aşağıdaki ödün verme düşüncelerim var: Bir sarkaç sistemini asmanın en kolay yolu, onu kapınızın üst kenarına asmak olabilir. Bu, herhangi bir yapısal inşaat işi yapmadan ~ 2m sarkaç uzunluğunu verir. Ancak, tüm deneyi mahveden, kapı yüzeyine dokunmayacak salıncak gerekiyor. Bu yüzden salladığı düzlem, duvar/kapı yüzeyinize tam olarak paralel olmalıdır. Ağırlıksız bir kordon ince olma eğilimindedir, kolayca dönebilir ve dönüş açısının ölçümünü zorlaştırabilir. Salınım durumunu temsil etmek için bir ölçüm kullanmak istiyoruz. Olta gibi ince ip, elastik ve gerilebilir olabilir, bu da bizim tarafımızdan ölçülen ve denklemde kullanılan en önemli sabitlerimizden birini, yani sarkacın uzunluğunu etkiler. Bazıları da sıcaklıktan etkilenebilir. İpin ucunda asılı olan ağırlık kütlesi, ipin ağırlığı ihmal edilebilecek kadar ağır olmalıdır. Lütfen bunlara katılıyorsanız veya katılmıyorsanız veya başka tasarım değiş tokuş fikirleriniz varsa yorum yapın. Bu problemi incelemek için, ağırlığı göz ardı edilebilecek kadar hafif bir cihaza ihtiyacımız var ve sarkaç sistemini hala rijit bir üniform çubuk olarak ele alıyoruz. Gyro, ivmeölçer ve açı bilgilerini bluetooth bağlantısı üzerinden bize ileten bir COTS giyilebilir elektronik kontrol cihazı kullanıyorum. Bu ölçümler bir cep telefonu uygulaması veri dosyasında saklanacaktır. Bundan sonra, basit harmonik hareket deneyimizin verilerini analiz edeceğiz. Sayısal analiz aşağıdaki konulara odaklanır: 1) Sarkaç salınım periyodunu tahmin edin 2) Sarkaç basit harmonik hareket deney verilerini programlanabilir bir şekilde toplayın 3) Verileri gruplamak ve analiz sürecinde aykırı değerleri kaldırmak için kmean kullanın 4) Tahmin için kısa süreli FFT kullanın sarkaç salınım frekansı
Gereçler
Bluetooth ölçüm cihazı
Android telefon Uygulaması: Google Play Store'a gidin, M2ROBOTS'u arayın ve kontrol Uygulamasını yükleyin. Google Play Store'a erişmenin zor olması durumunda, alternatif uygulama indirme yöntemi için kişisel ana sayfamı ziyaret edin
tahta çubuk
birkaç 3D baskılı parça
testere bıçakları veya benzeri metal malzeme
Adım 1: Sarkaç Nedir? Nasıl Modellenir?
Müfredat fizik kitabınız da dahil olmak üzere sarkaç denklemi türetmesini tanıtan birçok makale ve kitap vardır. Bu tür içeriklerin burada bir daha tekrarlanmaması daha iyi olabilir. Burada "basit harmonik hareket" konusuyla ilgili yalnızca nihai sonuç listelenmiştir. Bir sarkacın periyodunu bilmek için, "l" ile gösterilen sarkacın metre cinsinden uzunluğunu bilmemiz yeterlidir.
Ağırlığın neredeyse tamamen bir pivotta asılı olan ağırlıksız bir ipin ucunda olduğundan ve sarkacın küçük açılarla θ, diyelim 15°'den az sallandığından eminsek, bu sarkacın periyodu T1 şu şekilde verilir:
T1 = 2*pi*(l/g)^0.5
g = yerçekimi ivmesi, yaklaşık 9,8 m/s^2
Ağırlıksız ip, yine l uzunluğunda rijit, düzgün bir çubukla değiştirilirse, basit harmonik hareket periyodu T2, T1 = 2*pi*(2l/3g)^0.5 ile verilir.
Etkili bir şekilde, rijit üniform çubuk uzunluğunun üçte ikisi olan ağırlıksız bir kord sarkacıyla aynı periyoda sahiptir.
Bu arka plan ve deneyimizi hazırlamaya başlayabiliriz.
Adım 2: Parçaları Donanım İnşası için Hazırlayın
Sarkaç yapısını oluşturmak için bazı parçaları 3D olarak yazdırır ve zaten sahip olduğumuz bir şeyi geri dönüştürürüz. Genel sarkaç yapısı Şekil 1'de gösterilmektedir. El yapımı bazı parçalar ve Lowe's'den uzun bir tahta çubuk parçası ile birlikte 3D baskı parçalarının bir karışımı.
Şekil 2'deki 3D baskılı kısım bir kapının üst kenarına asılmıştır, çünkü kapımız bizim için bir şeyler asmak için kolay düz bir yüzeydir. STL dosyası indirme bağlantısı:
xiapeiqing.github.io/doc/kits/pendulum/pen…
Şekil 3'teki yeşil kısım, ahşap çubuğu bir bıçağa bağlar ve bıçak, daha önceki 3D baskılı kapı askısına monte edilmiş iki parça rayın üzerine oturur. STL dosyası indirme bağlantısı:
Eski bir testere bıçağının ortadan ikiye kırılması ile iki parça ray yapılır, bakınız Şekil 4. Şekil 2'deki parça onlar için doğru yuva boyutunu hazırlamıştır. İdeal olarak, bir eğe kullanarak bu iki testere bıçağında "V" şeklinde bir çentik yapabiliriz. Tek kenarlı tıraş bıçağı veya herhangi bir el yapımı metal parça gibi oldukça keskin kenarlı bir metal "V" şeklindeki çentiklerin içine oturabilir. Daha küçük bir temas alanına ihtiyaç duymamızın nedeni, sallanırken kaybedilen kinetik enerjiyi azaltmaktır.
Şekil 5'teki son 3D baskılı kısım, elektronik ölçüm aparatını tutan küçük bir tepsidir.
İndirme bağlantısı:
Bluetooth ölçüm aparatı, açı tahmini, gyro ölçümü ve ivmeölçer ölçümü üretir. Tüm bu veriler bluetooth kablosuz bağlantı aracılığıyla bize sunulmaktadır.
Bu aparatı sarkaç kolunun farklı pozisyonuna yerleştirerek çoklu deneyler yapacağız ve farklılıkları göreceğiz.
3. Adım: Deney Verisi Toplama
Elde edilen veri kümesini analiz etmeden önce deneysel veri toplama için iki yapılabilir yöntem vardır:
1) Cihaz tarafından üretilen tüm ölçümleri telefonunuzun SD kartında saklanan bir veri dosyasına kaydetmek için gereksinimler bölümünde belirtilen Android telefon Uygulamasını kullanın. Dosyayı kopyalayabilir ve bilgileri işleme koyabiliriz.
2) Cihaza bluetooth bağlantısı kurmak için bluetooth özellikli bir bilgisayar, bir PC, bir dizüstü bilgisayar veya bir RaspberryPi mini bilgisayar kullanın ve verileri gerçek zamanlı veya çevrimdışı analiz için okuyun.
Her yöntem için hem artıları hem de eksileri vardır, her ikisini de deneyeceğiz ve bu talimatta farkı anlatacağız.
Yöntem (1) için android uygulamasını kullanarak, android App kontrol arayüzüne girdikten sonra bluetooth ölçüm cihazından android telefona gönderilen telemetri verileri m2flightDatayyyymmdd_hhmmss.txt adlı bir datalog dosyasına kaydedilecektir. Android telefonunuzun Download/m2LogFiles klasöründe bulunabilir. "İndir" klasörü, telefonunuzun android işletim sisteminde önceden var olan bir klasördür ve "m2LogFiles", Uygulamanın oluşturduğu bir klasördür. Dosya adı içeriği yyyymmdd_hhmmss, dosya adında deneme başlangıç zamanını (yıl, ay, gün, saat, dakika ve saniye) kodlamanın yoludur.
Günlük dosyasındaki her satır bir kayıttır. Olay zaman damgası, giriş dizesi "eam:" ile başlar, ardından 4 üçlü veri gelir, bunlar:
Ham sensör donanım kayıt okuma değerlerinde ivmeölçer XYZ ekseni okuması
Jiroskop XYZ ekseni ham sensör donanımı kayıt okuma değerlerinde okuma
Manyetometre XYZ ekseni ham sensör donanım kayıt okuma değerlerinde okuma
derece olarak teknede tahmini Yuvarlanma/Adım/Ham
Bilgisayar python programı kullanılarak oluşturulan veri dosyası aynı veri dosyası formatını kullanacak, böylece veri analizi adımında kullandığımız program, python programımız veya android uygulamamız tarafından üretilen veri kaynağı ile uğraşmayacaktır.
(2) yöntemini kullanarak kodlamaya başlayalım.
Bluetooth ölçüm aparatı ile etkileşim kurmak için iki çeşit SDK sağlanmıştır:
1) "pip3 install m2controller" ile kurulabilen Python SDK, kullanılan dil python3'tür. Kullanıcı uygulama kodu örnekleri https://github.com/xiapeiqing/m2robots/tree/maste adresinde saklanır… Bu deney için python betiği pendulum1.py kullanacağız.
2) Elde edilen sarkaç verilerinin daha sonra görselleştirilmesini ve analizini istediğimiz için bu talimatta kullanılmayan Java SDK'sı, Java'da programlamak bizim için biraz daha fazla çaba gerektirebilir.
python3 veri toplama programı kaynak kodu, kod işlevsellik ayrıntıları için birçok yorum içerir. Kaynak kodun bir anlık görüntüsü burada sağlanır.
#!/usr/bin/env python# -*- kodlama: UTF-8 -*- m2controller'dan içe aktar m2controller'ı m2controller'dan içe aktar m2Const içe aktar sinyali içe aktar zaman içe aktar tarihsaat içe aktar usrCfg içe aktar pendulum2
requestExit = Yanlış
################################################################
# veri analiz modülü pendulum2.py'nin günlük veri dosyasını nasıl aldığımız konusunda agnostik olabilmesi için aynı günlük dosyası adlandırma kuralını kullanmak istiyoruz ################# ############################################# logfilename = " m2flightData%s.txt"%(datetime.datetime.fromtimestamp(time.time()).strftime('%Y%m%d_%H%M%S')) dataLogfile = open(logfilename, "w")
def sinyal_işleyici(sig, çerçeve):
global requestExit print('program yürütmesinden çıkmak için kullanıcı Ctrl-C'si') requestExit = True signal.signal(signal. SIGINT, signal_handler)
################################################################
# 20Hz hızında her ölçüm verisi kullanılabilir olduğunda, bu "geri arama" işlevi çağrılır ############################## ################################# def callbackfunc(telemetri): strTimeStamp = datetime.datetime.fromtimestamp(time.time ()).strftime('%H:%M:%S.%f')[:-3] dataStr = "%s, eam:%d, %d, %d, %d, %d, %d, %d, %d, %d, %2.1f, %2.1f, %2.1f\n"%(strTimeStamp, telemetri['m_fAccelHwUnit'][0], telemetri['m_fAccelHwUnit'][1], telemetri['m_fAccelHwUnit'][2], telemetri['m_fGyroHwUnit'][0], telemetri['m_fGyroHwUnit'][1], telemetri['m_fGyroHwUnit'][2], telemetri['m_fMagHwUnit'][0], telemetri[0] 'm_fMagHwUnit'][1], telemetri['m_fMagHwUnit'][2], telemetri['m_fRPYdeg'][0], telemetri['m_fRPYdeg'][1], telemetri['m_fRPYdeg'][2]) ## ################################################# ############ # veri dizisini ekrana yazdırıyoruz ve günlük dosyasına kaydediyoruz ###################### ######################################### print(dataStr) dataLogfile.writelines(veriStr)
################################################################
# denetleyiciyi başlatın, BleMACaddress alanını cihazınızın MAC adresi olarak ayarlamayı unutmayın ################################# ################################# # YAPILACAKLAR: Kullanıcı tarafından ayarlanmıyorsa, BleMACaddress'i başlatalım. controller = m2controller. BleCtrller(m2Const.etDebian, callbackfunc, usrCfg. BleMACaddress) controller.connect() while True: ######################### ##################################### # sarkaç ölçümünden oluşturulan ve gönderilen ölçüm verilerini bekleyin aparat ################################################ ################ controller.m_CommsTunnel.waitForNotifications(1.0) eğer requestExit: ######################## ######################################## # ev işleri burada veri kaydını bitirdiğimizde çalışır ################################################# ############## controller.stop() dataLogfile.close() kesme
################################################################
# veri toplama tamamlandı, şimdi günlük verilerini analiz edelim ##################################### ######################## pendulum2.parseDataLogFile(logfilename)
Uzun vadeli güncelleme için lütfen https://github.com/xiapeiqing/m2robots/blob/maste… adresini ziyaret edin.
Şimdi çalışma yöntemini açıklayalım. Bu python programı, m2controller adlı pip kurulabilir bir paketin üzerine yazılmıştır. Alt düzey paket, geri arama mekanizması sunar, böylece alınan her ölçüm güncellemesi, yazdığımız geri arama işlevini tetikler ve verileri yerel bir günlük dosyasına kaydeder. Günlük dosyası veri içeriğinin biçimi, android tamamlayıcı uygulaması tarafından üretilenle aynıdır, böylece python programı veya andriod yardımcı uygulaması tarafından oluşturulan veri günlük dosyası değiştirilebilir.
İşletim sistemi tarafından yakalanan kullanıcı ctrl-C sinyali programa iletilir ve yeni ölçüm verilerinin gelmesini bekleyen sonsuz döngüyü durdurur.
Şimdiye kadar, günlük dosyası başarıyla oluşturuldu ve bu program, deney sonuçlarımızı incelemek için analiz programını arayacaktır.
İşte iki deney ve karşılaştırma, 7 gramlık bir cihazı farklı yerlere takarak çok belirgin farkı gösteriyor.
Şekil 2'de bu bluetooth ölçüm cihazının gerçek ağırlığını belirlemek için bir terazi kullanıyoruz.
Şekil 3, sarkacın alt ucuna 7 gramlık cihazın takıldığı sarkaç kurulumunu göstermektedir. Şekil 4'teki kurulum konfigürasyonu, sallanan pivota çok daha yakın yerleştirilmiş 7 gram kütleye sahiptir.
Şekil 5, sarkaç yapısının yakından görünüşüdür.
Adım 4: Veri Analizi
Bluetooth ölçüm cihazı ~ 1,6 metre uzunluğundaki bir tahta çubuktan çok daha hafif olan ~ 7 gram ağırlığındadır. "Sert üniform çubuk" varsayımını kullanın ve şu sarkaç periyodu denklemine sahibiz, T1 = 2*pi*(2l/3g)^0.5
Yerçekimi sabitini elde etmek için 9.8m/s^2 kullanabiliriz. Ancak herhangi bir coğrafi konumdaki daha doğru bir yerçekimi sabiti bu web hizmetinden alınabilir:
www.wolframalpha.com/widgets/view.jsp?id=e…
San Francisco için 9.81278m/s^2
Sarkaç uzunluğu 64.5'' olarak ölçülmüştür.
2*pi*sqrt(2*64.5*0.0254/(3*9.81278)) beklenen sarkaç periyodunu 2.0962(sn) verir.
Deneylerimizle uyuşup uyuşmadığını görelim.
1. deneyde, sarkaç düzeneği, sarkacın alt ucuna bağlı 7 gramlık bir cihaza sahiptir. Günlük dosyam şurada indirilebilir:
xiapeiqing.github.io/doc/kits/pendulum/pen…
"PendulumTestData.txt" olarak yeniden adlandırın ve python analiz programının aynı klasörüne koyun. Kaynak kodun bir anlık görüntüsü burada sağlanır.
#!/usr/bin/env python# -*- kodlama: UTF-8 -*- csv import matplotlib.pyplot as plt plt.style.use('seaborn-whitegrid') import numpy'yi datetime import datetime'dan np olarak içe aktar, timedelta sklearn.cluster'dan sns olarak seaborn içe aktarma Koleksiyonlardan KMeans içe aktarma Sayaç ################################## ############################# # bu fonksiyon veri dosyası analiz çalışmasını çalıştırır ############ ################################################# ## def parseDataLogFile(veri dosyasıadı): ######################################## ###################### # virgülle ayrılmış veri günlük dosyasındaki (CSV) verileri çıkarın ve her sütundaki içeriği bir kayan noktalı değişkene kaydedin ## ################################################# ############ ile open(datafilename) as csvfile: readCSV = csv.reader(csvfile, delimiter=', ') timestampS = fAccelHwUnit_x = fAccelHwUnit_y = fAccelHwUnit_z = fGyroHwUnit_x = fGyroHwUnit_y = fGyroHwUnit_z = fMagHwUnit_x = fMagHwUnit_y = fMagHwUni t_z = fRPYdeg_r = fRPYdeg_p = fRPYdeg_y = readCSV'deki satır için: deneyin: x = datetime.strptime(row[0].split(', ')[0], '%H:%M:%S.%f') timestampS.append(timedelta(saat=x.saat, dakika=x.dakika, saniye=x.saniye, mikrosaniye=x.mikrosaniye).total_saniye()) fAccelHwUnit_x.append(float(satır) [1][4:])) fAccelHwUnit_y.append(kayan(satır[2])) fAccelHwUnit_z.append(kayan(satır[3])) fGyroHwUnit_x.append(kayan(satır[4])) fGyroHwUnit_y.append(kayan (satır[5])) fGyroHwUnit_z.append(kayan(satır[6])) fMagHwUnit_x.append(kayan(satır[7])) fMagHwUnit_y.append(kayan(satır[8])) fMagHwUnit_z.append(kayan(satır) [9])) fRPYdeg_r.append(float(satır[10])) fRPYdeg_p.append(float(satır[11])) fRPYdeg_y.append(float(satır[12])) hariç: pass zaman damgasıS = np.asarray(zaman damgaları) zaman damgalarını = zaman damgalarını - zaman damgaları [0] fAccelHwUnit_x = np.asarray (fAccelHwUnit_x) fAccelHwUnit_y = np.asarray (fAccelHwUnit_y) fAccelHwUnit_z = np.asarray (fAccelHwUnit_z) fGyroHwUnit_x = np.asarray (fGyroHwUnit_x) fGyroHwUnit_y = np.asarray (fGyroHwUnit_y) fGyroH wUnit_z = np.asarray (fGyroHwUnit_z) fMagHwUnit_x = np.asarray (fMagHwUnit_x) fMagHwUnit_y = np.asarray (fMagHwUnit_y) fMagHwUnit_z = np.asarray (fMagHwUnit_z) fRPYdeg_r = np.asarray (fRPYdeg_r) fRPYdeg_p = np.asarray (fRPYdeg_p) fRPYdeg_p = fRPYdeg_p - np.mean(fRPYdeg_p) fRPYdeg_y = np.asarray(fRPYdeg_y)
################################################################
# hassas salınım süresi tahmini için örnekleme frekansının doğru tahminine ihtiyacımız var ################################### ############################# FsHz = getSamplingIntervalS(timestampS) ################ ################################################ # kullanmak sarkaç periyodu analizi için tutum başlığı referans sistemi çıktısındaki adım bileşeni #################################### ########################### analiz_timeSequence(timestampS, fRPYdeg_p, FsHz, 'pitch') ########### ################################################# ### # sarkaç periyodu analizi için ivmeölçer ham ölçüm çıktısını kullanın #################################### ########################### analiz_timeSequence(timestampS, fAccelHwUnit_x, FsHz, 'accel') ########### ################################################# ### # sarkaç periyodu analizi için gyro ham ölçüm çıktısını kullanın #################################### ########################### analiz_timeSequence(timestampS, fGyroHwUnit_y, FsHz, ' gyro') print('bitti, tebrikler:-)') plt.show() ############################## ################################## # Bluetooth iletişim sürecinde, veri iletişim paketinin kaybolun # 20Hz ölçüm verilerini, bırakılan paketin neden olduğu aykırı değerlerden izole etmek için K-ortalama kullanıyoruz # "daha fazla ayrıntı için sinyal ve sisteme" dalın ################ ################################################ def getSamplingIntervalS (zaman damgası): plt.figure() sampleIntervalS = np.diff(timestampS) sns.distplot(sampleIntervalS) plt.ylabel('histogram') plt.xlabel('ölçüm aralık(lar)ı') clusterCnt = 5 km = KMeans(n_clusters = clusterCnt) km.fit(sampleIntervalS.reshape(-1, 1)) centroids = km.cluster_centers_ elemCnt = Counter(km.labels_) entityCnt = for ii in range(clusterCnt): entityCnt.append(elemCnt[ii]) FsHz = 1/centroids[occurrenceCnt.index(max(occurrenceCnt))] FsHz döndürür
################################################################
# spektrometre kullanın, yani frekans bileşenini elde etmek için kısa süreli FFT, tepe kutusu sarkaç salınımına ilişkin en iyi tahminimizdir ########################## ###################################### def analiz_timeSequence(timestampS, timeSeqData, FsHz, strYorum): fig, (ax1, ax2) = plt.subplots(nrows=2) ax1.plot(timestampS, timeSeqData, marker='o', markerfacecolor='blue', markersize=2, color='skyblue', linewidth=1) ax1.set_title("sarkaç zaman alanı ölçümü -- %s"%strComment) ax1.set_xlabel("örnekleme zamanı(saniye)") ax1.set_ylabel(strComment); NFFT = 2048 # pencereleme bölümlerinin uzunluğu
Pxx, frekanslar, kutular, im = ax2.specgram(timeSeqData, NFFT=NFFT, Fs=FsHz, noverlap=NFFT/2)
ax2.set_title("Spektrogram") ax2.set_xlabel("örnekler") ax2.set_ylabel("frekans(Hz)");
# 'Specgram' yöntemi 4 nesne döndürür. Onlar:
# - Pxx: periodogram # - frekanslar: frekans vektörü # - kutular: zaman kutularının merkezleri # - im: arsadaki verileri temsil eden matplotlib.image. AxesImage örneği pkresult = np.where(Pxx == np.amax(Pxx)) oscFreqHz = freqs[pkresult[0][0] print('sarkaç salınımı Frek(Hz)=%f, Period(Sec)=%f, tahmin veri kaynağı: %s'%(oscFreqHz, 1/oscFreqHz, strComment)) dönüş 1/oscFreqHz
################################################################
# bu programı bağımsız olarak mı çalıştırmalıyız, yani pendulum1.py tarafından çağrılmadan, # analiz edilecek varsayılan bir günlük veri dosyası adı tanımlarız ################### ########################################### if _name_ == "_main_ ": defaultFilename = './PendulumTestData.txt' import os.path if os.path.isfile(defaultFilename): parseDataLogFile(defaultFilename) else: print ("varsayılan günlük dosyası %s mevcut değil"%defaultFilename)
Uzun vadeli güncelleme için lütfen https://github.com/xiapeiqing/m2robots/blob/maste… adresini ziyaret edin.
Kaynak kod detaylı yorumlar içeriyor, burada matematiksel tahminin üst düzey bir özetini verelim.
1) Önce "csv" adlı bir python paketi kullanarak CSV dosya içeriğini bilgisayara okuyoruz. Periyodik ölçümlerimiz vardır.
21:34:26.362, eam:0, -128, 14464, -8, 144, -96, 2112, -1280, 1664, -0.5, -5.5, 40.5
21:34:26.373, eam:128, 0, 14272, -8, 136, 40, 2112, -1280, 1664, -0.5, -6.5, 40.0
21:34:26.412, eam:448, -64, 14208, -8, 136, 24, 2176, -1280, 1664, -0.5, -7.5, 40.5
21:34:26.462, eam:448, -128, 14272, -8, 120, 16, 2176, -1280, 1664, -0.5, -8.0, 40.5
2) Ölçüm hızı çok kritik olduğundan ve doğrudan sarkaç periyodu tahmin hatasını ortaya çıkardığından, onları tahmin etmek istiyoruz. Nominal ölçüm aralığımız 50ms, yani 20Hz'dir. Tüm ölçümlerin ortalaması iyi görünüyor, ancak bazen veri iletim paketini kaybediyoruz, güncelleme aralığı 100ms veya 150ms oluyor,…
Bu verilerin oluşumunu çizersek, Şekil 1'e bakın, bir insan olarak kolayca 0,05 saniyelik bir göz küresi değerine sahip olabiliriz. Ancak, bundan daha iyisini yapabilir miyiz?
Ortalama hesaplama için sadece iyi olanları seçmek için sınıflandırma yöntemini kullanmamız gerekiyor. Python, kümeleme veya sınıflandırma konusunda bize yardımcı olacak KMeans adlı bir araç kutusuna sahiptir. Bu kavramlar birçok büyük veri ve yapay zeka alanında kullanılmaktadır.
3) Fig.2 iki resim içermektedir. En üstteki çizim, derece cinsinden salınım açısı ölçümümüzün zaman alan dizisidir. Saniyedeki x ekseni zaman damgasına başvurarak, 50 saniyede yaklaşık 22,5 devir okuyabilir, bu da 2.22 Saniyelik sarkaç periyodu anlamına gelir. Bu süreci otomatikleştirmenin ve daha doğru tahminde bulunmanın bir yolu var mı? Evet, küçük bir ölçüm verisi yığını kullanan ve bize sıklığını söyleyen spektrogram adlı matematiksel aracı kullanabiliriz, aşağıdaki şekle bakın. En koyu çizgi için y ekseni okuması sarkaç salınım frekansıdır. Yatay bir çizgi olması, sarkaç salınımının deney boyunca hiç değişmediğini doğrular. Salınım frekansının ters değeri, sarkaç salınım periyodudur.
Program tarafından yapılan nihai rapor bir metin özetidir:
sarkaç salınımı Freq(Hz)=0.449224, Period(Sec)=2.226059, tahmin veri kaynağı: pitch
Daha önceki göz küresi el hesaplama sonucumuz olan 2.22sn'nin programın hesaplanan değeriyle oldukça tutarlı olduğunu görebiliriz.
2.0962(sn) teorik olarak hesaplanan değerle karşılaştırıldığında, ~%5 kalan hatamız var. Onlardan nasıl kurtulur? Varsayımın "sert tek tip çubuk" olduğunu hatırlıyor musunuz? 7 gram ekstra ağırlık bile önemsiz gibi görünse de kalan hatanın en büyük sebebidir.
Şimdi cihazı pivota yaklaştırıyoruz. Yakın plan fotoğraf için önceki adıma bakın. Oluşturduğum günlük dosyası buradan indirilebilir:
xiapeiqing.github.io/doc/kits/pendulum/pen…
Aynı analiz adımlarını çalıştırın ve 2.089867(Saniye) Periyodu elde ederiz, teorik tahminle neredeyse aynı olan Şekil 3'e bakın. Harika!
Çünkü sadece salınım açısı ölçümü değil, jiroskopik ölçüm ve ivmeölçer ölçümü de aynı orandadır. Diğer iki ölçüm için aynı analizi yapın, Şekil 4 ve 5'te sonuçları alıyoruz. Her üç ölçüm kaynağından gelen tahminler aynı fikirde, bu da deneyimizin başarısı konusunda bize daha fazla güvenmemizi sağlıyor.
İşte çalışan python programının son çıktısı olarak sonuç:
sarkaç salınımı Freq(Hz)=0.478499, Period(Sec)=2.089867, tahmin veri kaynağı: pitch
sarkaç salınımı Freq(Hz)=0.478499, Period(Sec)=2.089867, tahmin veri kaynağı: accel
sarkaç salınımı Freq(Hz)=0.478499, Period(Sec)=2.089867, tahmin veri kaynağı: gyro
Bu adımdaki son düşünce, farklı girdi veri kaynağı kullanılarak tahmin sonuçları nasıl tam olarak aynı olabilir? Bu karşı sezgidir. Bu soruyu okuyuculara bırakacağım. İşte bir ipucu: salınım frekansını tahmin etmek için kısa süreli FFT kullandığımızı hatırlıyor musunuz? Dijital alanda, frekans tahmini, kayan sayı tahmini yerine ayrı frekans kutularında verilir.
Adım 5: Gelecekteki Çalışma Önerileri
Gelecekteki çalışma önerilerinin birkaç kategorisi vardır.
Önceki adımda, deney hatamızı ~%5'ten %1'in altına düşürmeyi başardık, bundan daha iyisini yapabilir miyiz? Salınım büyüklüğünün katlanarak azaldığı fark edildiğinde, sarkacı sallarken neden olan hava sürtünmesi katkıda bulunan bir faktör olabilir. Sarkacın enine kesitinin, aerodinamik sürtünmeyi azaltmak için akış çizgisi şeklinde olacak şekilde değiştirilmesi gerekebilir.
Sabit bir tepe-büyüklük sinyali vermek için uyarlanabilir filtre teknikleri kullanılarak öğrenilen zamanla değişen bir kazancı uygulayabilir miyiz? Bu arada, dış kuvvetler ile büyüklük zayıflamasını ilişkilendirin.
"Basit harmonik hareket"ten daha basit bir şey bulamıyoruz. Sarkacı analiz ettiğimiz imkanları daha karmaşık bir şeyi, bir spor etkinliğini, bir su roketi fırlatma dizisini vb. analiz etmek için kullanabilir miyiz?
mutlu hack
Önerilen:
Deneysel Bir Lambanın LED Işık Akılarını İncelemek İçin Gauss ve Parabol: 6 Adım
Deneysel Lambanın LED Işık Akılarını İncelemek için Gaussian ve Parabol: Tüm üreticilere ve hareketli Instructable topluluğuna merhaba. Bu sefer Merenel Research size saf bir araştırma problemi ve onu matematikle çözmenin bir yolunu getirecek. Bu problemi yaşadım. RGB LED lambanın LED akılarını hesaplarken kendim
Deneysel Tasarım De PCB Hecho Con Dremel: 8 Adım
PCB Üretimi Deneyi Dremel: PCB'leri dremel ve papel kullanarak test etme/deneme yapma. Bir terminarlo ve mejorarlo, por ahora hicimos esto: Herramientas ve materyaller Dremel 4000 Punta diamante
Simülasyon Çalışması: 9 Adım
Simülasyon Çalışması: Bu talimatta, Autodesk'in fusion 360'ını kullandım. Bu talimat, simülasyon çalışması içindir. Bu çalışmada, auto desk fusion 360'ın modelini ve simülasyon çalışma alanını kullandım.
Çalışması ve Onarımı İle Klima PCB Eğitimi: 6 Adım
Çalışması ve Onarımı ile Klima PCB Eğitimi: Hey, Naber Beyler! Akarsh burada CETech'ten. Hiç Klimalarınızın iç tarafında neler olduğunu merak ettiniz mi? Evet ise, o zaman bu Makaleyi gözden geçirmelisiniz, çünkü bugün bağlantılar ve kompozisyon hakkında bir fikir vereceğim
Hızlı Hareketin Müthiş Fotoğraflarını Nasıl Çekersiniz: 5 Adım
Hızlı Hareketin Müthiş Fotoğrafları Nasıl Çekilir: Temel olarak, göz açıp kapayıncaya kadar olan bir şeyin harika bir resmini çekmenizi göstereceğim. Kullandığım örnek bir su balonunun patlaması. Ilgilenen? Okumaya devam etmek