2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Merhaba millet, Son talimatımı yayınladığımdan bu yana epey zaman geçti. Şu anda kafamda birçok şey dönüyor ama sizin için bu kısa talimatta ATTiny-Serisi çiplerle "ilk adımlarımı" belgelemeyi başardım.
Bazı ATTINY85 örnekleri sipariş ettim çünkü onları test etmek istedim:-) (herkes bir şeyleri test etmeyi sever, değil mi?). Bundan sonra defterime bazı fikirler çizmeye başladım. Dürüst olmak gerekirse, yaptığım ilk şey, kurulumunuzun/alet zincirinizin çalışıp çalışmadığını kontrol etmek için her zaman olduğu gibi iyi bir başlangıç olan bir LED'i yanıp sönmek oldu. Ayrıca DHT22 ve SoftwareSerial ile bir sıcaklık ve nem kaydedici denedim. Bu zor bir şeydi çünkü DHT Kitaplıkları esas olarak 16Mhz saat içindir (böyle bir şey yapmayı planlıyorsanız, dahili saati nasıl önceden ölçeklendireceğinizi kontrol edin). Ama size daha komik bir şey göstermeye karar verdim. BTW: Çizimlerimden birini sizin için yükledim, bu bir Rembrandt değil ama size bu (gerçekten) aptalca fikri bir kağıda nasıl aldığımı gösterecek: -P.
Bu projeyi (benim için) mümkün olduğu kadar ucuz tutmak için sadece etrafta yatan şeyleri kullandım. Bu küçük maceranın sonucu, 10-15$ civarında güzel bir küçük "ışık takipçisi robot" (benim için 3$:-P)
Yani ATTINY ile ilgileniyorsanız, daha fazlasını okuyun.
BTW: kötü ingilizcem için üzgünüm (anadili değilim)
Adım 1: ATTiny & Tools & Materials'a Başlarken
Başlamak için neye ihtiyacınız olacak:
- bir ATTiny85 çipi
- Arduino UNO veya benzeri
- bazı jumper-wire veya ATTINY programlayıcılı bir pano veya Arduino için kendiniz bir programcı-shield yapın (ekli resimleri kontrol edin, avdweb.nl'den bir şematik var). Ben de bunu yaptım ve bundan gerçekten çok memnunum, yaptığım tek değişiklik ATTinyx4 Serisi için bir soket eklememdi (resme ve pinout diyagramlarına bakın).
- Arduino IDE (buradan edinin)
- ArduinoIDE için donanım dosyaları (indirin ve kurun)
Oyun alanına Info-Link Direct Kullandığım github dosyalarına bağlantı
- Arduino'yu ISP taslağı olarak UNO'ya yükleyin (bu sizin programlayıcınız olacaktır)
- bu talimatı (https://highlowtech.org/) veya bu talimatı (ardutronix tarafından) izleyin ve "yanıp sönen" çizimi deneyin (PIN No'yu değiştirin. ATTINY resmini referans olarak kullanın! ve bunun için bir ~ 220Ohm Direnç)
Her şeyi kontrol etmek için küçük bir devre tahtası kurulumu yapın. Her şeyi doğru yaptıysanız, LED yanıp sönecek ve gitmeye hazırsınız.
ALETLER
- Havya- biraz lehim- küçük bir tel kesici- bir dremel veya başka bir döner alet (sadece PCB'yi kesmek için!)- bazı sıcak tutkal- cımbız- teller
MALZEMELER
- prototipleme PCB'si (~4cmx6cm yapacaktır)- 2x LDR- 5x 10k Direnç (LDR'ler için 2x ve transistörler için 2x, 1x LED) - 1x 330Ohm Direnç (1x NEOPİKSEL)- 2x LDR- 1x LED (sizin renginiz tekerlek yerine seçim)- 3x NEOPIXEL WS2812- 2x Transistör (BD137 veya benzeri)- 2x Diyot (1N4001 veya benzeri)- 2x mikromotor (örn. IC Soketi- 1x 1s LIPO (eski bir RC helikopterinden 140Ah kullandım)- bazı pinheaders/soketler- shrinktube (LDR muhafazası)
Donanımı oluşturarak devam edelim…
2. Adım: Donanım
Eklediğim şemalara bir göz atarsanız, donanım kurulumu oldukça basittir. Yani şemaları okuyabiliyor ve bir havya kullanabiliyorsanız, bu işin yarısıdır. Fotolara da bir göz atın, sizin için bazı notlar ekledim.
PCB'yi kesmek için bir plan sunmuyorum, kendi tasarımınızı yapma özgürlüğüne sahipsiniz (yaratıcı olun ve bize Minik Botlarınızı gösterin). Tüm elektronik bileşenlerin yerleşimi de size kalmış. Benim tarafımdan bazı ipuçları:
Motorları tam olarak hizalamaya çalışın (açıya dikkat edin!) Tekerlek yerine sadece motor milini kullanıyoruz. (bu daha az enerji tüketir)Motorları akünün (ağırlık) altına yerleştirmenizi ve ön taraftaki LDR'leri (45 ° açılı) LED ile eşleştirilmiş olarak kullanmanızı tavsiye ederim (bu kombinasyonu engelden kaçınmak için kullanmaya çalışıyorum, ayrıca testler gereklidir).
Ayrıca pilin bu kadar kolay kaybolmaması için küçük bir açma/kapama jumperı yapmanızı tavsiye ederim.
Anlaşılmayan bir şey varsa veya sorularınız varsa, bana sorun. Bu küçücük projeden bir tez yapmak pek bir şey kazandırmaz.
3. Adım: Yazılım
İlk olarak ADAFRUIT Neopixel Library'yi indirin ve kurun
İşte bazı önemli açıklamaları içeren kodum (skeç dosyasını da ekledim). Her adım için yorum yapmadım çünkü gerekli olmadığını düşünüyorum.
Çizimi ATTiny85'inize yükleyin ve yeni oyuncağınızla eğlenin
"Kişilik" işlevi için fikirler + belki kod örnekleri çok açığız:-)
Herhangi bir sorunuz varsa, sormaktan çekinmeyin.
Umarım kısa talimatımdan ve ATTINY'lerin dünyasına yaptığım küçük yolculuktan keyif almışsınızdır.
/* ATTINY85-Rata basit ATTINY85 destekli ışık takip eden robot. Versiyon 2.0, Auer Markus tarafından */
#Dahil etmek
#Dahil etmek
//motorlar
#define LMOTOR 0 #define RMOTOR 1 //LED'ler #define PIXELPIN 2 #define NUMPIXEL 3 //LDRs #define LLDR A2 #define RLDR A3
//otherint emo = 0; yüzer kalibre; boole ifadesi; uzun eski millis; //Neopixels tanımlaAdafruit_NeoPixel PIXEL = Adafruit_NeoPixel(NUMPIXEL, PIXELPIN, NEO_GRB + NEO_KHZ800);
geçersiz kurulum()
{ //upscale clock aksi takdirde bazı zamanlama problemleriyle karşılaşırsınız (neopixel lib 16MHz için yazılmıştır) #if tanımlı (_AVR_ATtiny85_) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif
//PINMODE pinMode(LMOTOR, ÇIKIŞ); pinMode(RMOTOR, ÇIKIŞ); pinMode(LLDR, GİRİŞ); pinMode(LLDR, GİRİŞ); // pikselleri başlat PIXEL.begin(); PİKSEL.göster(); gecikme(500); //başlangıç sırası for(int i=0;i
boşluk döngüsü()
{ if(lightfollow() == 1) { sol(); } else if(lightfollow() == 2) { right(); } else if(lightfollow() == 0) { forward(); } duygu(); }
int lightfollow() {
int eşik = 14; int sonuç = 0; sola kayar = 0; sağa kayar = 0; int örnekler = 1; // için LDR'leri oku (int j = 0; j<samples; j++){
sol = sol + analogRead(LLDR); sağ = sağ + (analogRead(RLDR)*calib);
}
//sonucu hesapla (ışık hangi yönden geliyor?)
if((sol/örnekler) > ((sağ/örnekler)+eşik)) {sonuç = 2;}
else if((sol/örnekler) < ((sağ/örnekler)-eşik)) {sonuç = 1;}
başka {sonuç = 0;}
dönüş sonucu; } void forward() { //Forward analogWrite(LMOTOR, 230); analogWrite(RMOTOR, 230); PIXEL.setPixelColor(0, PIXEL. Color(0, 0, 255)); PIXEL.setPixelColor(2, PIXEL. Color(0, 0, 255)); PİKSEL.göster(); }
sol boşluk() {
//SOL analogWrite(LMOTOR, 150); analogWrite(RMOTOR, 255); PIXEL.setPixelColor(0, PIXEL. Color(0, 0, 255)); //PIXEL.setPixelColor(1, PIXEL. Color(75, 0, 0)); PIXEL.setPixelColor(2, PIXEL. Color(0, 100, 0)); PİKSEL.göster(); }
sağ geçersiz() {
//SAĞ analogWrite(LMOTOR, 255); analogWrite(RMOTOR, 150); PIXEL.setPixelColor(0, PIXEL. Color(0, 100, 0)); PIXEL.setPixelColor(2, PIXEL. Color(0, 0, 255)); PİKSEL.göster(); }
//bu daha sonraki deneyler içindir, buna biraz kişilik kazandırmaya çalışıyorum:-) neler yapılabileceğini test ediyorum ama henüz iyi bir fikir yok.
void duygu() { int emotimer = 2500; int süre = rastgele(250, 750); if (millis() - eskimillis > emotimer) { eskimillis = millis(); emo = rastgele(1, 4); } if (millis() - oldmillis > süre) { emostate = !emostat; } if (emostate == true) { geçiş (emo) { durum 1: PIXEL.setPixelColor(1, PIXEL. Color((255), (255), (255))); PİKSEL.göster(); kırmak; durum 2: PIXEL.setPixelColor(1, PIXEL. Color((255), (0), (0))); PİKSEL.göster(); kırmak; durum 3: PIXEL.setPixelColor(1, PIXEL. Color((0), (255), (0))); PİKSEL.göster(); kırmak; varsayılan: PIXEL.setPixelColor(1, PIXEL. Color(rastgele(0, 255), rastgele(0, 255), rastgele(0, 255))); PİKSEL.göster(); kırmak; } } else { PIXEL.setPixelColor(1, PIXEL. Color(25, 0, 0)); PİKSEL.göster(); } }