สารบัญ:

ATTiny-RAT, ATTINY Powered Mini Lightfollower: 3 ขั้นตอน
ATTiny-RAT, ATTINY Powered Mini Lightfollower: 3 ขั้นตอน

วีดีโอ: ATTiny-RAT, ATTINY Powered Mini Lightfollower: 3 ขั้นตอน

วีดีโอ: ATTiny-RAT, ATTINY Powered Mini Lightfollower: 3 ขั้นตอน
วีดีโอ: Programming the new ATtiny from Arduino using UPDI [Beginner Tutorial] 2024, พฤศจิกายน
Anonim
ATTiny-RAT, ATTINY ขับเคลื่อนมินิไลท์ผู้ติดตาม
ATTiny-RAT, ATTINY ขับเคลื่อนมินิไลท์ผู้ติดตาม
ATTiny-RAT, ATTINY ขับเคลื่อนมินิไลท์ผู้ติดตาม
ATTiny-RAT, ATTINY ขับเคลื่อนมินิไลท์ผู้ติดตาม
ATTiny-RAT, ATTINY ขับเคลื่อนมินิไลท์ผู้ติดตาม
ATTiny-RAT, ATTINY ขับเคลื่อนมินิไลท์ผู้ติดตาม
ATTiny-RAT, ATTINY ขับเคลื่อนมินิไลท์ผู้ติดตาม
ATTiny-RAT, ATTINY ขับเคลื่อนมินิไลท์ผู้ติดตาม

สวัสดี

เป็นเวลานานแล้วที่ฉันโพสต์คำสั่งสุดท้ายของฉัน ตอนนี้มีหลายสิ่งหลายอย่างเกิดขึ้นในหัวของฉัน แต่ฉันจัดการบันทึก "ขั้นตอนแรก" ของฉันด้วยชิป ATTiny-Series ในคำแนะนำสั้น ๆ นี้สำหรับคุณ

ฉันสั่งซื้อตัวอย่าง ATTINY85 เพียงเพราะว่าต้องการทดสอบ:-) (ทุกคนชอบที่จะทดสอบสิ่งต่างๆ ใช่ไหม) หลังจากนั้นฉันก็เริ่มวาดไอเดียบางอย่างลงในสมุดบันทึก พูดตามตรง สิ่งแรกที่ฉันทำคือไฟ LED กะพริบซึ่งเป็นการเริ่มต้นที่ดีเสมอเพื่อตรวจสอบว่าการตั้งค่า/ชุดเครื่องมือของคุณทำงานหรือไม่ ฉันยังลองใช้ตัวบันทึกอุณหภูมิและความชื้นด้วย DHT22 และ SoftwareSerial นั่นเป็นเรื่องที่ยุ่งยากเพราะไลบรารี DHT นั้นใช้สำหรับนาฬิกา 16Mhz เป็นหลัก (หากคุณวางแผนที่จะทำอย่างนั้น ให้ตรวจสอบวิธีปรับสเกลนาฬิกาภายในล่วงหน้า) แต่ฉันตัดสินใจที่จะแสดงบางสิ่งที่สนุกกว่าให้คุณดู BTW: ฉันอัปโหลดภาพวาดของฉันให้คุณ มันไม่ใช่ Rembrandt แต่มันจะแสดงให้คุณเห็นว่าฉันได้ไอเดียโง่ ๆ (จริงๆ) นี้บนกระดาษได้อย่างไร: -NS.

ฉันใช้เฉพาะสิ่งที่ฉันโกหกเพื่อให้โครงการนี้ถูกที่สุด (สำหรับฉัน) ผลลัพธ์ของการผจญภัยเล็ก ๆ นี้คือ "หุ่นยนต์ lightfollower" ตัวเล็ก ๆ ที่ดีในราคาประมาณ 10-15$ (3$ สำหรับฉัน:-P)

ดังนั้นหากคุณสนใจ ATTINY ด้วยตัวเอง โปรดอ่านเพิ่มเติม

BTW: ขอโทษสำหรับภาษาอังกฤษที่ไม่ดีของฉัน (ฉันไม่ใช่เจ้าของภาษา)

ขั้นตอนที่ 1: เริ่มต้นใช้งาน ATTiny & Tools & Materials

เริ่มต้นใช้งาน ATTiny & Tools & Materials
เริ่มต้นใช้งาน ATTiny & Tools & Materials
เริ่มต้นใช้งาน ATTiny & Tools & Materials
เริ่มต้นใช้งาน ATTiny & Tools & Materials
เริ่มต้นใช้งาน ATTiny & Tools & Materials
เริ่มต้นใช้งาน ATTiny & Tools & Materials
เริ่มต้นใช้งาน ATTiny & Tools & Materials
เริ่มต้นใช้งาน ATTiny & Tools & Materials

สิ่งที่คุณจะต้องเริ่มต้น:

- ชิป ATTiny85

- Arduino UNO หรือเทียบเท่า

- กระดานอักษรไขว้ด้วยสายจัมเปอร์หรือโปรแกรมเมอร์ ATTINY หรือสร้างโล่โปรแกรมเมอร์สำหรับ Arduino ด้วยตัวเอง (ตรวจสอบรูปภาพที่แนบมามีแผนผังจาก avdweb.nl) ฉันยังทำสิ่งนี้และฉันก็พอใจกับมันมาก การปรับเปลี่ยนเพียงอย่างเดียวที่ฉันทำคือเพิ่มซ็อกเก็ตสำหรับ ATTinyx4 Series (ดูรูปและไดอะแกรม pinout)

- Arduino IDE (รับที่นี่)

- hardwarefiles สำหรับ ArduinoIDE (ดาวน์โหลดและติดตั้ง)

Info-Link to the playgrounddirect ลิงก์ไปยังไฟล์ github ที่ฉันใช้

- โหลด Arduino เป็น ISP ร่างบน UNO (นี่จะเป็นโปรแกรมเมอร์ของคุณ)

- ทำตามคำแนะนำนี้ (https://highlowtech.org/) หรือคำแนะนำนี้ (โดย ardutronix) และลองใช้ภาพร่าง "กะพริบตา" (แก้ไขหมายเลข PIN ใช้รูปภาพ ATTINY เป็นข้อมูลอ้างอิง! คุณจะต้องมีไฟ LED ATTINY แบบ preflashed และตัวต้านทาน ~ 220Ohm สำหรับสิ่งนั้น)

ตั้งค่าเขียงหั่นขนมขนาดเล็กเพื่อตรวจสอบทุกอย่าง หากคุณทำทุกอย่างถูกต้อง ไฟ LED จะกะพริบและคุณพร้อมที่จะไป

เครื่องมือ

- หัวแร้ง- บัดกรีบางส่วน- เครื่องตัดลวดขนาดเล็ก- เดรเมลหรือเครื่องมือโรตารี่อื่นๆ (สำหรับตัด PCB เท่านั้น!)- กาวร้อนบางตัว- แหนบ- สายไฟ

วัสดุ

- สร้างต้นแบบ PCB (~4cmx6cm จะทำ)- 2x LDR- 5x 10k Resistor (2x สำหรับ LDRs และ 2x สำหรับทรานซิสเตอร์ BE, 1x LED) - 1x 330Ohm Resistor (1x NEOPIXELS)- 2x LDR- 1x LED (สีของของคุณ ตัวเลือก แทนที่จะเป็นล้อล้อเลื่อน)- 3x NEOPIXEL WS2812- 2x ทรานซิสเตอร์ (BD137 หรือใกล้เคียง)- 2x Diode (1N4001 หรือใกล้เคียง)- 2x micromotor (เช่นจาก Hubsan micro-quadcopter)- 1x ATTINY85 + อุปกรณ์เสริม (แนะนำ) 8PIN ซ็อกเก็ต IC- 1x 1s LIPO (ฉันใช้ 140Ah จากเฮลิคอปเตอร์ RC เก่า) - พินเฮดเดอร์ / ซ็อกเก็ตบางตัว - Shrinktube (ตัวเรือน LDR)

มาดำเนินการสร้างฮาร์ดแวร์กัน…

ขั้นตอนที่ 2: ฮาร์ดแวร์

ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์

หากคุณดูแผนผังที่ฉันแนบมา การติดตั้งฮาร์ดแวร์นั้นค่อนข้างง่าย ดังนั้น หากคุณสามารถอ่านแผนผังและใช้หัวแร้งได้ นั่นเป็นเคล็ดลับเพียงครึ่งเดียว ดูรูปภาพด้วย ฉันเพิ่มบันทึกย่อให้คุณ

ฉันไม่ได้มีแผนสำหรับการตัด PCB คุณมีอิสระในการออกแบบของคุณเอง (มีความคิดสร้างสรรค์และแสดงให้เราเห็น Tiny Bots ของคุณ) การจัดวางส่วนประกอบอิเล็กทรอนิกส์ทั้งหมดนั้นขึ้นอยู่กับคุณเช่นกัน คำแนะนำบางอย่างจากด้านข้างของฉัน:

พยายามจัดตำแหน่งมอเตอร์ให้แม่นยำ (ดูมุม!) เราใช้เฉพาะเพลามอเตอร์แทนล้อเท่านั้น (สิ่งนี้จะใช้พลังงานน้อยลง) ฉันแนะนำให้วางมอเตอร์ไว้ใต้แบตเตอรี่ (น้ำหนัก) และใช้ LDR ที่ด้านหน้า (ทำมุม 45 °) ที่จับคู่กับ LED (ฉันกำลังพยายามใช้ชุดค่าผสมนี้เพื่อหลีกเลี่ยงอุปสรรคต่อไป จำเป็นต้องมีการทดสอบ)

นอกจากนี้ ฉันแนะนำให้ทำจัมเปอร์เปิด/ปิดเล็กน้อย เพื่อไม่ให้แบตเตอรี่สูญหายง่าย

หากมีอะไรไม่ชัดเจนหรือมีคำถาม ถามมาได้เลยนะครับ มันไม่สมเหตุสมผลเลยที่จะทำวิทยานิพนธ์จากโครงการเล็กๆ นี้

ขั้นตอนที่ 3: ซอฟต์แวร์

ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์
ซอฟต์แวร์

อันดับแรก ดาวน์โหลดและติดตั้ง ADAFRUIT Neopixel Library

นี่คือรหัสของฉันพร้อมคำอธิบายที่สำคัญ (ฉันยังเพิ่มไฟล์สเก็ตช์ด้วย) ฉันไม่ได้แสดงความคิดเห็นทุกขั้นตอนเพราะฉันคิดว่ามันไม่จำเป็น

อัปโหลดภาพสเก็ตช์ไปยัง ATTiny85 แล้วสนุกไปกับของเล่นชิ้นใหม่ของคุณ

แนวคิดสำหรับฟังก์ชั่น "บุคลิกภาพ" + อาจเป็นตัวอย่างโค้ด:-)

หากมีคำถามใด ๆ อย่าลังเลที่จะถาม

ฉันหวังว่าคุณจะสนุกกับการสอนสั้น ๆ ของฉันและการเดินทางเล็ก ๆ น้อย ๆ สู่โลกของ ATTINY

/* ATTINY85-Rata หุ่นยนต์ ATTINY85 แบบง่ายขับเคลื่อนด้วยแสง เวอร์ชัน 2.0 โดย Auer Markus */

#รวม

#รวม

//มอเตอร์

#define LMOTOR 0 #define RMOTOR 1 // LEDs #define PIXELPIN 2 #define NUMPIXEL 3 // LDRs #define LLDR A2 #define RLDR A3

// อีโมอื่นๆ = 0; ลอยลำ; บูลีนอีโมสเตต; oldmillis ยาว; //กำหนด NeopixelsAdafruit_NeoPixel PIXEL = Adafruit_NeoPixel(NUMPIXEL, PIXELPIN, NEO_GRB + NEO_KHZ800);

การตั้งค่าเป็นโมฆะ ()

{ //นาฬิกาหรูอย่างอื่นคุณจะพบกับปัญหาเวลา (neopixel lib เขียนขึ้นสำหรับ 16MHz) #if กำหนดไว้ (_AVR_ATtiny85_) ถ้า (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif

//PINMODE โหมดพิน (LMOTOR, OUTPUT); โหมดพิน (RMOTOR, OUTPUT); โหมดพิน (LLDR, อินพุต); โหมดพิน (LLDR, อินพุต); //เริ่มต้นพิกเซล PIXEL.begin(); PIXEL.show(); ล่าช้า (500); //startsequence สำหรับ (int i=0;i

วงเป็นโมฆะ ()

{ if(lightfollow() == 1) { left(); } อื่น if(lightfollow() == 2) { right(); } else if(lightfollow() == 0) { forward(); } อารมณ์ (); }

int lightfollow() {

มูลค่าสุทธิ = 14; ผลลัพธ์ int = 0; ลอยไปทางซ้าย = 0; ลอยขวา = 0; ตัวอย่าง int = 1; // อ่าน LDR สำหรับ (int j = 0; j<samples; j++){

ซ้าย = ซ้าย + analogRead (LLDR); ขวา = ขวา + (analogRead(RLDR)*calib);

}

//คำนวณผลลัพธ์ (แสงมาจากทิศทางใด)

if((ซ้าย/ตัวอย่าง) > ((ขวา/ตัวอย่าง)+treshold)) {ผลลัพธ์ = 2;}

อื่น if((ซ้าย/ตัวอย่าง) < ((ขวา/ตัวอย่าง)-treshold)) {ผลลัพธ์ = 1;}

อย่างอื่น {ผลลัพธ์ = 0;}

ส่งคืนผลลัพธ์; } โมฆะไปข้างหน้า () {// ส่งต่อ analogWrite (LMOTOR, 230); analogWrite (RMOTOR, 230); PIXEL.setPixelColor(0, PIXEL. Color(0, 0, 255)); PIXEL.setPixelColor(2, PIXEL. Color(0, 0, 255)); PIXEL.show(); }

เป็นโมฆะซ้าย () {

//ซ้าย 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(); }

ถือเป็นโมฆะขวา () {

//ขวา analogWrite (LMOTOR, 255); analogWrite (RMOTOR, 150); PIXEL.setPixelColor(0, PIXEL. Color(0, 100, 0)); PIXEL.setPixelColor(2, PIXEL. Color(0, 0, 255)); PIXEL.show(); }

//นี่สำหรับการทดลองเพิ่มเติม พยายามทำให้คนนี้มีบุคลิกเล็กน้อย:-) ฉันกำลังทดสอบสิ่งที่สามารถทำได้ แต่ยังไม่มีความคิดที่ดี

โมฆะอารมณ์ () { int emotimer = 2500; ระยะเวลา int = สุ่ม (250, 750); ถ้า (มิลลิส () - oldmillis > emotimer) { oldmillis = millis(); อีโม = สุ่ม (1, 4); } if (มิลลิส() - oldmillis > ระยะเวลา) { emostate = !emostate; } ถ้า (emostate == จริง) { สวิตช์ (emo) { กรณีที่ 1: PIXEL.setPixelColor (1, PIXEL. Color ((255), (255), (255))); PIXEL.show(); หยุดพัก; กรณีที่ 2: PIXEL.setPixelColor(1, PIXEL. Color((255), (0), (0))); PIXEL.show(); หยุดพัก; กรณีที่ 3: PIXEL.setPixelColor(1, PIXEL. Color((0), (255), (0))); PIXEL.show(); หยุดพัก; ค่าเริ่มต้น: PIXEL.setPixelColor(1, PIXEL. Color(สุ่ม(0, 255), สุ่ม(0, 255), สุ่ม(0, 255))); PIXEL.show(); หยุดพัก; } } อื่น ๆ { PIXEL.setPixelColor(1, PIXEL. Color(25, 0, 0)); PIXEL.show(); } }

แนะนำ: