Robotikā un elektronikā ļoti bieži tiek izmantoti dažādi sensori, piemēram, lai noteiktu attālumu līdz otram robotam, ja runa ir par robotikas sacensībām, protams, arī citiem pielietojumiem, tāpēc šoreiz autors izveidojis elektrisko principiālo shēmu, kuras darbības princips ir balstīts uz ATMEGA328P sērijas mikrokontrollera un GP2D12 sērijas attāluma mērīšanas sensora, kura darbības princips ir balstīts uz infrasarkanā stara izstarošanas un atstarotā stara uztveršanas.
GP2D12 sērijas attāluma mērīšanas sensoru paredzēts izmantot, lai noteiktu attālumu līdz objektam robežās no 10 līdz 80 cm. Shēmas elektrobarošanai paredzēts izmantot +5 V.
1.1.att. Attāluma mērīšanas elektriskā principiālā shēma
Lai varētu veikt sensora datu apstrādi, lai informētu lietotāju, tiek izmantots ATMEGA328P sērijas mikrokontrolleris (U1).
GP2D12 sērijas attāluma mērīšanas sensora izejas signāls ir analogā formā, kuru tālāk apstrādā mikrokontrolleris, izmantojot ACP.
Lai lietotāju informētu par objektu, kurš atrodas pārāk tuvu sensoram, tiek izmantota D1 gaismas diode un pjezoelektriskais skaļrunis, kuru ieslēgšanai un izslēgšanai paredzēts Q1 bipolārais tranzistors.
R2 rezistors paredzēts bāzes strāvas ierobežošanai, bet R4 rezistors ierobežo strāvu caur gaismas diodi.
Tā kā shēmas elektrobarošanai paredzēts izmantot +5 V, tad elektriskajā principiālajā shēmā tiek izmantots LM7805 sērijas lineārais sprieguma stabilizators.
Ieejas un izejas sprieguma pulsāciju gludināšanai, ja netiek izmantota baterija, paredzēti C2 un C3 elektrolītiskie kondensatori.
C1 un C4 keramiskie kondensatori paredzēti parazītiskās induktivitātes ietekmes mazināšanai.
Šķidro kristālu displejs (LCD) paredzēts izmērītā attāluma līdz objektam attēlošanai.
RV1 potenciometrs paredzēts displeja kontrasta pieskaņošanai.
int main(void){
DDRB =
0xF0;
DDRC =
0x20;
DDRD =
0xEF;
Init_ADC();
InitLCD(0);
float
Distance=0.0;
char
value[10];
LCDClear();
while(1){
_delay_ms(5);
for(int
i=0; i<100; i++){
Distance
= Distance + 5000/(Read_ADC(0) - 20);
}
Distance
= Distance/100.0;
float_to_string(Distance,value,
0);
LCDClear();
LCDWriteStringXY(0,0,"Attalums
= ");
LCDWriteStringXY(11,0,value);
LCDWriteStringXY(14,0,"cm");
if(Distance<=30.0){
Alarm_ON();
}
else{
Alarm_OFF();
_delay_ms(100);
}
}
return
0;
}