- అవసరమైన భాగాలు
- APDS-9960 డిజిటల్ సామీప్యత RGB & సంజ్ఞ సెన్సార్ పరిచయం
- సర్క్యూట్ రేఖాచిత్రం
- సంజ్ఞ మరియు రంగు సెన్సింగ్ కోసం ప్రోగ్రామింగ్ ఆర్డునో
ఈ రోజు చాలా ఫోన్లు ఏదైనా అనువర్తనాన్ని తెరవడానికి లేదా మూసివేయడానికి, సంగీతాన్ని ప్రారంభించడానికి, కాల్లకు హాజరు కావడానికి సంజ్ఞ నియంత్రణ లక్షణంతో వస్తాయి. సమయాన్ని ఆదా చేయడానికి ఇది చాలా సులభ లక్షణం మరియు సంజ్ఞలతో ఏదైనా పరికరాన్ని నియంత్రించడానికి ఇది చాలా బాగుంది. సంజ్ఞ నియంత్రిత రోబోట్ మరియు సంజ్ఞ నియంత్రిత ఎయిర్ మౌస్ నిర్మించడానికి మేము గతంలో యాక్సిలెరోమీటర్ను ఉపయోగించాము. కానీ ఈ రోజు మనం ఒక సంజ్ఞ సెన్సార్ APDS9960 ను Arduino తో ఇంటర్ఫేస్ చేయడం నేర్చుకుంటాము. ఈ సెన్సార్లో రంగులను గుర్తించడానికి RGB సెన్సార్ కూడా ఉంది, ఇది ఈ ట్యుటోరియల్లో కూడా ఉపయోగించబడుతుంది. కాబట్టి మీరు సంజ్ఞ మరియు రంగు గుర్తింపు కోసం ప్రత్యేక సెన్సార్లను ఉపయోగించాల్సిన అవసరం లేదు, అయినప్పటికీ రంగును గుర్తించడానికి ప్రత్యేకమైన సెన్సార్ అందుబాటులో ఉంది- TCS3200 కలర్ సెన్సార్, ఇది మేము ఇప్పటికే ఆర్డునోతో కలర్ సార్టర్ మెషీన్ను నిర్మించడానికి ఉపయోగించాము.
అవసరమైన భాగాలు
- ఆర్డునో UNO
- APDS9960 RGB మరియు సంజ్ఞ సెన్సార్
- 16x2 LCD
- డిపిడిటి స్విచ్
- 100 కె పాట్ మరియు 10 కె రెసిస్టర్
- జంపర్ కేబుల్స్
APDS-9960 డిజిటల్ సామీప్యత RGB & సంజ్ఞ సెన్సార్ పరిచయం
APDS9960 ఒక మల్టీఫంక్షన్ సెన్సార్. ఇది కాంతిలో సంజ్ఞలు, పరిసర కాంతి మరియు RGB విలువలను గుర్తించగలదు. ఈ సెన్సార్ను సామీప్య సెన్సార్గా కూడా ఉపయోగించవచ్చు మరియు కాల్కు హాజరైనప్పుడు టచ్స్క్రీన్ను నిలిపివేయడానికి స్మార్ట్ఫోన్లలో ఎక్కువగా ఉపయోగిస్తారు.
ఈ సెన్సార్లో నాలుగు ఫోటోడియోడ్లు ఉంటాయి. ఈ ఫోటోడియోడ్లు ఆన్-బోర్డు LED ద్వారా ప్రసారం చేయబడిన ప్రతిబింబించిన IR శక్తిని కనుగొంటాయి. కాబట్టి ఏదైనా సంజ్ఞ చేయబడినప్పుడు ఈ ఐఆర్ శక్తి అడ్డుపడి సెన్సార్కు తిరిగి ప్రతిబింబిస్తుంది, ఇప్పుడు సెన్సార్ సంజ్ఞ గురించి సమాచారాన్ని (దిశ, వేగం) గుర్తించి డిజిటల్ సమాచారంగా మారుస్తుంది. ప్రతిబింబించిన IR కాంతిని గుర్తించడం ద్వారా అడ్డంకి యొక్క దూరాన్ని కొలవడానికి ఈ సెన్సార్ ఉపయోగపడుతుంది. ఇది RGB రంగులను సెన్సింగ్ చేయడానికి UV మరియు IR బ్లాకింగ్ ఫిల్టర్లను కలిగి ఉంది మరియు ఇది ప్రతి రంగుకు 16-బిట్ డేటాను ఉత్పత్తి చేస్తుంది.
APDS-9960 సెన్సార్ యొక్క పిన్-అవుట్ క్రింద చూపబడింది. ఈ సెన్సార్ I 2 C కమ్యూనికేషన్ ప్రోటోకాల్పై పనిచేస్తుంది. ఇది 1µA కరెంట్ను వినియోగిస్తుంది మరియు 3.3V శక్తితో ఉంటుంది కాబట్టి జాగ్రత్తగా ఉండండి మరియు 5V పిన్తో కనెక్ట్ చేయవద్దు. ఇక్కడ INT పిన్ అంతరాయ పిన్, ఇది I 2 C కమ్యూనికేషన్ను నడపడానికి ఉపయోగించబడుతుంది. పిఎస్ జంపర్ కనెక్ట్ కాకపోతే ఆన్-బోర్డ్ ఎల్ఇడి కోసం విఎల్ పిన్ ఐచ్ఛిక పవర్ పిన్. పిఎస్ జంపర్ మూసివేయబడితే మీరు విసిసి పిన్కు మాత్రమే శక్తినివ్వాలి, ఇది రెండింటికి శక్తిని అందిస్తుంది - మాడ్యూల్ మరియు ఐఆర్ ఎల్ఇడి.
సర్క్యూట్ రేఖాచిత్రం
Arduino తో APDS960 కోసం కనెక్షన్లు చాలా సులభం. RGB సెన్సింగ్ మరియు సంజ్ఞ సెన్సింగ్ అనే రెండు మోడ్ల మధ్య మారడానికి మేము DPDT బటన్ను ఉపయోగిస్తాము. మొదట I2C కమ్యూనికేషన్ పిన్స్ APDS9960 యొక్క SDA మరియు SCL వరుసగా Arduino పిన్ A4 మరియు A5 లకు అనుసంధానించబడి ఉన్నాయి. ఇంతకుముందు చెప్పినట్లుగా, సెన్సార్ కోసం ఆపరేటింగ్ వోల్టేజ్ 3.3v కాబట్టి, APDS9960 యొక్క VCC మరియు GND 3.3V మరియు Arduino యొక్క GND కి అనుసంధానించబడి ఉన్నాయి. APDS9960 యొక్క అంతరాయ పిన్ (INT) Arduino యొక్క D2 పిన్తో అనుసంధానించబడి ఉంది.
కోసం LCD, డేటా పిన్స్ (D4-D7) డిజిటల్ పిన్స్ Arduino యొక్క డి 6-డి 3 మరియు RS మరియు EN పిన్స్ కనెక్ట్ డి 6 మరియు Arduino యొక్క D7 కనెక్ట్. LCD యొక్క V0 కుండకు అనుసంధానించబడి ఉంది మరియు LCD యొక్క ప్రకాశాన్ని నియంత్రించడానికి 100K కుండ ఉపయోగించబడుతుంది. DPDT బటన్ల కోసం మేము 3 పిన్లను మాత్రమే ఉపయోగించాము. రెండవ పిన్ ఇన్పుట్ కోసం ఆర్డునో యొక్క డి 7 పిన్తో అనుసంధానించబడి ఉంది మరియు మిగతా రెండు జిఎన్డి మరియు విసిసికి అనుసంధానించబడి, తరువాత 10 కె రెసిస్టర్ను కలిగి ఉంది.
సంజ్ఞ మరియు రంగు సెన్సింగ్ కోసం ప్రోగ్రామింగ్ ఆర్డునో
ప్రోగ్రామింగ్ భాగం సరళమైనది మరియు సులభం మరియు డెమో వీడియోతో పూర్తి ప్రోగ్రామ్ ఈ ట్యుటోరియల్ చివరిలో ఇవ్వబడుతుంది.
మొదట మనం స్పార్క్ఫన్ తయారు చేసిన లైబ్రరీని వ్యవస్థాపించాలి. ఈ లైబ్రరీని ఇన్స్టాల్ చేయడానికి స్కెచ్-> లైబ్రరీని చేర్చండి-> లైబ్రరీలను నిర్వహించండి.
ఇప్పుడు సెర్చ్ బార్లో “స్పార్క్ఫన్ APDS9960” అని టైప్ చేసి, లైబ్రరీని చూసినప్పుడు ఇన్స్టాల్ బటన్ పై క్లిక్ చేయండి.
మరియు మేము వెళ్ళడానికి సిద్ధంగా ఉన్నాము. ప్రారంభిద్దాం.
కాబట్టి మొదట మనం అవసరమైన అన్ని హెడర్ ఫైళ్ళను చేర్చాలి. మొదటి హెడర్ ఫైల్ LiquidCrystal.h LCD ఫంక్షన్ల కోసం ఉపయోగించబడుతుంది. రెండవ హెడర్ ఫైల్ Wire.h ను I 2 C కమ్యూనికేషన్ కోసం ఉపయోగిస్తారు మరియు చివరిది SparkFun_APDS996.h APDS9960 సెన్సార్ కోసం ఉపయోగించబడుతుంది.
# చేర్చండి
ఇప్పుడు తదుపరి పంక్తులలో బటన్ మరియు ఎల్సిడి కోసం పిన్లను నిర్వచించాము.
const int buttonPin = 7; const int rs = 12, en = 11, d4 = 6, d5 = 5, d6 = 4, d7 = 3; లిక్విడ్ క్రిస్టల్ ఎల్సిడి (rs, en, d4, d5, d6, d7);
తరువాతి భాగంలో, డిజిటల్ పిన్ 2 పై అనుసంధానించబడిన ఇంటరప్ట్ పిన్ కోసం మాక్రోను నిర్వచించాము మరియు ప్రస్తుత స్థితి బటన్ కోసం ఒక వేరియబుల్ బటన్ స్టేట్ మరియు అంతరాయ సేవా దినచర్య కోసం isr_flag .
# APDS9960_INT 2 int బటన్ స్టేట్ నిర్వచించండి; int isr_flag = 0;
తరువాత SparkFun_APDS9960 కోసం ఒక వస్తువు సృష్టించబడుతుంది, తద్వారా మేము సంజ్ఞ కదలికలను యాక్సెస్ చేయవచ్చు మరియు RGB విలువలను పొందవచ్చు.
SparkFun_APDS9960 apds = SparkFun_APDS9960 (); uint16_t పరిసర_లైట్ = 0; uint16_t ఎరుపు_లైట్ = 0; uint16_t ఆకుపచ్చ_లైట్ = 0; uint16_t బ్లూ_లైట్ = 0;
లో సెటప్ ఫంక్షన్, మొదటి లైన్ ఇన్పుట్ బటన్ (అధిక / తక్కువ) నుండి విలువ మరియు రెండవ & మూడవ లైన్ నిర్వచిస్తుంది ఆటంకాన్ని మరియు బటన్ పిన్ పొందడంలో ఉంది. apds.init () APDS9960 సెన్సార్ను ప్రారంభిస్తుంది మరియు lcd.begin (16,2) LCD ని ప్రారంభిస్తుంది.
శూన్య సెటప్ () { buttonState = DigitalRead (buttonPin); పిన్మోడ్ (APDS9960_INT, INPUT); పిన్మోడ్ (బటన్పిన్, ఇన్పుట్); apds.init (); lcd.begin (16, 2); }
లో లూప్ ఫంక్షన్ మొదటి లైన్ లో బటన్ నుండి విలువలు మరియు అది దుకాణాలలో గెట్స్ buttonState ముందు నిర్వచించబడిన వేరియబుల్. ఇప్పుడు తరువాతి పంక్తులలో మనం బటన్ నుండి విలువలను తనిఖీ చేస్తున్నాము, అది ఎక్కువగా ఉంటే మేము లైట్ సెన్సార్ను ప్రారంభిస్తాము మరియు అది తక్కువగా ఉంటే సంజ్ఞ సెన్సార్ను ప్రారంభించండి.
AttachInterrupt () బాహ్య ఆటంకాన్ని కోసం ఉపయోగించే ఒక ఫంక్షన్ ఈ సందర్భంలో సెన్సార్ యొక్క ఆటంకాన్ని ఇది ఉంది. ఈ ఫంక్షన్లో మొదటి వాదన అంతరాయ సంఖ్య. Arduino UNO లో, రెండు అంతరాయ పిన్స్ డిజిటల్ పిన్స్ ఉన్నాయి - 2 మరియు 3 INT.0 మరియు INT.1 చే సూచించబడతాయి. మరియు మేము దానిని పిన్ 2 కి కనెక్ట్ చేసాము, కాబట్టి మేము అక్కడ 0 వ్రాసాము. రెండవ వాదన ఫంక్షన్ను ఇంటరప్ట్రౌటిన్ () అని పిలుస్తుంది, ఇది తరువాత నిర్వచించబడుతుంది. చివరి వాదన FALLING, తద్వారా పిన్ ఎత్తు నుండి క్రిందికి వెళ్ళినప్పుడు అంతరాయాన్ని ప్రేరేపిస్తుంది. Arduino అంతరాయాల గురించి ఇక్కడ మరింత తెలుసుకోండి.
void loop () { buttonState = DigitalRead (buttonPin); if (buttonState == HIGH) { apds.enableLightSensor (true); }
తదుపరి భాగంలో, మేము బటన్ పిన్ కోసం తనిఖీ చేస్తాము. ఇది ఎక్కువగా ఉంటే RGB సెన్సార్ కోసం ప్రక్రియను ప్రారంభించండి. అప్పుడు లైట్ సెన్సార్ విలువలను చదువుతుందో లేదో తనిఖీ చేయండి. అది విలువలను చదవలేకపోతే, ఆ సందర్భంలో, " కాంతి విలువలను చదవడంలో లోపం " అని ముద్రించండి . అది విలువలను చదవగలిగితే, మూడు రంగుల విలువలను సరిపోల్చండి మరియు ఏది ఎక్కువైతే, ఆ రంగును LCD కి ప్రింట్ చేయండి.
if (buttonState == HIGH) { if (! apds.readAmbientLight (ambient_light) - ! apds.readRedLight (red_light) - ! apds.readGreenLight (green_light) - ! apds.readBlueLight (blue_light)) { lcd.print ("కాంతి విలువలను చదవడంలో లోపం"); } else { if (red_light> green_light) { if (red_light> blue_light) { lcd.print ("Red"); ఆలస్యం (1000); lcd.clear (); } ……. ………..
తదుపరి పంక్తులలో మళ్ళీ బటన్ పిన్ కోసం తనిఖీ చేయండి మరియు అది తక్కువగా ఉంటే సంజ్ఞ సెన్సార్ ప్రక్రియ. అప్పుడు isr_flag కోసం తనిఖీ చేయండి మరియు అది 1 అయితే ఫంక్షన్ detachInterrupt () అంటారు. అంతరాయాన్ని ఆపివేయడానికి ఈ ఫంక్షన్ ఉపయోగించబడుతుంది. తదుపరి పంక్తి హ్యాండిల్గెస్చర్ () అని పిలుస్తుంది, ఇది తరువాత నిర్వచించిన ఫంక్షన్. తదుపరి పంక్తులలో isr_flag ని సున్నాకి నిర్వచించండి మరియు అంతరాయాన్ని అటాచ్ చేయండి.
else if (buttonState == LOW) { if (isr_flag == 1) { detachInterrupt (0); handleGesture (); isr_flag = 0; అటాచ్ఇంటరప్ట్ (0, ఇంటరప్ట్ రొటీన్, ఫాలింగ్); } }
తదుపరిది ఇంటరప్ట్ రొటీన్ () ఫంక్షన్. ఈ ఫంక్షన్ isr_flag వేరియబుల్ 1 ను మార్చడానికి ఉపయోగించబడుతుంది, తద్వారా అంతరాయ సేవను ప్రారంభించవచ్చు.
void interruptRoutine (). { isr_flag = 1; }
HandleGesture () ఫంక్షన్ తదుపరి భాగం నిర్వచించారు. ఈ ఫంక్షన్ మొదట సంజ్ఞ సెన్సార్ లభ్యత కోసం తనిఖీ చేస్తుంది. అది అందుబాటులో ఉంటే అది సంజ్ఞ విలువలను చదువుతుంది మరియు ఇది ఏ సంజ్ఞ (UP, DOWN, RIGHT, LEFT, FAR, NEAR) అని తనిఖీ చేస్తుంది మరియు సంబంధిత విలువలను LCD కి ప్రింట్ చేస్తుంది.
void handleGesture () { if (apds.isGestureAvailable ()) { స్విచ్ (apds.readGesture ()) { కేసు DIR_UP: lcd.print ("UP"); ఆలస్యం (1000); lcd.clear (); విచ్ఛిన్నం; కేసు DIR_DOWN: lcd.print ("DOWN"); ఆలస్యం (1000); lcd.clear (); విచ్ఛిన్నం; కేసు DIR_LEFT: lcd.print ("LEFT"); ఆలస్యం (1000); lcd.clear (); విచ్ఛిన్నం; కేసు DIR_RIGHT: lcd.print ("RIGHT"); ఆలస్యం (1000); lcd.clear (); విచ్ఛిన్నం; కేసు DIR_NEAR: lcd.print ("సమీపంలో"); ఆలస్యం (1000); lcd.clear (); విచ్ఛిన్నం; కేసు DIR_FAR: lcd.print ("FAR"); ఆలస్యం (1000); lcd.clear (); విచ్ఛిన్నం; డిఫాల్ట్: lcd.print ("NONE"); ఆలస్యం (1000); lcd.clear (); } } }
చివరగా, కోడ్ను ఆర్డునోకు అప్లోడ్ చేయండి మరియు సెన్సార్ ప్రారంభమయ్యే వరకు వేచి ఉండండి. ఇప్పుడు బటన్ ఆఫ్ చేయబడినప్పుడు అది సంజ్ఞ మోడ్లో ఉందని అర్థం. కాబట్టి మీ చేతులను ఎడమ, కుడి, పైకి, క్రింది దిశల్లోకి తరలించడానికి ప్రయత్నించండి. కోసం ఇప్పటివరకు సంజ్ఞ, 2-3 సెకన్ల సెన్సార్ నుండి 2-4 అంగుళాలు దూరంలో మీ చేతి ఉంచడానికి దాన్ని తొలగించండి. మరియు సమీప సంజ్ఞ కోసం మీ చేతిని సెన్సార్ నుండి దూరంగా ఉంచండి, ఆపై దాన్ని దగ్గరకు తీసుకొని తీసివేయండి.
ఇప్పుడు కలర్ సెన్సింగ్ మోడ్లో ఉంచడానికి బటన్ను ఆన్ చేసి, ఎరుపు, నీలం మరియు ఆకుపచ్చ వస్తువులను ఒక్కొక్కటిగా సెన్సార్కు దగ్గరగా తీసుకోండి. ఇది వస్తువు యొక్క రంగును ముద్రిస్తుంది.