สารบัญ:
- ขั้นตอนที่ 1: คำอธิบาย
- ขั้นตอนที่ 2: ตัวจับเวลา AVR – โหมด PWM
- ขั้นตอนที่ 3: การวัดความเข้มของแสง - ADC & LDR
- ขั้นตอนที่ 4: คอนโทรลเลอร์ DC Motor & Dual H-Bridge Motor Driver Module-L298N
- ขั้นตอนที่ 5: การเขียนโค้ดสำหรับโปรแกรมใน C. การอัปโหลดไฟล์ HEX ลงในหน่วยความจำแฟลชไมโครคอนโทรลเลอร์
- ขั้นตอนที่ 6: วงจรไฟฟ้า
วีดีโอ: ไมโครคอนโทรลเลอร์ AVR การปรับความกว้างพัลส์ ตัวควบคุม DC Motor และ LED Light Intensity.: 6 Steps
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
สวัสดีทุกคน!
การปรับความกว้างพัลส์ (PWM) เป็นเทคนิคทั่วไปในการสื่อสารโทรคมนาคมและการควบคุมพลังงาน มักใช้เพื่อควบคุมกำลังไฟฟ้าที่จ่ายให้กับอุปกรณ์ไฟฟ้า ไม่ว่าจะเป็นมอเตอร์ ไฟ LED ลำโพง ฯลฯ โดยพื้นฐานแล้วจะเป็นเทคนิคการมอดูเลต ซึ่งความกว้างของพัลส์พาหะจะแปรผันตามสัญญาณข้อความแอนะล็อก.
เราสร้างวงจรไฟฟ้าอย่างง่ายเพื่อควบคุมความเร็วในการหมุนของมอเตอร์กระแสตรงโดยขึ้นกับความเข้มของแสง เราจะใช้คุณสมบัติตัวต้านทานแบบพึ่งพาแสงและไมโครคอนโทรลเลอร์ AVR เช่น การแปลงแอนะล็อกเป็นดิจิทัลเพื่อวัดความเข้มของแสง นอกจากนี้ เราจะใช้โมดูลไดรเวอร์มอเตอร์สะพานคู่ H-L298N โดยทั่วไปจะใช้ในการควบคุมความเร็วและทิศทางของมอเตอร์ แต่สามารถใช้สำหรับโครงการอื่นๆ เช่น การเพิ่มความสว่างของโครงการแสงสว่างบางโครงการ นอกจากนี้ยังเพิ่มปุ่มในวงจรของเราเพื่อสลับทิศทางการหมุนของเครื่องยนต์
ขั้นตอนที่ 1: คำอธิบาย
ร่างกายทุกคนในโลกนี้มีแรงเฉื่อยอยู่บ้าง มอเตอร์หมุนทุกครั้งที่เปิดเครื่อง ทันทีที่ปิดเครื่อง เครื่องจะหยุดทำงาน แต่มันไม่หยุดทันที มันต้องใช้เวลา แต่ก่อนที่มันจะดับสนิท มันก็เปิดขึ้นมาใหม่อีกครั้ง! มันจึงเริ่มเคลื่อนไหว แต่ถึงตอนนี้ก็ยังต้องใช้เวลาสักระยะกว่าจะถึงความเร็วเต็มที่ แต่ก่อนที่มันจะเกิดขึ้น มันจะปิดอยู่ เป็นต้น ดังนั้น ผลกระทบโดยรวมของการกระทำนี้คือมอเตอร์หมุนอย่างต่อเนื่อง แต่ด้วยความเร็วที่ต่ำกว่า
การปรับความกว้างของพัลส์ (PWM) เป็นเทคนิคการสลับกำลังไฟฟ้าล่าสุดสำหรับการจัดหาพลังงานไฟฟ้าระดับกลางระหว่างระดับเปิดเต็มที่และปิดเต็มที่ โดยปกติพัลส์ดิจิทัลจะมีช่วงเวลาเปิดและปิดเหมือนกัน แต่ในบางสถานการณ์ เราจำเป็นต้องมีพัลส์ดิจิทัลเพื่อให้ตรงต่อเวลา/นอกเวลามากขึ้น/น้อยลง ในเทคนิค PWM เราสร้างพัลส์ดิจิทัลที่มีสถานะเปิดและปิดไม่เท่ากันเพื่อให้ได้ค่าแรงดันกลางที่ต้องการ
รอบการทำงานถูกกำหนดโดยเปอร์เซ็นต์ของระยะเวลาไฟฟ้าแรงสูงในพัลส์ดิจิตอลที่สมบูรณ์ สามารถคำนวณได้โดย:
% ของรอบการทำงาน = T บน /T (ช่วงเวลา) x 100
ให้เราใช้คำสั่งปัญหา เราจำเป็นต้องสร้างสัญญาณ PWM 50 Hz ที่มีรอบการทำงาน 45%
ความถี่ = 50 Hz
ช่วงเวลา T = T(เปิด) + T(ปิด) = 1/50 = 0.02 วินาที = 20 ms
รอบการทำงาน = 45%
ดังนั้น เมื่อแก้ตามสมการข้างต้น จะได้
T(เปิด) = 9 ms
T(ปิด) = 11 ms
ขั้นตอนที่ 2: ตัวจับเวลา AVR – โหมด PWM
สำหรับการสร้าง PWM นั้น AVR มีฮาร์ดแวร์แยกต่างหาก! เมื่อใช้สิ่งนี้ CPU จะสั่งให้ฮาร์ดแวร์สร้าง PWM ของรอบการทำงานเฉพาะ ATmega328 มีเอาต์พุต PWM 6 ตัว 2 ตัวอยู่บนตัวจับเวลา/ตัวนับ0 (8 บิต) 2 ตัวอยู่บนตัวจับเวลา/ตัวนับ 1 (16 บิต) และ 2 ตัวอยู่บนตัวจับเวลา/ตัวนับ 2 (8 บิต) Timer/Counter0 เป็นอุปกรณ์ PWM ที่ง่ายที่สุดบน ATmega328 Timer/Counter0 สามารถทำงานได้ 3 โหมด:
- PWM เร็ว
- เฟสและความถี่แก้ไข PWM
- เฟสแก้ไข PWM
แต่ละโหมดเหล่านี้สามารถกลับด้านหรือไม่กลับด้าน
เริ่มต้น Timer0 ในโหมด PWM:
TCCR0A |=(1 << WGM00)|(1 << WGM01) - ตั้งค่า WGM: Fast PWM
TCCR0A |= (1 << COM0A1)|(1 << COM0B1) - ตั้งค่าเปรียบเทียบโหมดเอาต์พุต A, B
TCCR0B |= (1 << CS02) - ตั้งเวลาด้วย prescaler = 256
ขั้นตอนที่ 3: การวัดความเข้มของแสง - ADC & LDR
ตัวต้านทานแบบพึ่งพาแสง (LDR) เป็นทรานสดิวเซอร์ที่เปลี่ยนความต้านทานเมื่อแสงตกบนพื้นผิวเปลี่ยนแปลง
LDR ทำจากวัสดุเซมิคอนดักเตอร์เพื่อให้มีคุณสมบัติไวต่อแสง LDRs หรือ PHOTO RESISTORS เหล่านี้ทำงานบนหลักการของ "Photo conductivity" สิ่งที่หลักการนี้กล่าวคือเมื่อใดก็ตามที่แสงตกบนพื้นผิวของ LDR (ในกรณีนี้) ค่าการนำไฟฟ้าขององค์ประกอบจะเพิ่มขึ้น หรือกล่าวอีกนัยหนึ่งคือ ความต้านทานของ LDR จะลดลงเมื่อแสงตกบนพื้นผิวของ LDR คุณสมบัตินี้ทำให้ความต้านทานลดลงสำหรับ LDR เนื่องจากเป็นคุณสมบัติของวัสดุเซมิคอนดักเตอร์ที่ใช้กับพื้นผิว LDR มักถูกใช้เพื่อตรวจจับว่ามีแสงอยู่หรือเพื่อวัดความเข้มของแสง
สำหรับการถ่ายโอนข้อมูลภายนอกแบบต่อเนื่อง (ข้อมูลแอนะล็อก) เข้าสู่ระบบดิจิทัล/คอมพิวเตอร์ เราต้องแปลงข้อมูลเหล่านั้นเป็นค่าจำนวนเต็ม (ดิจิทัล) การแปลงประเภทนี้ดำเนินการโดย Analog to Digital Converter (ADC) กระบวนการแปลงค่าแอนะล็อกเป็นค่าดิจิทัลเรียกว่าการแปลงแอนะล็อกเป็นดิจิทัล กล่าวโดยย่อ สัญญาณอนาล็อกเป็นสัญญาณในโลกแห่งความเป็นจริงรอบตัวเรา เช่น เสียงและแสง
สัญญาณดิจิตอลเทียบเท่าอนาล็อกในรูปแบบดิจิทัลหรือตัวเลข ซึ่งระบบดิจิทัลอย่างไมโครคอนโทรลเลอร์เข้าใจดี ADC เป็นหนึ่งในฮาร์ดแวร์ดังกล่าวซึ่งวัดสัญญาณแอนะล็อกและสร้างสัญญาณดิจิทัลที่เทียบเท่ากับสัญญาณเดียวกัน ไมโครคอนโทรลเลอร์ AVR มีสิ่งอำนวยความสะดวก ADC ในตัวเพื่อแปลงแรงดันอนาล็อกเป็นจำนวนเต็ม AVR แปลงเป็นจำนวน 10 บิตของช่วง 0 ถึง 1023
เราใช้การแปลงระดับแรงดันแอนะล็อกเป็นดิจิตอลจากวงจรแบ่งด้วย LDR เพื่อวัดความเข้มของแสง
เริ่มต้น ADC:
TADCSRA |= (1<<ADEN) - เปิดใช้งาน ADC
ADCSRA |= (1<<ADPS2)| (1<<ADPS1)| (1ADPS0) - ตั้งค่า ADC prescaler = 128
ADMUX = (1 << REFS0) - ตั้งค่าแรงดันอ้างอิง = AVCC; - ตั้งค่า Input Channel = ADC0
ดูวิดีโอพร้อมคำอธิบายโดยละเอียดของไมโครคอนโทรลเลอร์ ADC AVR: ไมโครคอนโทรลเลอร์ AVR การวัดความเข้มของแสง ADC & LDR
ขั้นตอนที่ 4: คอนโทรลเลอร์ DC Motor & Dual H-Bridge Motor Driver Module-L298N
เราใช้ตัวขับมอเตอร์กระแสตรงเนื่องจากไมโครคอนโทรลเลอร์ไม่สามารถส่งกระแสไฟโดยทั่วไปได้ไม่เกิน 100 มิลลิแอมป์ ไมโครคอนโทรลเลอร์นั้นฉลาด แต่ไม่แข็งแรง โมดูลนี้จะเพิ่มกล้ามเนื้อบางส่วนให้กับไมโครคอนโทรลเลอร์เพื่อขับเคลื่อนมอเตอร์กระแสตรงกำลังสูง สามารถควบคุมมอเตอร์กระแสตรง 2 ตัวพร้อมกันได้ถึง 2 แอมป์ต่อมอเตอร์แต่ละตัวหรือหนึ่งตัว เราสามารถควบคุมความเร็วได้โดยใช้ PWM และทิศทางการหมุนของมอเตอร์ด้วย นอกจากนี้ยังใช้สำหรับขับความสว่างของเทป LED
คำอธิบายพิน:
พอร์ต OUT1 และ OUT2 ซึ่งใช้สำหรับต่อมอเตอร์กระแสตรง OUT3 และ OUT4 สำหรับต่อเทป LED
ENA และ ENB เป็นพินที่เปิดใช้งาน: โดยการเชื่อมต่อ ENA กับ high (+5V) จะทำให้พอร์ต OUT1 และ OUT2 ใช้งานได้
หากคุณเชื่อมต่อพิน ENA ไปที่ระดับต่ำ (GND) จะเป็นการปิดใช้งาน OUT1 และ OUT2 ในทำนองเดียวกัน สำหรับ ENB และ OUT3 และ OUT4
IN1 ถึง IN4 คือพินอินพุตที่จะเชื่อมต่อกับ AVR
ถ้า IN1-high(+5V), IN2-low(GND) OUT1 จะสูงและ OUT2 ต่ำ ดังนั้นเราจึงสามารถขับเคลื่อนมอเตอร์ได้
หาก IN3-high(+5V), IN4-low(GND) OUT4 จะสูงและ OUT3 จะต่ำ ดังนั้นไฟ LED เทปจึงติดสว่าง
หากคุณต้องการย้อนกลับทิศทางการหมุนของมอเตอร์ เพียงแค่ย้อนกลับขั้ว IN1 และ IN2 เช่นเดียวกับ IN3 และ IN4
ด้วยการใช้สัญญาณ PWM กับ ENA และ ENB คุณสามารถควบคุมความเร็วของมอเตอร์บนพอร์ตเอาต์พุตที่แตกต่างกันสองพอร์ต
บอร์ดสามารถรับได้ตั้งแต่ 7V ถึง 12V ในนาม
จัมเปอร์: มีหมุดจัมเปอร์สามตัว จัมเปอร์ 1: หากคุณต้องการมอเตอร์มากกว่า 12V คุณต้องถอดจัมเปอร์ 1 และใช้แรงดันไฟฟ้าที่ต้องการ (สูงสุด 35V) ที่ขั้ว 12V นำแหล่งจ่ายไฟและอินพุต 5V อีกอันมาที่ขั้ว 5V ใช่ คุณต้องป้อน 5V หากคุณต้องการใช้มากกว่า 12V (เมื่อถอด Jumper 1 ออก)
อินพุต 5V มีไว้เพื่อการทำงานที่เหมาะสมของ IC เนื่องจากการถอดจัมเปอร์ออกจะทำให้ตัวควบคุม 5V ในตัวไม่ทำงานและป้องกันจากแรงดันไฟฟ้าขาเข้าที่สูงขึ้นจากขั้วต่อ 12V
เทอร์มินัล 5V ทำหน้าที่เป็นเอาต์พุตหากแหล่งจ่ายไฟของคุณอยู่ระหว่าง 7V ถึง 12V และทำหน้าที่เป็นอินพุตหากคุณใช้มากกว่า 12V และจัมเปอร์จะถูกลบออก
Jumper 2 และ Jumper 3: หากคุณถอดจัมเปอร์สองตัวนี้ออก คุณต้องป้อนสัญญาณเปิดและปิดจากไมโครคอนโทรลเลอร์ ผู้ใช้ส่วนใหญ่ต้องการถอดจัมเปอร์สองตัวนี้ออกและใช้สัญญาณจากไมโครคอนโทรลเลอร์
หากคุณเก็บจัมเปอร์ไว้สองตัว OUT1 ถึง OUT4 จะถูกเปิดใช้งานเสมอ จำจัมเปอร์ ENA สำหรับ OUT1 และ OUT2 จัมเปอร์ ENB สำหรับ OUT3 และ OUT4
ขั้นตอนที่ 5: การเขียนโค้ดสำหรับโปรแกรมใน C. การอัปโหลดไฟล์ HEX ลงในหน่วยความจำแฟลชไมโครคอนโทรลเลอร์
การเขียนและสร้างแอปพลิเคชันไมโครคอนโทรลเลอร์ AVR ในรหัส C โดยใช้แพลตฟอร์มการพัฒนาแบบบูรณาการ - Atmel Studio
#ifndef F_CPU#define F_CPU 16000000UL // บอกความถี่คริสตัลคอนโทรลเลอร์ (16 MHz AVR ATMega328P) #endif
#include //header เพื่อเปิดใช้งานการควบคุมการไหลของข้อมูลบนพิน กำหนดพิน พอร์ต ฯลฯ #include //header เพื่อเปิดใช้งานฟังก์ชันดีเลย์ในโปรแกรม
#define BUTTON1 2 // สวิตช์ปุ่มเชื่อมต่อกับพอร์ต B ขา 2 #define DEBOUNCE_TIME 25 // เวลาที่รอในขณะที่ปุ่ม "ยกเลิกการตีกลับ" #define LOCK_INPUT_TIME 300 // เวลารอหลังจากกดปุ่ม
// Timer0, PWM Initialization void timer0_init () { // ตั้งค่าตัวจับเวลา OC0A, OC0B pin ในโหมดสลับและโหมด CTC TCCR0A |= (1 << COM0A1) | (1 << COM0B1) | (1 << WGM00) | (1 << WGM01); // ตั้งเวลาด้วย prescaler = 256 TCCR0B |= (1 << CS02); // เริ่มต้นตัวนับ TCNT0 = 0; // เริ่มต้นเปรียบเทียบค่า OCR0A = 0; }
// การเริ่มต้น ADC เป็นโมฆะ ADC_init () { // เปิดใช้งาน ADC, ความถี่สุ่มตัวอย่าง = osc_freq/128 ตั้งค่าพรีสเกลเลอร์เป็นค่าสูงสุด, 128 ADCSRA |= (1<<ADEN) | (1<<ADPS2)| (1<< ADPS1)| (1<<ADPS0);
ADMUX = (1<<REFS0); // เลือกแรงดันอ้างอิง (AVCC)
// สถานะสวิตช์ปุ่ม unsigned ถ่าน button_state () {
/* ปุ่มถูกกดเมื่อ BUTTON1 บิตชัดเจน */
ถ้า (!(PINB & (1<
{
_delay_ms(DEBOUNCE_TIME);
ถ้า (!(PINB & (1<
}
กลับ 0;
}
// การเริ่มต้นพอร์ตเป็นโมฆะ port_init () { DDRB = 0b00011011; //PB0-IN1, PB1-IN2, PB3-IN3, PB4-IN4, PB2 - สวิตช์ปุ่ม PORTB=0b00010110;
DDRD =0b01100000; //PD5-ENB (OC0B), PD6-ENA (OC0A) PORTD=0b00000000;
DDRC =0b00000000; // PC0-ADC PORTC=0b00000000; // ตั้งค่าพินทั้งหมดของ PORTC ให้ต่ำ ซึ่งจะปิด }
// ฟังก์ชันนี้อ่านค่าของการแปลงแอนะล็อกเป็นดิจิทัล uint16_t get_LightLevel() { _delay_ms(10); // รอสักครู่เพื่อให้ช่องได้รับเลือก ADCSRA |= (1<<ADSC); // เริ่มการแปลง ADC โดยการตั้งค่าบิต ADSC เขียน 1 ถึง ADSC
ในขณะที่ (ADCSRA & (1<<ADSC)); // รอให้การแปลงเสร็จสิ้น
// ADSC กลายเป็น 0 อีกครั้งจนกว่าจะถึงตอนนั้น ให้รันลูปอย่างต่อเนื่อง _delay_ms(10); ผลตอบแทน (ADC); // ส่งคืนผลลัพธ์ 10 บิต
}
// ฟังก์ชันนี้จะทำการแมปตัวเลขใหม่จากช่วงหนึ่ง (0-1023) ไปยังอีกช่วงหนึ่ง (0-100) แผนที่ uint32_t (uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max) { กลับ (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }
int หลัก (เป็นโมฆะ)
{ uint16_t i1=0;
port_init();
timer0_init(); ADC_init(); // การเริ่มต้น ADC
ในขณะที่ (1)
{ i1=map(get_LightLevel(), 0, 1023, 0, 100);
OCR0A=i1; // ตั้งค่าเอาต์พุตเปรียบเทียบช่องรีจิสเตอร์ A OCR0B=100-i1; // ตั้งค่าเอาต์พุตเปรียบเทียบช่องรีจิสเตอร์ B (กลับด้าน)
if (button_state()) // หากกดปุ่ม ให้สลับสถานะของ LED และหน่วงเวลา 300ms (#define LOCK_INPUT_TIME) { PORTB ^= (1<<0); // สลับสถานะปัจจุบันของพิน IN1 PORTB ^= (1<<1); // สลับสถานะปัจจุบันของพิน IN2 กลับทิศทางการหมุนของมอเตอร์
PORTB ^= (1<<3); // สลับสถานะปัจจุบันของพิน IN3 PORTB ^= (1<<4); // สลับสถานะปัจจุบันของพิน IN4 LED Tape ถูกปิด/เปิด _delay_ms(LOCK_INPUT_TIME); } }; กลับ (0); }
การเขียนโปรแกรมเสร็จสมบูรณ์ ถัดไป สร้างและรวบรวมรหัสโครงการเป็นไฟล์ฐานสิบหก
การอัปโหลดไฟล์ HEX ลงในหน่วยความจำแฟลชไมโครคอนโทรลเลอร์:พิมพ์คำสั่งในหน้าต่างพรอมต์ DOS:
avrdude –c [ชื่อโปรแกรมเมอร์] –p m328p –u –U flash:w:[ชื่อไฟล์ hex ของคุณ]
ในกรณีของฉันคือ:
avrdude –c ISPProgv1 –p m328p –u –U แฟลช:w:PWM.hex
คำสั่งนี้เขียนไฟล์ฐานสิบหกลงในหน่วยความจำของไมโครคอนโทรลเลอร์ ดูวิดีโอพร้อมคำอธิบายโดยละเอียดของการเบิร์นหน่วยความจำแฟลชไมโครคอนโทรลเลอร์: การเบิร์นหน่วยความจำแฟลชไมโครคอนโทรลเลอร์…
ตกลง! ตอนนี้ไมโครคอนโทรลเลอร์ทำงานตามคำแนะนำของโปรแกรมของเรา มาลองดูกัน!
ขั้นตอนที่ 6: วงจรไฟฟ้า
เชื่อมต่อส่วนประกอบตามแผนผังไดอะแกรม
แนะนำ:
วิธีทำหุ่นยนต์ Line Follower โดยไม่ต้องใช้ Arduino (ไมโครคอนโทรลเลอร์): 5 ขั้นตอน
วิธีสร้างหุ่นยนต์ Line Follower โดยไม่ใช้ Arduino (ไมโครคอนโทรลเลอร์): ในคำแนะนำนี้ ฉันจะสอนวิธีสร้างหุ่นยนต์ตามสายโดยไม่ต้องใช้ Arduino ฉันจะใช้ขั้นตอนง่าย ๆ ในการอธิบาย หุ่นยนต์ตัวนี้จะใช้ IR Proximity Sensor เพื่อ ทำตามบรรทัด คุณไม่จำเป็นต้องมีประสบการณ์การเขียนโปรแกรมใดๆ เพื่อ
ไมโครคอนโทรลเลอร์ AVR เซ็นเซอร์ระยะอัลตราโซนิก HC-SR04 บน LCD NOKIA 5110: 4 ขั้นตอน
ไมโครคอนโทรลเลอร์ AVR เซ็นเซอร์ระยะอัลตราโซนิก HC-SR04 บน LCD NOKIA 5110: สวัสดีทุกคน ในส่วนนี้ฉันสร้างอุปกรณ์อิเล็กทรอนิกส์อย่างง่ายเพื่อเซ็นเซอร์ระยะทาง และพารามิเตอร์เหล่านี้จะแสดงบน LCD NOKIA 5110 พารามิเตอร์จะแสดงเป็นไดอะแกรมและตัวเลข อุปกรณ์นี้ใช้ไมโครคอนโทรลเลอร์ AVR ATMEG
ไมโครคอนโทรลเลอร์ AVR สลับ LED โดยใช้สวิตช์ปุ่มกด กดปุ่ม Deboucing.: 4 ขั้นตอน
ไมโครคอนโทรลเลอร์ AVR สลับ LED โดยใช้สวิตช์ปุ่มกด Push Button Debouncing.: ในส่วนนี้ เราจะเรียนรู้วิธีสร้างรหัสโปรแกรม C สำหรับ ATMega328PU เพื่อสลับสถานะของ LED สามดวงตามอินพุตจากสวิตช์ปุ่ม นอกจากนี้เรายังได้สำรวจวิธีแก้ปัญหาคือ 'Switch Bounce' ตามปกติแล้ว เราเ
ไมโครคอนโทรลเลอร์ AVR ไฟ LED กะพริบโดยใช้ตัวจับเวลา ตัวจับเวลาขัดจังหวะ โหมดจับเวลา CTC: 6 ขั้นตอน
ไมโครคอนโทรลเลอร์ AVR ไฟ LED กะพริบโดยใช้ตัวจับเวลา ตัวจับเวลาขัดจังหวะ Timer CTC Mode: สวัสดีทุกคน! ตัวจับเวลาเป็นแนวคิดที่สำคัญในด้านอิเล็กทรอนิกส์ ส่วนประกอบอิเล็กทรอนิกส์ทุกชิ้นทำงานบนฐานเวลา ฐานเวลานี้ช่วยให้งานทั้งหมดตรงกัน ไมโครคอนโทรลเลอร์ทั้งหมดทำงานที่ความถี่สัญญาณนาฬิกาที่กำหนดไว้ล่วงหน้า
ไมโครคอนโทรลเลอร์ AVR จิ๋วทำงานบนแบตเตอรี่ผลไม้: 9 ขั้นตอน (พร้อมรูปภาพ)
ไมโครคอนโทรลเลอร์ AVR จิ๋วทำงานโดยใช้แบตเตอรี่ผลไม้: ผักและผลไม้บางชนิดที่เรากินเข้าไปสามารถนำมาใช้เป็นไฟฟ้าได้ อิเล็กโทรไลต์ในผักและผลไม้หลายชนิด ร่วมกับอิเล็กโทรดที่ทำจากโลหะต่างๆ สามารถใช้ทำเซลล์ปฐมภูมิได้ หนึ่งในผักที่หาได้ง่ายที่สุดท