İçindekiler:

Arduino Zamanlayıcılar: 8 Proje: 10 Adım (Resimlerle)
Arduino Zamanlayıcılar: 8 Proje: 10 Adım (Resimlerle)

Video: Arduino Zamanlayıcılar: 8 Proje: 10 Adım (Resimlerle)

Video: Arduino Zamanlayıcılar: 8 Proje: 10 Adım (Resimlerle)
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Haziran
Anonim
Arduino Zamanlayıcıları: 8 Proje
Arduino Zamanlayıcıları: 8 Proje

Arduino Uno veya Nano, üç yerleşik zamanlayıcıyı kullanarak altı özel pin üzerinde doğru dijital sinyaller üretebilir. Kurmak için sadece birkaç komuta ihtiyaç duyarlar ve çalıştırmak için CPU döngüsü kullanmazlar!

Açıklamalarına ayrılmış 90 sayfası olan ATMEGA328 tam veri sayfasından başlarsanız, zamanlayıcıları kullanmak göz korkutucu olabilir! Birkaç yerleşik Arduino komutu, örneğin millis(), delay(), tone(), AnalogWrite() ve servo kitaplığı gibi zamanlayıcıları zaten kullanır. Ancak tam güçlerini kullanmak için onları kayıtlar aracılığıyla ayarlamanız gerekir. Bunu daha kolay ve şeffaf hale getirmek için bazı makroları ve işlevleri burada paylaşıyorum.

Zamanlayıcılara çok kısa bir genel bakışın ardından, zamanlayıcılarla sinyal üretimine dayanan 8 harika projeyi takip edin.

Adım 1: Gerekli Bileşenler

Gerekli Bileşenler
Gerekli Bileşenler

Tüm 8 projeyi yapmak için ihtiyacınız olacak:

  • Arduino Uno veya uyumlu
  • Mini protokollü bir prototip kalkan
  • 6 adet breadboard atlama kablosu
  • 6 kısa devre tahtası jumper'ı (kendinizi 10 cm katı çekirdekli bağlantı telinden yapın)
  • 2 timsah yol açar
  • 1 adet beyaz 5 mm LED
  • 220 Ohm direnç
  • 10kOhm'luk bir direnç
  • 10kOhm'luk bir potansiyometre
  • 2 seramik 1muF kapasitör
  • 1 elektrolitik 10muF kapasitör
  • 2 diyot, 1n4148 veya benzeri
  • 2 mikro servo motor SG90
  • 1 8Ohm hoparlör
  • 20m ince (0.13mm) emaye tel

Adım 2: Sinyal Üretimi için Arduino Zamanlayıcılarına Genel Bakış

Timer0 ve timer2 8 bitlik zamanlayıcılardır, yani en fazla 0'dan 255'e kadar sayabilirler. Timer1, 16 bitlik bir zamanlayıcıdır, bu nedenle 65535'e kadar sayabilir. Her zamanlayıcının iki ilişkili çıkış pini vardır: timer için 6 ve 5, timer için 9 ve 10, timer2 için 11 ve 3. Zamanlayıcı, her Arduino saat döngüsünde veya 8, 64, 256 veya 1024 (zamanlayıcı2 için 32 ve 128'e de izin verilir) olan bir ön ölçek faktörü tarafından azaltılan bir oranda artırılır. Zamanlayıcılar 0'dan 'TOP'a kadar ve ardından tekrar (hızlı PWM) veya aşağı doğru (faz doğru PWM) sayar. 'TOP' değeri böylece frekansı belirler. Çıkış pinleri, Çıkış Karşılaştırma Kaydının değerini ayarlayabilir, sıfırlayabilir veya çevirebilir, böylece bunlar görev döngüsünü belirler. Sadece timer1, her iki çıkış pini için frekansı ve görev çevrimlerini bağımsız olarak ayarlama yeteneğine sahiptir.

Adım 3: LED Yanıp Sönme

Image
Image
LED Yanıp Sönme
LED Yanıp Sönme
LED Yanıp Sönme
LED Yanıp Sönme

8-bit zamanlayıcılarla ulaşılabilen en düşük frekans 16MHz/(511*1024)=30, 6Hz'dir. Yani bir LED'in 1Hz ile yanıp sönmesi için, 256 kat daha küçük, 0.12 Hz frekanslara ulaşabilen zamanlayıcı1'e ihtiyacımız var.

Anotlu (uzun bacaklı) bir LED'i pin9'a bağlayın ve katodunu 220 Ohm'luk bir dirençle toprağa bağlayın. Kodu yükleyin. LED, %50'lik bir görev döngüsü ile tam olarak 1 Hz'de yanıp sönecektir. loop() işlevi boş: zamanlayıcı setup()'ta başlatılır ve daha fazla dikkat gerektirmez.

Adım 4: LED Dimmer

Image
Image
LED Dimmer
LED Dimmer
LED Dimmer
LED Dimmer

Darbe genişliği modülasyonu, bir LED'in yoğunluğunu düzenlemenin etkili bir yoludur. Uygun bir sürücü ile elektromotorların hızını ayarlamak için de tercih edilen yöntemdir. Sinyal %100 açık veya %100 kapalı olduğundan, seri dirençte güç kaybı olmaz. Temel olarak, LED'in gözün takip edebileceğinden daha hızlı yanıp sönmesi gibidir. 50Hz prensipte yeterlidir, ancak yine de biraz titriyor gibi görünebilir ve LED veya gözler hareket ettiğinde rahatsız edici, sürekli olmayan bir "iz" ortaya çıkabilir. 8 bitlik bir zamanlayıcı ile 64'lük bir ön ölçek kullanarak, amaca uygun olan 16MHz/(64*256)=977Hz elde ederiz. Timer2'yi seçiyoruz, böylece timer1 diğer işlevler için kullanılabilir durumda kalıyor ve timer0 kullanan Arduino time() işlevine müdahale etmiyoruz.

Bu örnekte görev döngüsü ve dolayısıyla yoğunluk bir potansiyometre ile düzenlenir. Pin 3'teki aynı zamanlayıcı ile ikinci bir LED bağımsız olarak düzenlenebilir.

Adım 5: Dijital-Analog Dönüştürücü (DAC)

Image
Image
Dijital-Analog Dönüştürücü (DAC)
Dijital-Analog Dönüştürücü (DAC)
Dijital-Analog Dönüştürücü (DAC)
Dijital-Analog Dönüştürücü (DAC)

Arduino'nun gerçek bir analog çıkışı yok. Bazı modüller bir parametreyi (ekran kontrastı, algılama eşiği vb.) düzenlemek için analog voltaj alır. Sadece bir kapasitör ve direnç ile timer1, 5mV veya daha iyi çözünürlükte bir analog voltaj oluşturmak için kullanılabilir.

Alçak geçiren bir filtre, PWM sinyalini bir analog voltaja 'ortalayabilir'. Bir direnç aracılığıyla bir PWM pinine bir kapasitör bağlanır. Karakteristikler, PWM frekansı ve direnç ve kapasitörün değerleri ile belirlenir. 8-bit zamanlayıcıların çözünürlüğü 5V/256=20mV olacaktır, bu nedenle Timer1'in 10-bit çözünürlük elde etmesini tercih ediyoruz. RC devresi birinci dereceden bir alçak geçiren filtredir ve biraz dalgalanması olacaktır. Dalgalanmayı azaltmak için RC devresinin zaman ölçeği, PWM sinyalinin periyodundan çok daha büyük olmalıdır. 10 bit hassasiyet için elde ettiğimiz süre 1024/16MHz= 64mus'tur. 1muF kapasitör ve 10kOhm direnç kullanırsak, RC=10ms. Tepeden tepeye dalgalanma en fazla 5V*0.5*T/(RC)=16mV'dir ve bu burada yeterli kabul edilir.

Bu DAC'nin çok yüksek bir çıkış empedansına (10kOhm) sahip olduğunu unutmayın, bu nedenle akım çekerse voltaj önemli ölçüde düşer. Bunu önlemek için, bir opamp ile tamponlanabilir veya R ve C'nin başka bir kombinasyonu seçilebilir, örneğin 10muF ile 1kOhm.

Örnekte, DAC çıkışı bir potansiyometre ile yönlendirilir. Pin 10'da timer1 ile ikinci bir bağımsız DAC kanalı çalıştırılabilir.

Adım 6: Metronom

Image
Image
metronom
metronom
metronom
metronom

Bir metronom, müzik çalarken ritmi takip etmeye yardımcı olur. Çok kısa darbeler için, arduino zamanlayıcı çıkışı, net bir şekilde duyulabilir tıklamalar üretecek şekilde doğrudan bir hoparlöre beslenebilir. Bir potansiyometre ile vuruş frekansı 39 adımda dakikada 40 ila 208 vuruş arasında düzenlenebilir. Gerekli hassasiyet için Timer1 gereklidir. Frekansı belirleyen 'TOP' değeri loop() işlevi içinde değiştirilir ve bu dikkat gerektirir! Burada, WGM modunun sabit frekansa sahip diğer örneklerden farklı olduğunu görüyorsunuz: OCR1A kaydı tarafından TOP ayarlanan bu mod, çift ara belleğe sahiptir ve eksik TOP'a ve uzun bir arızaya karşı koruma sağlar. Ancak bu sadece 1 çıkış pini kullanabileceğimiz anlamına gelir.

Adım 7: Ses Spektrumu

Image
Image
Ses Spektrumu
Ses Spektrumu
Ses Spektrumu
Ses Spektrumu

İnsanlar, 20Hz'den 20kHz'e kadar 3 büyüklük derecesinden fazla ses frekansını duyabilir Bu örnek, bir potansiyometre ile tam spektrum oluşturur. DC akımını engellemek için hoparlör ve Arduino arasına 10muF kapasitör konur. Timer1 bir kare dalga üretir. Buradaki Dalga formu oluşturma modu, Faz-doğru PWM'dir. Bu modda, sayaç en tepeye ulaştığında geriye doğru saymaya başlar, bu da görev döngüsü değişse bile ortalamaları sabit olan darbelerle sonuçlanır. Bununla birlikte, aynı zamanda (neredeyse) iki katı olan bir periyotla sonuçlanır ve ön ölçek 8 ile timer1'in ön ölçeği değiştirmeye gerek kalmadan tüm duyulabilir spektrumu kapsadığı görülür. Ayrıca burada, TOP'un değeri hareket halindeyken değiştirildiğinden, OCR1A'nın üst olarak kullanılması aksaklıkları azaltır.

Adım 8: Servo Motorlar

Image
Image
Servo Motorlar
Servo Motorlar
Servo Motorlar
Servo Motorlar

Güçlü servo kitaplıkları vardır, ancak sürmek için yalnızca iki servonuz varsa, bunu doğrudan timer1 ile yapabilir ve böylece CPU, bellek kullanımını azaltabilir ve kesintileri önleyebilirsiniz. Popüler SG90 servosu 50 Hz'lik bir sinyal alır ve darbe uzunluğu konumu kodlar. Zamanlayıcı1 için idealdir. Frekans sabittir, böylece pin9 ve pin 10 üzerindeki her iki çıkış da servoları bağımsız olarak yönlendirmek için kullanılabilir.

Adım 9: Voltaj Katlayıcı ve İnverter

Voltaj Katlayıcı ve İnverter
Voltaj Katlayıcı ve İnverter
Voltaj Katlayıcı ve İnverter
Voltaj Katlayıcı ve İnverter
Voltaj Katlayıcı ve İnverter
Voltaj Katlayıcı ve İnverter

Bazen projeniz 5V'tan daha yüksek bir voltaj veya negatif bir voltaj gerektirir. Bir MOSFET çalıştırmak, bir piezo elemanı çalıştırmak, bir opampı çalıştırmak veya bir EEPROM'u sıfırlamak olabilir. Akım çekişi ~5mA'ya kadar yeterince küçükse, bir şarj pompası en basit çözüm olabilir: sadece 2 diyot ve bir zamanlayıcıdan gelen darbeli bir sinyale bağlı iki kapasitör, arduino 5V'yi 10V'a ikiye katlamaya izin verir. Pratikte 2 diyot düşüşü vardır, bu nedenle pratikte katlayıcı için 8.6V veya invertör için -3.6V gibi olacaktır.

Kare dalganın frekansı, diyotlardan yeterli yükü pompalamak için yeterli olmalıdır. 1muF kapasitör, voltaj 0 ile 5V arasında değiştiğinde 5muC değişim hareket eder, bu nedenle 10mA akım için frekans en az 2kHz olmalıdır. Uygulamada, dalgalanmayı azalttığı için daha yüksek bir frekans daha iyidir. Ön ölçek olmadan 0'dan 255'e kadar sayan timer2 ile frekans 62,5 kHz'dir ve bu iyi çalışır.

Adım 10: Kablosuz Güç Aktarımı

Image
Image
Kablosuz Güç Aktarımı
Kablosuz Güç Aktarımı
Kablosuz Güç Aktarımı
Kablosuz Güç Aktarımı

Bir akıllı saati kablo olmadan şarj etmek alışılmadık bir durum değildir, ancak aynı şey kolayca bir Arduino projesinin parçası olabilir. Yüksek frekanslı bir sinyale sahip bir bobin, elektriksel temas olmaksızın indüksiyon yoluyla yakındaki başka bir bobine güç aktarabilir.

İlk önce bobinleri hazırlayın. 2 bobin yapmak için 8,5 cm çapında bir kağıt rulosu ve 0,13 mm çapında emaye tel kullandım: 20 dönüşlü birincil, 50 dönüşlü ikincil. N sargılı ve R yarıçaplı bu tip bobinin kendi kendine endüktansı ~5muH * N^2 * R'dir. Dolayısıyla N=20 ve R=0.0425 için L=85muH verir, bu da bileşen test cihazı ile teyit edilmiştir. 2pi*f*L=275Ohm empedansla sonuçlanan 516kHz frekanslı bir sinyal üretiyoruz. Bu, Arduino'nun aşırı akıma girmemesi için yeterince yüksektir.

Bobini en verimli şekilde çalıştırmak için gerçek bir AC kaynağı kullanmak istiyoruz. Yapılabilecek bir numara var: bir zamanlayıcının iki çıkışı, çıkışlardan biri ters çevrilerek zıt fazda çalıştırılabilir. Sinüs dalgasına daha da benzemek için Faz Doğru PWM kullanıyoruz. Bu şekilde, pin 9 ile 10 arasında voltaj, 0V, pin 9 +5V, her ikisi de 0V, pin 10 +5V arasında değişir. Efekt, resimde bir dürbün izinden gösterilmektedir (1024 ön ölçekle, bu oyuncak dürbün fazla bant genişliğine sahip değildir).

Birincil bobini pim 9 ve 10'a bağlayın. İkincil bobine bir LED bağlayın. İkincil bobin birincil bobine yaklaştırıldığında LED parlak bir şekilde yanar.

Önerilen: