Жұмыс істеу схемасы төмендегі суретте көрсетілген
Схема фонарь корпусына орнатылады.
2.2 Бұл диаграммада Arduino Nano тақтасы барлық процестерді басқару үшін пайдаланылады. Бүкіл тізбек қайта зарядталатын батареядан және + 5В тұрақты кернеуді қамтамасыз ететін 7805 кернеу реттегішінен қуат алады. Ультрадыбыстық сенсор 5 В кернеуінен қуат алады және оның Trigger және Echo түйреуіштері Arduino 2 және 3 түйреуіштеріне қосылған. Фоторезистор және 10 кОм резистор кернеу бөлгішті құрайды, оның шығысынан кернеу Arduino тақтасының аналогтық A1 түйреуішіне қолданылады. Батырма үшін Arduino тақтасының A0 аналогтық пин қолданылады. Батырма фоторезистордың жұмысын басқарады. Сигнал Arduino тақтасының 12 түйреуішіне қосылған.
Фоторезисторды қосу батырмасы
Қуатты қосы батырмасы
Зуммер дыбыссигналыт
шығаратын құрал
Қуаттау порты
пайдалануға Arduino үшін бағдарламаның түсіндірмесі:
Жобаның барлық аппараттық құралдарын жинағаннан кейін Arduino тақтасын бағдарламалауға кірісуге болады. Бағдарламаның толық коды соңында берілген, бірақ мұнда біз оның ең маңызды фрагменттерін талқылаймыз.
Біріншіден, void setup() функциясында Arduino тақтасының кіріс және шығыс түйреуіштерін инициализациялаймыз. Біздің жобада дыбыстық сигнал және триггер түйреуіштері қосылған түйреуіштер шығыс болады, ал жаңғырық түйреуіштері қосылған пин кіріс болады. Біз сондай-ақ жөндеу мақсатында сериялық мониторды инициализациялаймыз.
1
2
3
4
5
6
7
8
|
void setup()
{
Serial.begin(9600);
pinMode(Buzz,OUTPUT);
digitalWrite(Buzz,LOW);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
}
|
Цикл функциясының ішінде біз барлық сенсорлардан деректерді
оқимыз - ультрадыбыстық сенсордан кедергіге дейінгі қашықтықты өлшеу үшін, фоторезистордан жарықтандыруды өлшеу үшін. Бұл деректердің барлығы әрі қарай пайдалану үшін сәйкес айнымалыларда сақталады.
1
2
|
calculate_distance(trigger,echo);
Intens = analogRead(Light);
|
Әрі қарай, көру қабілеті нашар адамның айналасындағы жарық қарқындылығын (жарықтандыруды) тексереміз. Фоторезистордың шығысындағы түймені басқан кезде біз 200-ден аз мән алсақ, айнала қараңғы деп есептейміз және бұл туралы 200 мс ұзақтығы бар арнайы ескерту сигналын жасау үшін дыбыстық сигналды қолданамыз. Егер фоторезистордың шығысындағы мән 800-ден асса, бұл оның айналасы жарық екенін білдіреді - бұл жағдайда біз басқа тонның ескерту сигналын жасаймыз. Бағдарламада бұл сигналдардың шекарасын өз бетінше өзгертуге болады.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//если очень темно
if (Intens<200)
{
Serial.print(Intens); Serial.println("Bright Light");
digitalWrite(Buzz,HIGH);delay(200);digitalWrite(Buzz,LOW);delay(200);digitalWrite(Buzz,HIGH);delay(200);digitalWrite(Buzz,LOW);delay(200);
delay(500);
}
//если очень светло
if (Intens>800)
{
Serial.print(Intens); Serial.println("Low Light");
digitalWrite(Buzz,HIGH);delay(500);digitalWrite(Buzz,LOW);delay(500);digitalWrite(Buzz,HIGH);delay(500);digitalWrite(Buzz,LOW);delay(500);
}
|
Содан кейін, ең соңында біз кез келген кедергіге дейінгі қашықтықты өлшейміз. Егер кедергіге дейінгі қашықтық 70 см-ден асса, онда дабыл берілмейді. Ал егер кедергіге дейінгі қашықтық 50 см-ден аз болса, онда дыбыс сигналы арқылы дабыл беріледі. Кедергіге дейінгі қашықтық жақындаған сайын, дыбыстық сигнал соғұрлым жиі естіледі. Бұл кедергіге дейінгі қашықтыққа пропорционалды дыбыстық сигналдар арасындағы кідірісті өзгерту арқылы қол жеткізіледі. Arduino-дағы delay() функциясы айнымалы мәнді енгізу параметрі ретінде пайдалануға мүмкіндік бермейтіндіктен, өзгеретін кідірістерді ұйымдастыру үшін арнайы циклды қолданамыз:
1
2
3
4
5
6
7
8
9
10
11
|
if (50{
Serial.print(dist); Serial.println("Object Alert");
digitalWrite(Buzz,HIGH);
tone(1000,50);
for (int i=dist; i>0; i--)
delay(10);
digitalWrite(Buzz,LOW);
for (int i=dist; i>0; i--)
delay(10);
}
|
Кедергіге дейінгі қашықтық 300 см-ден асса, онда сигнал берілмейді. Ал егер кедергіге дейінгі қашықтық 80 см-ден аз болса, онда дыбыс сигналы арқылы дабыл беріледі. Кедергіге дейінгі қашықтық неғұрлым жақын болса, соғұрлым басқа дыбыстың дыбыстық сигналы жиі естіледі. 70 см және 80 см арасындағы 10 см қашықтық тыныштық аймағы болады
1
2
3
4
5
6
7
8
9
10
11
|
if (80{
Serial.print(dist); Serial.println("Object Alert");
digitalWrite(Buzz,HIGH);
tone(1500,50);
for (int i=dist; i>0; i--)
delay(10);
digitalWrite(Buzz,LOW);
for (int i=dist; i>0; i--)
delay(10);
}
|
Сәйкес айнымалылардың мәндердін өзгерту арқылы бағдарламаны қажеттіліктеріңізге сәйкес оңай өзгертуге болады.
Достарыңызбен бөлісу: |