рд╢реБрдн рджреЛрдкрд╣рд░
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдмрд░ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
рдирд┐рдХрдЯрддрд╛ рд╕реНрд╡рд┐рдЪред рд╕реНрд╡рд┐рдЪ рдХреЛ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдо рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред
рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЖрдзрд╛рд░
рдХрд╛рд░реНрдбреБрдЗрдиреЛ рдиреИрдиреЛ V.7 рдирд╛рдо рд╕реЗ рдмреЗрдЪрд╛ рдЧрдпрд╛ Arduino рдХрдВрдЯреНрд░реЛрд▓рд░ рдХрд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЦрд░реАрджрд╛ рдЧрдпрд╛ рдмреЗрд╣рддрд░ рдХреНрд▓реЛрди рд╣реИред
рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:D5 рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ Arduino рд▓рдЧрд╛рддрд╛рд░ 976 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдФрд░ 50% рдХреЗ рдПрдХ рдХрд░реНрддрд╡реНрдп рдЪрдХреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ PWM рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП
D5 рд╡рд░реНрддрдорд╛рди рд╕реАрдорд┐рдд рдЕрд╡рд░реЛрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрд╡рд░рдХреНрдд рд╕реАрдорд╛ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕рдВрдХреЗрдд рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрд▓рдИрдбреА рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред Phototransistor Arduino D2 рдЗрдирдкреБрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ
рдЖрдИрдЖрд░ рд╕рд┐рдЧреНрдирд▓ рд╣рд╛рде рд╕реЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред Arduino рдПрдХ IR рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ 20 рд▓рдЧрд╛рддрд╛рд░ рджрд╛рд▓реЛрдВ рд╕реЗ рд╕рдВрдХреЗрдд 976 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рдХрдВрдЯреНрд░реЛрд▓рд░ Arduino рдХреЗ D13 рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдиреАрд▓реЗ рдПрд▓рдИрдбреА (L) рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ SPK рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдзреНрд╡рдирд┐ рдкреНрд░рднрд╛рд╡ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рд╕рдорд╛рди рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрд▓рдИрдбреА (рдПрд▓) рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд▓реЗрдмреИрдХ:рдзреНрд╡рдирд┐ рдкреНрд░рднрд╛рд╡ рдЦреЗрд▓рддреЗ рд╕рдордп, WAV рдкреНрд░рд╛рд░реВрдк рдХреА рдПрдХ рдзреНрд╡рдирд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рдирд╛ рд╕рдВрдкреАрдбрд╝рди рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 16000 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдФрд░ 8 рдмрд┐рдЯреНрд╕ рдХреА рдЧрд╣рд░рд╛рдИ рд╣реЛрддреА рд╣реИред
рдзреНрд╡рдирд┐ рдкреНрд░рдЬрдирди рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░реИрдЦрд┐рдХ рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдирдореВрдиреЛрдВ рдХреЛ 96000 рд╣рд░реНрдЯреНрдЬ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдирдореВрдирд╛ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░реЗрдЦреАрдп рдкреНрд░рдХреНрд╖реЗрдк рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП 4 рдордзреНрдпрд╡рд░реНрддреА рдирдореВрдиреЗ рдореВрд▓ рдирдореВрдиреЛрдВ рдХреЗ рдмреАрдЪ рдбрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд░рд┐рдорд╛рдгреАрдХрд░рдг рд╢реЛрд░ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд┐рд▓реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╕рд░рд▓ рд╣реИ, рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛1-рдХрд╛рд░реНрдбреБрдЗрдиреЛ рдиреИрдиреЛ V.7
рдкреБрд░рд╛рдиреЗ рдЯреАрд╡реА рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд╕реЗ 2-рдЖрдИрдЖрд░ рдПрд▓рдИрдбреА, рд╕рд╛рдЗрдб рд╡рд┐рдХрд┐рд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрд▓рдИрдбреА рдХреЛ рдЧрд░реНрдореА рд╣рдЯрдирд╛ рдореЗрдВ рд╕реАрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
3-рдлреЛрдЯреЛрдЯреНрд░рд╛рдВрд╕рд┐рд╕реНрдЯрд░ LTR-3208E
рдмрдЪреНрдЪреЛрдВ рдХреЗ рдЦрд┐рд▓реМрдиреЗ рд╕реЗ 4-рдЧрддрд┐рд╢реАрд▓ рд╕рд┐рд░
5-рдкреНрд░рддрд┐рд░реЛрдзрдХ 10k рдФрд░ 68ohm

рдмреНрд░реЗрдбрдмреЛрд░реНрдб рдкрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рд░реНрдХрд┐рдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рд╡реАрдбрд┐рдпреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
Arduino рдиреИрдиреЛ рдХреЗ рд▓рд┐рдП рдХреЛрдб:#include <TimerOne.h> #include <avr/delay.h> #include <avr/pgmspace.h> #include "fife.h" #include "hi.h" //////// //////////////////////////////////// #define speakerPin 11 volatile uint16_t sample=0; volatile uint8_t lastSample, FirstSample; volatile byte new_data,future_data,old_data; volatile byte stat=0; unsigned char *wave; unsigned int length; //////// //////////////////////////////////// uint8_t state = 0; volatile uint16_t timerCount, lengthImpuls; volatile uint16_t Counter=0; //////////// /////////////////////////////// void setup() { pinMode(speakerPin, OUTPUT); // digitalWrite(speakerPin, LOW); // pinMode(2, INPUT); // , // digitalWrite(2, HIGH); // pinMode(13, OUTPUT); // pinMode(5, OUTPUT); // TCCR0B = TCCR0B & 0b11111000 | 3; // 976 analogWrite(5,128 ); // attachInterrupt(0, Ir_sens, RISING); // Timer1.initialize(10); // Timer1.attachInterrupt(callback); // } //////////// /////////////////////////////// void callback() { timerCount++; } //////////// /////////////////////////////// void Ir_sens() { lengthImpuls = timerCount; timerCount=0; Counter++; } /////////////////////// OCR2/////////////////// ISR(TIMER2_COMPA_vect) { switch (stat) { case 0:{ old_data = pgm_read_byte(&wave[sample]); OCR2A = old_data; stat=1; ++sample; if (sample == length) stat=4; future_data = pgm_read_byte(&wave[sample]); new_data = (old_data+future_data)/2; } break; case 1: {OCR2A=(old_data+new_data)/2; stat=2; } break; case 2: {OCR2A = new_data; stat=3; } break; case 3: {OCR2A=(new_data+future_data)/2; stat=0; } break; case 4: if(lastSample==0) stat=5; else {--lastSample; OCR2A=lastSample;} break; case 5: stopPlayback(); break; } } //////////// /////////////////////////////// void loop() { if(lengthImpuls>105 || lengthImpuls<99) Counter=0; if(lengthImpuls>99 && lengthImpuls<105 && Counter>20) { state=~state; digitalWrite(13, state); if(state>0) play_wave((unsigned char *)hi, hi_length); if(state==0) play_wave((unsigned char *)fife, fife_length); _delay_ms(200); while(Counter>10) { if(lengthImpuls>105 || lengthImpuls<99) Counter=0; } lengthImpuls=0; } } //////////// /////////////////////////////// void play_wave(unsigned char *wave_data, unsigned int wave_length) { wave=wave_data; length=wave_length; startPlayback(); } void startPlayback() { sample=0; stat=0; ASSR |=(1<<AS2); TCCR2A |= ((1<<COM2B1)|(0<<COM2B0)|(1<<COM2A1)|(0<<COM2A0)|(1<<WGM21)|(0<<WGM20)); TCCR2B = ((0 << CS22) | (0 << CS21) | (1 << CS20) | (0<<WGM22) | (1<<FOC2A) | (1<<FOC2B)); lastSample = pgm_read_byte(&wave[length-1]); TCNT2 = 0; TIMSK2|=(1<<OCIE2A); sei(); for (int i=0; i <50; i++) { new_data=i; stat=2; sample = 0; _delay_us(1); } stat=0; } //////////// /////////////////////////////// void stopPlayback() { TIMSK2&=(0<<OCIE2A); TCCR2B &=(0<<CS10); }
рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦ рдореЗрдВ:
Arduino Nano рдХреЛ Atmega328 рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмрд┐рдЬрд▓реА рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдмреЛрд░реНрдб рдкрд░ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЧрд▓рд┐рдпрд╛рд░реЗ рдХреЗ рд╕реНрд╡рд┐рдЪ рдореЗрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред