Diaľkové ovládanie zosilňovača: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
Bez shrnutí editace |
||
Riadok 156: | Riadok 156: | ||
Celé zariadenie sa ovláda štyrmi tlačidlami ovládača tlačidlá + a - ovládajú pohyb servomotorčeka a tlačidlá CH a EQ ovládajú solenoidy stláčajúce tlačidlá zosilňovača. Solenoidy sú v ukážke reprezentované LED diódami. | Celé zariadenie sa ovláda štyrmi tlačidlami ovládača tlačidlá + a - ovládajú pohyb servomotorčeka a tlačidlá CH a EQ ovládajú solenoidy stláčajúce tlačidlá zosilňovača. Solenoidy sú v ukážke reprezentované LED diódami. | ||
[[Súbor: | [[Súbor:ZapojenieIROvladanie.jpg|200px|thumb|center|Zapojenie zariadenia]] | ||
'''Video:''' | '''Video:''' |
Verzia z 12:29, 15. máj 2025
Záverečný projekt predmetu MIPS / LS2025 - Dávid Bungyi
Zadanie
Zapojiť a naprogramovať IR diaľkové ovládanie s Atmega328P pre ovládanie tlačidiel vypínania a Loudness a potenciometra hlasitosti zosilňovača.

Literatúra:
Analýza a opis riešenia
Správu odvysielanú IR diaľkovým ovládačom bolo treba nejakým zariadením prijať, spracovať v mikropočítači a na základe prijatej správy aktivovať solenoid, ktorý zatlačí tlačidlo na zosilňovači alebo pootočiť servomotorček ovládajúci potenciometer hlasitosti.
• Vysielanie správ
Správy odosielame pomocou IR ďiaľkového ovládania ktoré sa bežne používa s Arduinom.

• Prijímanie správ
Signál odvysielaný ovládačom prijímame IR prijímačom, ktorý modulovaný 38KHz signál demoduluje a spracuje na logické jednotky a nuly.

• Spracovanie prijatého signálu
Prijatý signál spracováva Arduino nižšie uvedeným programom. Po spracovaní signálu Arduino spína na pol sekundy digitálne piny 6 a 7 alebo pootočí servomotorček pomocou zmeny pwm signálu na pine 9.
Schéma zapojenia

Algoritmus a program
Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... Výpis kódu je nižšie...
#define F_CPU 16000000UL
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include <math.h>
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define IR1 PB0 // IR snimac
#define ZAP PD7 // Vypinac
#define LOUD PD6 // Loudness
#define VOL PB1 // Volume
void delay(int delay) // vlastna funkcia, lebo inak je max 16ms
{
for (int i=1; i<=delay; i++)
_delay_ms(1);
}
int main(void)
{
DDRB &= ~(1<<IR1); // PB0 je vstup
DDRD |= (1<<ZAP); // PD7 je vystup
DDRD |= (1<<LOUD); // PD6 je vystup
DDRB |= (1<<VOL); // PD5 je vystup
PORTB |= (1<<IR1); // zapnuty pull-up
int counter,bit,count,poc=2000;
unsigned int tlac;
while(1)
{
TCNT1 = 0x0000; // initialize (CLEAR) counter
ICR1 = 0; // set TOP for counting
OCR1A = 0; // Set Initial Pulse width
TCCR1A = 0b10000000;
TCCR1B = 0b00000010;
if (bit_is_clear(PINB, IR1))
{
TCNT1 = 0xDE67;
while( ((TIFR1 & (1<<TOV1)) != 0x01 ) && (bit_is_clear(PINB, IR1)))
{
}
while(bit_is_set(PINB, IR1))
{
TCNT1 = 0xDE67;
}
if(((TIFR1 & (1<<TOV1)) == 0x01 ))
{
delay(2);
while(bit_is_set(PINB, IR1))
{
}
bit=15;
count=0;
for(int i=32;i>=0;i--)
{
while(bit_is_clear(PINB, IR1))
{
}
TCNT1 = 0x0000;
while(bit_is_set(PINB, IR1))
{
}
counter = TCNT1;
if((i<=31)&&(i>=24) || (i<=15)&&(i>=8))
{
if ((counter>=700)&&(counter<=1500))
count = count + pow(2,bit);
bit--;
}
}
tlac = count+2;
if (tlac == 65437) //Vypinanie
{
set_bit(PORTD,ZAP);
delay(500);
clear_bit(PORTD,ZAP);
}
if (tlac == 65391) //Loudness
{
set_bit(PORTD,LOUD);
delay(500);
clear_bit(PORTD,LOUD);
}
TCNT1 = 0; // Set Initial Timer value
ICR1 = 4000; // set TOP for counting
TCCR1A = 0b10000010;
TCCR1B = 0b00011010;
if (tlac == 65367 && poc <3900) //Hlasitost
poc = poc+100;
if (tlac == 65311 && poc >2000)
poc = poc-100;
OCR1A = poc;
delay(100);
}
}
}
}
Zdrojový kód: IR_Ovladanie_Zosilnovaca_David_Bungyi.zip
Overenie
Celé zariadenie sa ovláda štyrmi tlačidlami ovládača tlačidlá + a - ovládajú pohyb servomotorčeka a tlačidlá CH a EQ ovládajú solenoidy stláčajúce tlačidlá zosilňovača. Solenoidy sú v ukážke reprezentované LED diódami.

Video:
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.