Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
Salamlar millet
son təlimatımı yazmağımdan bir müddət keçdi. Hal-hazırda başımda çox şeylər gedir, amma ATTiny-Series fişləri ilə "ilk addımlarımı" bu qısa təlimatlandırmaqla sənədləşdirməyi bacardım.
Test etmək istədiyim üçün bəzi ATTINY85 nümunələri sifariş etdim:-) (hamı şeyləri sınamağı sevir, elə deyilmi?) Bundan sonra dəftərimə bəzi fikirlər çəkməyə başladım. Düzünü desəm, etdiyim ilk şey, quraşdırma/alət zəncirinizin işlədiyini yoxlamaq üçün həmişə yaxşı bir başlanğıc olan bir LED -in yanıb -sönməsi idi. DHT22 və SoftwareSerial ilə bir temperatur və rütubət qeydini də sınadım. DHT Kitabxanaları əsasən 16Mhz saat üçün olduğu üçün bu çox çətin idi (belə bir şey etməyi planlaşdırırsınızsa, daxili saatı necə ölçmək lazım olduğunu yoxlayın). Amma sizə daha əyləncəli bir şey göstərməyə qərar verdim. BTW: Rəsmlərimdən birini sizin üçün yüklədim, bu Rembrandt deyil, amma bu (həqiqətən) axmaq fikri bir kağız parçasına necə aldığımı göstərəcək: -P.
Bu layihəni mümkün qədər ucuz tutmaq üçün yalan danışdığım şeyləri istifadə etdim (mənim üçün). Bu kiçik macəranın nəticəsi təxminən 10-15 $ (mənim üçün 3 $:-P)
ATTINY ilə maraqlanırsınızsa, daha çox oxuyun.
BTW: pis ingilis dilim üçün üzr istəyirəm (ana dilində deyiləm)
Addım 1: ATTiny və Alətlər və Materiallarla işə başlayın
Başlamaq üçün sizə lazım olacaq:
- ATTiny85 çipi
- Arduino UNO və ya bənzəri
-bəzi tullanan telli və ya ATTINY bir proqramçı ilə abboardboard və ya özünüz Arduino üçün bir proqramçı-qalxan düzəldin (əlavə edilmiş şəkilləri yoxlayın, avdweb.nl-dən bir sxem var). Bunu da etdim və həqiqətən də məmnunam ki, etdiyim yeganə dəyişiklik ATTinyx4 Series üçün bir yuva əlavə etməyim idi (şəkilə və pinout diaqramlarına baxın).
- Arduino IDE (buradan əldə edin)
- ArduinoIDE üçün hardware faylları (yükləyin və quraşdırın)
Oyun meydançasına Məlumat Bağlantısı İstifadə etdiyim github fayllarına keçid
- Arduinonu ISO eskizi olaraq UNO -ya yükləyin (bu sizin proqramçınız olacaq)
- bu təlimatı (https://highlowtech.org/) və ya bu təlimatı (ardutronix tərəfindən) izləyin və "yanıb -sönmək" eskizini sınayın (PIN nömrəsini dəyişdirərək ATTINY şəklini istinad olaraq istifadə edin! əvvəlcədən vurulmuş ATTINY a LED lazımdır) və bunun üçün ~ 220 Ohm Rezistor)
Hər şeyi yoxlamaq üçün kiçik bir çörək paneli qurun. Hər şeyi düzgün etdinizsə, LED yanıb-sönəcək və getməyə hazırsınız.
ARAÇLAR
- Lehimləmə Dəmiri- bir az lehim- kiçik tel kəsici- dremel və ya digər fırlanan alət (yalnız PCB kəsmək üçün!)- bəzi isti yapışqan- cımbız tellər
MATERİALLAR
- PCB prototipləşdirmə (~ 4cmx6cm bunu edəcək)- 2x LDR- 5x 10k Rezistor (LDR-lər üçün 2x və transistorlar üçün 2x BE, 1x LED)- 1x 330Ohm Rezistor (1x NEOPIXELS)- 2x LDR- 1x LED (rənginiz seçim, təkər əvəzinə)- 3x NEOPIXEL WS2812- 2x Transistor (BD137 və ya bənzəri)- 2x Diod (1N4001 və ya bənzəri)- 2x mikromotor (məsələn, Hubsan mikro quadcopterindən)- 1x ATTINY85 + isteğe bağlı (tövsiyə olunur) 8PIN IC Soket- 1x 1s LIPO (köhnə bir RC helikopterindən 140Ah istifadə etdim)- bəzi pinheads/sockets- shrinktube (LDR korpusu)
Avadanlıq quraraq davam edək …
Addım 2: Avadanlıq
Əlavə etdiyim sxemlərə nəzər salırsınızsa, aparatın qurulması olduqca sadədir. Sxemləri oxumağı və bir lehimləmə dəmirindən istifadə etməyi bacarırsınızsa, bu hiylənin yarısıdır. Fotoşəkillərə də baxın, sizin üçün bəzi qeydlər əlavə etdim.
PCB kəsmək üçün bir plan vermirəm, öz dizaynınızı etmək azadlığınız var (yaradıcı olun və Kiçik Botlarınızı bizə göstərin). Bütün elektron komponentlərin yerləşdirilməsi də sizə bağlıdır. Mənim tərəfimdən bəzi göstərişlər:
Mühərrikləri dəqiq hizalamağa çalışın (bucağı izləyin!) Yalnız təkərlər əvəzinə motor milindən istifadə edirik. (bu daha az enerji sərf edəcək) Mən mühərrikləri batareyanın altına (çəki) yerləşdirməyi və LED -lə qoşulmuş ön tərəfdəki (45 ° bucaqlı) LDR -lərdən istifadə etməyi məsləhət görürəm (bu kombinasiyanı maneə törətməmək üçün istifadə edirəm. testlərə ehtiyac var).
Əlavə olaraq bir az açma/söndürmə tullanması etməyi məsləhət görürəm ki, batareya o qədər də asan itməsin.
Qaranlıq bir şey varsa və ya suallarınız varsa, mənə müraciət edin. Bu kiçik layihədən tez çıxarmaq üçün çox şey etməz.
Addım 3: Proqram təminatı
ADAFRUIT Neopixel Kitabxanasını yükləyin və quraşdırın
Bəzi əsas təsvirləri olan kodum budur (eskiz faylını da əlavə etdim). Hər addımı şərh etmədim, çünki lazım olmadığını düşünürəm.
Eskizi ATTiny85 -ə yükləyin və yeni oyuncağınızla əylənin
"Şəxsiyyət" funksiyası üçün fikirlər + bəlkə kod nümunələri çox xoş gəlir:-)
Hər hansı bir sualınız varsa, çekinmeyin.
Ümid edirəm qısa təlimatlı və ATTINYs dünyasına kiçik səyahətimdən zövq aldınız.
/* ATTINY85-Rata sadə ATTINY85 ilə işləyən işığı izləyən robot. Versiya 2.0, Auer Markus */
#daxil edin
#daxil edin
// mühərriklər
#define LMOTOR 0 #define RMOTOR 1 // LEDlər #dexinePIXELPIN 2 #define NUMPIXEL 3 // LDRs #define LLDR A2 #define RLDR A3
// digər emo = 0; üzən kalibr; boolean emostat; uzun oldmillis; // NeopixelsAdafruit_NeoPixel PIXEL = Adafruit_NeoPixel (NUMPIXEL, PIXELPIN, NEO_GRB + NEO_KHZ800) təyin edin;
boş quraşdırma ()
{// yüksək səviyyəli saat, başqa vaxt problemlərində qarşılaşacaqsınız (neopiksel lib 16MHz üçün yazılmışdır) #if müəyyən edilmişsə (_AVR_ATtiny85_) əgər (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif
// PINMODE pinMode (LMOTOR, ÇIXIŞ); pinMode (RMOTOR, ÇIXIŞ); pinMode (LLDR, GİRİŞ); pinMode (LLDR, GİRİŞ); // pikselləri başlatmaq PIXEL.begin (); PIXEL.show (); gecikmə (500); // üçün startequence (int i = 0; i
boşluq döngəsi ()
{if (lightfollow () == 1) {left (); } başqa if (lightfollow () == 2) {right (); } başqa if (lightfollow () == 0) {irəli (); } duyğu (); }
int lightfollow () {
int treshold = 14; int nəticə = 0; sola üzmək = 0; sağa üzmək = 0; int nümunələri = 1; // üçün LDR -ləri oxuyun (int j = 0; j <nümunələri; j ++) {
sol = sol + analogRead (LLDR); sağ = sağ + (analogRead (RLDR)*kalibr);
}
// nəticəni hesablayın (işıq hansı istiqamətdən gəlir?)
əgər ((sol/nümunələr)> ((sağ/nümunələr)+treshold)) {nəticə = 2;}
başqa halda ((sol/nümunələr) <((sağ/nümunələr) -təşkil)) {nəticə = 1;}
başqa {nəticə = 0;}
qaytarma nəticəsi; } 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)); PIXEL.show (); }
sol boşluq () {
// LEFT 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)); PIXEL.show (); }
sağ boş () {
// SAĞ analogWrite (LMOTOR, 255); analogWrite (RMOTOR, 150); PIXEL.setPixelColor (0, PIXEL. Color (0, 100, 0)); PIXEL.setPixelColor (2, PIXEL. Color (0, 0, 255)); PIXEL.show (); }
// bu, bir az da şəxsiyyət verməyə çalışan başqa təcrübələr üçündür:-) bacara biləcəyimi sınayıram, amma hələ yaxşı fikir yoxdur.
boş emosiya () {int emotimer = 2500; int müddəti = təsadüfi (250, 750); əgər (millis () - oldmillis> emosimer) {oldmillis = millis (); emo = təsadüfi (1, 4); } if (millis () - oldmillis> duration) {emostate =! emostate; } if (emostate == true) {switch (emo) {case 1: PIXEL.setPixelColor (1, PIXEL. Color ((255), (255), (255)))); PIXEL.show (); fasilə; hal 2: PIXEL.setPixelColor (1, PIXEL. Color ((255), (0), (0)))); PIXEL.show (); fasilə; hal 3: PIXEL.setPixelColor (1, PIXEL. Color ((0), (255), (0)))); PIXEL.show (); fasilə; standart: PIXEL.setPixelColor (1, PIXEL. Color (təsadüfi (0, 255), təsadüfi (0, 255), təsadüfi (0, 255)))); PIXEL.show (); fasilə; }} başqa {PIXEL.setPixelColor (1, PIXEL. Color (25, 0, 0)); PIXEL.show (); }}