- భాగాలు అవసరం
- 433Mhz RF ట్రాన్స్మిటర్ మరియు రిసీవర్ మాడ్యూల్)
- STM32F103C8 తో RF ట్రాన్స్మిటర్ యొక్క సర్క్యూట్ రేఖాచిత్రం
- ఆర్డునో యునోతో RF రిసీవర్ యొక్క సర్క్యూట్ రేఖాచిత్రం
- వైర్లెస్ RF ప్రసారం కోసం ప్రోగ్రామింగ్ STM32F103C8
- ఆర్డినో UNO ను RF రిసీవర్గా ప్రోగ్రామింగ్ చేస్తోంది
- STM 32 ఆధారిత RF ట్రాన్స్మిటర్ మరియు స్వీకర్తను పరీక్షిస్తోంది
ఎంబెడెడ్ ఎలక్ట్రానిక్స్లో వైర్లెస్ ప్రాజెక్ట్లను తయారు చేయడం చాలా ముఖ్యమైనది మరియు సహాయకరంగా మారుతుంది, ఎందుకంటే అక్కడ గందరగోళ వైర్లు లేనందున పరికరం మరింత సులభ మరియు పోర్టబుల్ అవుతుంది. బ్లూటూత్, వైఫై, 433 మెగాహెర్ట్జ్ ఆర్ఎఫ్ (రేడియో ఫ్రీక్వెన్సీ) వంటి వివిధ వైర్లెస్ టెక్నాలజీలు ఉన్నాయి. ప్రతి టెక్నాలజీకి దాని స్వంత ప్రయోజనాలు మరియు ఖర్చులు, దూరం లేదా పరిధి బదిలీ, వేగం లేదా నిర్గమాంశాలు ఉన్నాయి. ఈ రోజు మనం STM32 తో RF మాడ్యూల్ని ఉపయోగిస్తాము డేటాను వైర్లెస్గా పంపడం మరియు స్వీకరించడం. మీరు STM32 మైక్రోకంట్రోలర్కు కొత్తగా ఉంటే, Arduino IDE ని ఉపయోగించి STM32 తో బ్లింకింగ్ LED తో ప్రారంభించండి మరియు ఇక్కడ అన్ని ఇతర STM32 ప్రాజెక్ట్లను తనిఖీ చేయండి.
ఇది కాకుండా, కొన్ని వైర్లెస్ నియంత్రిత ప్రాజెక్టులను నిర్మించడానికి మేము ఇతర మైక్రోకంట్రోలర్లతో RF 433Mhz వైర్లెస్ మాడ్యూల్ను కూడా ఉపయోగించాము, అవి:
- RF నియంత్రిత గృహోపకరణాలు
- రాస్ప్బెర్రీ పై ఉపయోగించి RF రిమోట్ కంట్రోల్డ్ LED లు
- RF కంట్రోల్డ్ రోబోట్
- ఆర్డునోతో RF మాడ్యూల్ ఇంటర్ఫేసింగ్
- RF మాడ్యూల్ ఉపయోగించి PIC నుండి PIC కమ్యూనికేషన్
ఇక్కడ మేము 433MHz RF వైర్లెస్ మాడ్యూల్ను STM32F103C8 మైక్రోకంట్రోలర్తో ఇంటర్ఫేస్ చేస్తాము . ఈ ప్రాజెక్టును రెండు భాగాలుగా విభజించారు. ట్రాన్స్మిటర్ STM32 అంతర్ముఖం ఉంటుంది మరియు రిసీవర్ Arduino UNO అంతర్ముఖం ఉంటుంది. ఉంటుంది వివిధ సర్క్యూట్లో మరియు స్కెచ్లు ప్రసారం అలాగే భాగాన్ని మాత్రమే స్వీకరిస్తారు రెండు కోసం.
ఈ ట్యుటోరియల్లో, RF ట్రాన్స్మిటర్ రెండు విలువలను రిసీవర్ వైపుకు పంపుతుంది: అల్ట్రాసోనిక్ సెన్సార్ ఉపయోగించి కొలిచిన దూరం మరియు పొటెన్టోమీటర్ ADC విలువ (0 నుండి 4096), ఇది (0 నుండి 100 వరకు) సంఖ్యగా మ్యాప్ చేయబడింది. ఆర్డునో యొక్క RF రిసీవర్ విలువలు రెండింటినీ అందుకుంటుంది మరియు ఆ దూరం మరియు సంఖ్య విలువలను 16x2 LCD డిస్ప్లేలో వైర్లెస్గా ప్రింట్ చేస్తుంది.
భాగాలు అవసరం
- STM32F103C8 మైక్రోకంట్రోలర్
- ఆర్డునో UNO
- 433Mhz RF ట్రాన్స్మిటర్ & రిసీవర్
- అల్ట్రాసోనిక్ సెన్సార్ (HC-SR04)
- 16x2 LCD డిస్ప్లే
- 10 కె పొటెన్టోమీటర్
- బ్రెడ్బోర్డ్
- వైర్లను కనెక్ట్ చేస్తోంది
433Mhz RF ట్రాన్స్మిటర్ మరియు రిసీవర్ మాడ్యూల్)
RF ట్రాన్స్మిటర్ పిన్అవుట్:
433Mhz RF ట్రాన్స్మిటర్ |
పిన్ వివరణ |
ANT |
యాంటెన్నాను కనెక్ట్ చేయడానికి |
GND |
GND |
VDD |
3.3 నుండి 5 వి |
సమాచారం |
రిసీవర్కు ప్రసారం చేయవలసిన డేటా ఇక్కడ ఇవ్వబడింది |
RF రిసీవర్ పిన్అవుట్:
433Mhz RF స్వీకర్త |
వా డు |
ANT |
యాంటెన్నాను కనెక్ట్ చేయడానికి |
GND |
GND |
VDD |
3.3 నుండి 5 వి |
సమాచారం |
ట్రాన్స్మిటర్ నుండి స్వీకరించవలసిన డేటా |
CE / DO |
ఇది డేటా పిన్ కూడా |
433 MHz మాడ్యూల్ లక్షణాలు:
- రిసీవర్ ఆపరేటింగ్ వోల్టేజ్: 3 వి నుండి 5 వి
- ట్రాన్స్మిటర్ ఆపరేటింగ్ వోల్టేజ్: 3 వి నుండి 5 వి
- ఆపరేటింగ్ ఫ్రీక్వెన్సీ: 433 MHz
- ప్రసార దూరం: 3 మీటర్లు (యాంటెన్నా లేకుండా) నుండి 100 మీటర్లు (గరిష్టంగా)
- మాడ్యులేటింగ్ టెక్నిక్: ASK (యాంప్లిట్యూడ్ షిఫ్ట్ కీయింగ్)
- డేటా ప్రసార వేగం: 10Kbps
STM32F103C8 తో RF ట్రాన్స్మిటర్ యొక్క సర్క్యూట్ రేఖాచిత్రం
RF ట్రాన్స్మిటర్ & STM32F103C8 మధ్య సర్క్యూట్ కనెక్షన్లు:
STM32F103C8 |
RF ట్రాన్స్మిటర్ |
5 వి |
VDD |
GND |
GND |
PA10 |
సమాచారం |
NC |
ANT |
అల్ట్రాసోనిక్ సెన్సార్ & STM32F103C8 మధ్య సర్క్యూట్ కనెక్షన్లు:
STM32F103C8 |
అల్ట్రాసోనిక్ సెన్సార్ (HC-SR04) |
5 వి |
వీసీసీ |
పిబి 1 |
ట్రిగ్ |
పిబి 0 |
ఎకో |
GND |
GND |
ఒక 10k potentiometer ఇన్పుట్ అనలాగ్ విలువ (0 3.3V కు) STM32 యొక్క ADC పిన్ PA0 అందించడానికి STM32F103C8 తో అనుసంధానించబడి ఉంది.
ఆర్డునో యునోతో RF రిసీవర్ యొక్క సర్క్యూట్ రేఖాచిత్రం
RF రిసీవర్ & ఆర్డునో UNO మధ్య సర్క్యూట్ కనెక్షన్లు:
ఆర్డునో UNO |
RF స్వీకర్త |
5 వి |
VDD |
GND |
GND |
11 |
సమాచారం |
NC |
ANT |
16x2 LCD & Arduino UNO మధ్య సర్క్యూట్ కనెక్షన్లు:
LCD పిన్ పేరు |
Arduino UNO పిన్ పేరు |
గ్రౌండ్ (Gnd) |
గ్రౌండ్ (జి) |
వీసీసీ |
5 వి |
VEE |
కాంట్రాస్ట్ కోసం సెంటర్ ఆఫ్ పొటెన్టోమీటర్ నుండి పిన్ చేయండి |
రిజిస్టర్ సెలెక్ట్ (RS) |
2 |
చదవండి / వ్రాయండి (RW) |
గ్రౌండ్ (జి) |
ప్రారంభించండి (EN) |
3 |
డేటా బిట్ 4 (డిబి 4) |
4 |
డేటా బిట్ 5 (డిబి 5) |
5 |
డేటా బిట్ 6 (డిబి 6) |
6 |
డేటా బిట్ 7 (డిబి 7) |
7 |
LED పాజిటివ్ |
5 వి |
LED నెగటివ్ |
గ్రౌండ్ (జి) |
కోడింగ్ క్రింద క్లుప్తంగా వివరించబడుతుంది. స్కెచ్ యొక్క రెండు భాగాలు ఉంటాయి, ఇక్కడ మొదటి భాగం ట్రాన్స్మిటర్ విభాగం మరియు మరొక భాగం రిసీవర్ విభాగం. ఈ ట్యుటోరియల్ చివరిలో అన్ని స్కెచ్ ఫైల్స్ మరియు వర్కింగ్ వీడియో ఇవ్వబడతాయి. ఆర్డునో యునోతో RF మాడ్యూల్ ఇంటర్ఫేసింగ్ గురించి మరింత తెలుసుకోవడానికి, లింక్ను అనుసరించండి.
వైర్లెస్ RF ప్రసారం కోసం ప్రోగ్రామింగ్ STM32F103C8
STM32F103C8 ను Arduino IDE ఉపయోగించి ప్రోగ్రామ్ చేయవచ్చు. ఒక FTDI ప్రోగ్రామర్ లేదా ST-లింక్ చేయడానికి STM32F103C8 కోడ్ అప్లోడ్ అవసరంలేదు. STM32 యొక్క USB పోర్ట్ ద్వారా PC కి కనెక్ట్ అవ్వండి మరియు ARDUINO IDE తో ప్రోగ్రామింగ్ ప్రారంభించండి. లింక్ను అనుసరించడం ద్వారా మీ STM32 ను ఆర్డునో IDE లో ప్రోగ్రామింగ్ నేర్చుకోవచ్చు.
ట్రాన్స్మిటర్ విభాగంలో 'సెం.మీ.'లోని వస్తువు యొక్క దూరం అల్ట్రాసోనిక్ సెన్సార్ ఉపయోగించి కొలుస్తారు మరియు పొటెన్షియోమీటర్ ఉపయోగించి (0 నుండి 100 వరకు) సెట్ విలువ STM32 తో ఇంటర్ఫేస్ చేయబడిన RF ట్రాన్స్మిటర్ ద్వారా ప్రసారం చేయబడుతుంది.
మొదట రేడియోహెడ్ లైబ్రరీ చేర్చబడింది, దానిని ఇక్కడ నుండి డౌన్లోడ్ చేసుకోవచ్చు. ఈ లైబ్రరీ డేటాను ప్రసారం చేయడానికి మరియు స్వీకరించడానికి ASK (యాంప్లిట్యూడ్ షిఫ్ట్ కీయింగ్ టెక్నిక్) ను ఉపయోగిస్తుంది. ఇది ప్రోగ్రామింగ్ చాలా సులభం చేస్తుంది. స్కెచ్-> లైబ్రరీ->.zip లైబ్రరీని చేర్చడం ద్వారా మీరు లైబ్రరీని స్కెచ్లో చేర్చవచ్చు.
# చేర్చండి
ట్రాన్స్మిటర్ వైపు ఈ ట్యుటోరియల్ మాదిరిగా దూరాన్ని కొలవడానికి అల్ట్రాసోనిక్ సెన్సార్ ఉపయోగించబడుతుంది కాబట్టి ట్రిగ్గర్ మరియు ఎకో పిన్స్ నిర్వచించబడతాయి.
# ట్రిగ్పిన్ పిబి 1 ని నిర్వచించండి # ఎకోపిన్ పిబి 0 ని నిర్వచించండి
తరువాత RH_ASK లైబ్రరీ యొక్క ఆబ్జెక్ట్ పేరు వేగం (2000), RX పిన్ (PA9) మరియు TX పిన్ (PA10) వంటి పారామితులతో rf_driver గా సెట్ చేయబడింది.
RH_ASK rf_driver (2000, PA9, PA10);
తరువాత ఈ ప్రోగ్రామ్లో అవసరమైన స్ట్రింగ్స్ వేరియబుల్ ప్రకటించబడుతుంది.
స్ట్రింగ్ ట్రాన్స్మిట్_నంబర్; స్ట్రింగ్ ట్రాన్స్మిట్_డిస్టెన్స్; స్ట్రింగ్ ప్రసారం;
శూన్య సెటప్ () లో తరువాత, RH_ASK rf_driver కొరకు వస్తువు ప్రారంభించబడింది.
rf_driver.init ();
ఆ తరువాత ట్రిగ్గర్ పిన్ OUTPUT పిన్గా మరియు PA0 (పొటెన్షియోమీటర్కు కనెక్ట్ చేయబడింది) మరియు ఎకో పిన్ INPUT పిన్గా సెట్ చేయబడింది. 9600 బాడ్ రేటుతో సీరియల్ కమ్యూనికేషన్ ప్రారంభమవుతుంది.
సీరియల్.బెగిన్ (9600); పిన్మోడ్ (PA0, INPUT); పిన్మోడ్ (ఎకోపిన్, ఇన్పుట్); పిన్మోడ్ (ట్రిగ్పిన్, OUTPUT);
శూన్య లూప్ () లో తరువాత, ఇన్పుట్ అయిన పొటెన్టోమీటర్ విలువ frst అనలాగ్ వోల్టేజ్ డిజిటల్ విలువగా మార్చబడుతుంది (ADC విలువ కనుగొనబడింది). STM32 యొక్క ADC 12-బిట్ రిజల్యూషన్ కలిగి ఉంది. కాబట్టి, డిజిటల్ విలువ (0 నుండి 4096) వరకు మారుతుంది (ఇది 0 నుండి 100 వరకు) మ్యాప్ చేయబడుతుంది.
int అనలాగిన్పుట్ = అనలాగ్ రీడ్ (PA0); int pwmvalue = పటం (అనలాగిన్పుట్, 0,4095,0,100);
2 మైక్రోసెకన్ల ఆలస్యంతో ట్రిగ్గర్ను అధికంగా మరియు తక్కువగా అమర్చడం ద్వారా అల్ట్రాసోనిక్ సెన్సార్ ఉపయోగించి దూరాన్ని కొలుస్తారు.
డిజిటల్ రైట్ (ట్రిగ్పిన్, తక్కువ); delayMicroseconds (2); డిజిటల్ రైట్ (ట్రిగ్పిన్, హై); delayMicroseconds (10); డిజిటల్ రైట్ (ట్రిగ్పిన్, తక్కువ);
ఎకో పిన్ ప్రతిబింబించిన తరంగాన్ని తిరిగి గ్రహిస్తుంది, అంటే ప్రేరేపిత తరంగాన్ని తిరిగి ప్రతిబింబించే సమయ వ్యవధి సూత్రాన్ని ఉపయోగించి వస్తువు యొక్క దూరాన్ని లెక్కించడంలో ఉపయోగించబడుతుంది. లింక్ను అనుసరించడం ద్వారా అల్ట్రాసోనిక్ సెన్సార్ దూరాన్ని ఎలా లెక్కిస్తుందో మరింత తెలుసుకోండి.
దీర్ఘ వ్యవధి = పల్స్ఇన్ (ఎకోపిన్, హై); ఫ్లోట్ దూరం = వ్యవధి * 0.034 / 2;
ఇప్పుడు కొలిచిన డేటా సంఖ్య మరియు దూరం రెండూ స్ట్రింగ్ డేటాగా మార్చబడతాయి మరియు సంబంధిత స్ట్రింగ్ వేరియబుల్స్లో నిల్వ చేయబడతాయి.
transit_number = స్ట్రింగ్ (pwmvalue); ట్రాన్స్మిట్_డిస్టెన్స్ = స్ట్రింగ్ (దూరం);
రెండు స్ట్రింగ్ ఒక పంక్తిగా జతచేయబడి ట్రాన్స్మిట్ మరియు కామా “,” అని పిలువబడే స్ట్రింగ్లో నిల్వ చేయబడుతుంది, ఇది రెండు తీగలను వేరు చేయడానికి ఉపయోగించబడుతుంది.
ట్రాన్స్మిట్ = ట్రాన్స్మిట్_పిడబ్ల్యుఎమ్ + "," + ట్రాన్స్మిట్_డిస్టెన్స్;
ప్రసార స్ట్రింగ్ అక్షర శ్రేణిగా మార్చబడుతుంది.
const char * msg = transit.c_str ();
డేటా ప్రసారం చేయబడుతుంది మరియు పంపబడే వరకు వేచి ఉండండి.
rf_driver.send ((uint8_t *) msg, strlen (msg)); rf_driver.nightBacketSent ();
పంపిన స్ట్రింగ్ డేటా సీరియల్ మానిటర్లో కూడా ప్రదర్శించబడుతుంది.
సీరియల్.ప్రింట్ల్న్ (msg);
ఆర్డినో UNO ను RF రిసీవర్గా ప్రోగ్రామింగ్ చేస్తోంది
Arduino UNO Arduino IDE ని ఉపయోగించి ప్రోగ్రామ్ చేయబడింది. రిసీవర్ విభాగంలో ట్రాన్స్మిటర్ విభాగం నుండి ప్రసారం చేయబడిన మరియు RF రిసీవర్ మాడ్యూల్ అందుకున్న డేటా మరియు అందుకున్న స్ట్రింగ్ డేటా సంబంధిత డేటా (దూరం మరియు సంఖ్య) గా విభజించబడింది మరియు 16x2 LCD డిస్ప్లేలో ప్రదర్శించబడుతుంది.
క్లుప్తంగా రిసీవర్ కోడింగ్ చూద్దాం:
ట్రాన్స్మిటర్ విభాగంలో వలె మొదట రేడియోహెడ్ లైబ్రరీ చేర్చబడుతుంది. ఈ లైబ్రరీ డేటాను ప్రసారం చేయడానికి మరియు స్వీకరించడానికి ASK (యాంప్లిట్యూడ్ షిఫ్ట్ కీయింగ్ టెక్నిక్) ను ఉపయోగిస్తుంది. ఇది ప్రోగ్రామింగ్ చాలా సులభం చేస్తుంది.
# చేర్చండి
LCD డిస్ప్లే ఇక్కడ ఉపయోగించబడుతున్నందున లిక్విడ్ క్రిస్టల్ లైబ్రరీ కూడా చేర్చబడింది.
# చేర్చండి
Arduino UNO తో అనుసంధానించబడిన 16x2 LCD డిస్ప్లే పిన్లు lcd ని ఆబ్జెక్ట్గా ఉపయోగించి పేర్కొనబడ్డాయి మరియు ప్రకటించబడ్డాయి.
లిక్విడ్ క్రిస్టల్ ఎల్సిడి (2,3,4,5,6,7);
తరువాత స్ట్రింగ్ డేటాను నిల్వ చేయడానికి స్ట్రింగ్ డేటా వేరియబుల్స్ ప్రకటించబడతాయి.
స్ట్రింగ్ str_receive; స్ట్రింగ్ str_number; స్ట్రింగ్ str_distance;
రేడియోహెడ్ లైబ్రరీ కోసం వస్తువు ప్రకటించబడింది.
RH_ASK rf;
ఇప్పుడు శూన్య సెటప్ () లో, LCD డిస్ప్లే 16x2 మోడ్లో సెట్ చేయబడింది మరియు స్వాగత సందేశం ప్రదర్శించబడుతుంది మరియు క్లియర్ చేయబడుతుంది.
lcd.begin (16,2); lcd.print ("CIRCUIT DIGEST"); lcd.setCursor (0,1); lcd.print ("STM32 తో RF"); ఆలస్యం (5000); lcd.clear ();
ఆ తరువాత, rf ఆబ్జెక్ట్ ప్రారంభించబడుతుంది.
rf.init ();
ఇప్పుడు శూన్య లూప్ () లో, అర్రే బఫ్ పరిమాణంతో 7 గా ప్రకటించబడింది. ట్రాన్స్మిటర్ నుండి పంపిన డేటా “,” తో సహా 7 కలిగి ఉన్నందున. కాబట్టి, ప్రసారం చేయవలసిన డేటా ప్రకారం దీన్ని మార్చండి.
uint8_t buf; uint8_t buflen = sizeof (buf);
Rf రిసీవర్ మాడ్యూల్ వద్ద స్ట్రింగ్ అందుబాటులో ఉంటే, ఫంక్షన్ పరిమాణాన్ని తనిఖీ చేస్తుంది మరియు అది అమలు చేస్తుంది. Rf.recv () డేటా స్వీకరించేందుకు ఉపయోగిస్తారు.
if (rf.recv (buf, & buflen))
Buf సమీక్షలను అందుకుంది స్ట్రింగ్ కాబట్టి అప్పుడు పొందింది స్ట్రింగ్ ఒక లో నిల్వ చేయబడుతుంది ఉంది str_receive స్ట్రింగ్ వేరియబుల్.
str_receive = స్ట్రింగ్ ((చార్ *) buf);
ఈ కోసం లూప్ అది ',' మధ్య రెండు రెమ్మలు గుర్తించి ఉంటే రెండుగా అందుకున్న స్ట్రింగ్ విడిపోయినట్లు ఉపయోగిస్తారు.
(int i = 0; i <str_receive.length (); i ++) { if (str_receive.substring (i, i + 1) == ",") { str_number = str_receive.substring (0, i); str_distance = str_receive.substring (i + 1); విచ్ఛిన్నం; }
రెండు విలువల కోసం రెండు చార్ శ్రేణులు ప్రకటించబడతాయి మరియు స్ట్రింగ్ను రెండుగా విభజించిన గౌరవనీయ శ్రేణిలో స్ట్రింగ్ను అక్షర శ్రేణిగా మార్చడం ద్వారా నిల్వ చేయబడుతుంది.
చార్ నంబర్ స్ట్రింగ్; చార్ డిస్టాన్స్ట్రింగ్; str_distance.toCharArray (distancestring, 3); str_number.toCharArray (సంఖ్య స్ట్రింగ్, 3);
ఆ తరువాత అక్షర శ్రేణిని అటోయి () ఉపయోగించి పూర్ణాంకంగా మార్చండి
int దూరం = atoi (distancestring); పూర్ణాంక సంఖ్య = అటోయి (సంఖ్య స్ట్రింగ్);
పూర్ణాంక విలువలుగా మార్చిన తరువాత విలువల దూరం మరియు సంఖ్య 16x2 LCD డిస్ప్లేలో ప్రదర్శించబడుతుంది
lcd.setCursor (0,0); lcd.print ("సంఖ్య:"); lcd.print (సంఖ్య); lcd.setCursor (0,1); lcd.print ("దూరం:"); lcd.print (దూరం); lcd.print ("cm");
STM32 మరియు Arduino UNO లలో వరుసగా కోడ్లను అప్లోడ్ చేసిన తరువాత, STM32 ఉపయోగించి కొలవబడిన సంఖ్య మరియు ఆబ్జెక్ట్ దూరం వంటి డేటా RF ట్రాన్స్మిటర్ ద్వారా RF రిసీవర్కు ప్రసారం చేయబడుతుంది మరియు అందుకున్న విలువలు వైర్లెస్గా LCD డిస్ప్లేలో ప్రదర్శించబడతాయి.
STM 32 ఆధారిత RF ట్రాన్స్మిటర్ మరియు స్వీకర్తను పరీక్షిస్తోంది
1. సంఖ్య 0 వద్ద ఉన్నప్పుడు మరియు వస్తువు యొక్క దూరం 6 సెం.మీ.
2. సంఖ్య 47 మరియు వస్తువు యొక్క దూరం 3 సెం.మీ.