Përmbajtje:
- Hapi 1: Mblidhni materialet tuaja
- Hapi 2: Shkarkoni kutitë e veglave Roomba për MATLAB
- Hapi 3: Lidhuni me dhomën tuaj
- Hapi 4: Zgjidhni se si dëshironi të kontrolloni dhomën tuaj
- Hapi 5: Drejtoni dhomën tuaj
Video: Ktheni dhomën tuaj në një Mars Rover: 5 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Hapi 1: Mblidhni materialet tuaja
Për të përfunduar këtë projekt, do t'ju duhet të grumbulloni materialet e mëposhtme:
1 Robot Roomba
1 Pako Raspberry Pi
1 Kamera video
Qasja në MATLAB
Hapi 2: Shkarkoni kutitë e veglave Roomba për MATLAB
Drejtoni kodin e mëposhtëm në mënyrë që të instaloni kutitë e nevojshme të veglave për të përfunduar këtë projekt.
funksion roombaInstall
clc;
% lista e skedarëve për tu instaluar
skedarë = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};
% vendndodhja nga e cila do të instalohet
opsionet = zgjedhjet në internet ('CertificateFilename', ''); % i thonë që të injorojë kërkesat e certifikatës
server = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';
dlgTitle = 'Instalo/Përditëso Roomba';
% shfaqni qëllimin dhe merrni konfirmimin
kërkesë = {
'Ky program do të shkarkojë këto skedarë EF 230 Roomba:'
''
strjoin (skedarë, '')
''
'te kjo dosje:'
''
cd
''
'Doni të vazhdoni? '
};
biep;
yn = questdlg (shpejtë,…
dlgTitulli,…
'Po', 'Jo', 'Po');
nëse ~ strcmp (yn, 'Po'), kthehu; fund
% merrni listën e skedarëve që ekzistojnë
skedarët_ ekzistues = skedarët (argëtimi i qelizave (@exist, fotografi)> 0);
nëse ~ është i zbrazët (skedarët_ekzistues)
% sigurohuni që është vërtet mirë t'i zëvendësoni ato
prompt = {'Po zëvendësoni këto skedarë (t):'
''
strjoin (skedarët_ ekzistues, '')
''
'Dakord për të zëvendësuar?'
};
biep;
yn = questdlg (shpejtë,…
dlgTitulli,…
'Po', 'Jo', 'Po');
nëse ~ strcmp (yn, 'Po'), kthehu; fund
fund
% shkarko skedarët
cnt = 0;
për i = 1: gjatësia (skedarët)
f = skedarët {i};
disp (['Shkarkimi' f]);
provo
url = [server f];
websave (f, url, opsionet); % opsione të shtuara për të shmangur gabimet e sigurisë
cnt = cnt + 1;
kap
disp (['Gabim në shkarkim' f]);
bedel = [f '.html'];
nëse ekziston (bedel, 'skedar') == 2
fshij (bedel)
fund
fund
fund
nëse cnt == gjatësia (skedarët)
msg = 'Instalimi është i suksesshëm';
waitfor (msgbox (msg, dlgTitle));
tjeter
msg = 'Gabim në instalim - shiko dritaren e komandës për detaje';
waitfor (errordlg (msg, dlgTitle));
fund
fund %roombaInstall
Hapi 3: Lidhuni me dhomën tuaj
Tani është koha për t'u lidhur me Roomba tuaj duke përdorur WiFi. Duke përdorur 2 gishta, shtypni butonat Dock dhe Spot njëkohësisht për të ndezur ose rivendosur Roomba -n tuaj. Tjetra, Drejtoni kodin r = roomba (# i Roomba -s tuaj) në dritaren e komandës të MATLAB për t'u lidhur me robotin tuaj. Pasi të keni ekzekutuar këtë komandë, Roomba juaj duhet të jetë gati për të shkuar.
Hapi 4: Zgjidhni se si dëshironi të kontrolloni dhomën tuaj
Ka dy mënyra që mund të kontrolloni Roomba -n tuaj: në mënyrë autonome ose duke përdorur një smartphone si kontrollues.
Nëse zgjidhni të drejtoni Roomba në mënyrë autonome, do t'ju duhet të përdorni tre sensorë të integruar: sensorë të shkëmbinjve, sensorë të përplasjes dhe sensorë të dritës.
Për të përdorur një smartphone, së pari duhet të lidhni smartphone -in tuaj me kompjuterin tuaj duke ndjekur hapat e mëposhtëm.
SH NOTNIM: Kompjuteri dhe smartphone juaj duhet të jenë në të njëjtin rrjet WiFi në mënyrë që të lidhen siç duhet!
1. Shkarkoni aplikacionin MATLAB nga dyqani i aplikacioneve në pajisjen tuaj.
2. Shkruani "lidhësin aktiv" në dritaren tuaj të komandës dhe vendosni një fjalëkalim që do të duhet të futet në të dy pajisjet.
3. Pasi ta keni bërë këtë, MATLAB do t'ju japë adresën IP të kompjuterëve tuaj. Ju duhet të hyni në faqen e cilësimeve në aplikacionin MATLAB në smartphone tuaj dhe të shtoni një kompjuter duke përdorur adresën IP të dhënë dhe fjalëkalimin që keni futur më parë.
4. Në dritaren e komandës në kompjuterin tuaj, shkruani kodin m = mobiledev dhe kjo duhet të inicializojë telefonin tuaj të mençur si kontrollues për Roomba -n tuaj.
5. Kompjuteri dhe smartphone juaj duhet të jenë gati për të shkuar tani.
Hapi 5: Drejtoni dhomën tuaj
Tani që keni të gjitha mjetet e nevojshme për të krijuar Mars Rover -in tuaj, jeni gati të krijoni kodin tuaj. Ne kemi bashkangjitur një kod shembull më poshtë si për drejtimin autonome ashtu edhe për drejtimin e kontrolluar nga smartphone.
Drejtimi Autonome
funksioni Explore_modified (r)
%argumente hyrëse: 1 objekt roomba, r
%argumente dalëse: asnjë
%përshkrim:
Funksioni %përdor një lak të pafund ndërsa lejon për të lejuar autonominë
%eksplorim i rrethinës së botit.
%
%funciton gjithashtu jep udhëzime për roomba se çfarë të bëni
%situatat e mëposhtme: Rrota (at) humbin kontaktet me tokën, an
%objekti zbulohet para ose në secilën anë të botit, dhe a
%rënie e papritur zbulohet para ose në të dyja anët e botit.
%
%udhëzimet tipike përfshijnë komandat e lëvizjes që synojnë të maksimizohen
%eksplorimi ose shmangia e një rreziku të zbuluar dhe komandat për të komunikuar
%informacion në lidhje me zbulimet e botëve (fotografi), pozicioni (grafiku), %dhe gjendja (paralajmërim i bllokuar) me përdoruesin përmes matlab dhe/ose email. Disa
%komandat zanore shtohen për kënaqësi.
%aftësitë e konfigurimit të postës elektronike
mail = '[email protected]';
fjalëkalim = 'EF230Roomba';
setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com');
setpref ('Internet', 'E_mail', postë);
setpref ('Internet', 'SMTP_Username', postë);
setpref ('Internet', 'SMTP_Password', fjalëkalim);
props = java.lang. System.getProposies;
props.setProperty ('mail.smtp.starttls.enable', 'true');
props.setProperty ('mail.smtp.auth', 'true');
props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory');
props.setProperty ('mail.smtp.socketFactory.port', '465');
% r = roomba (19)
r.beep ('G2 ^^, G2 ^^, G2 ^^, G2 ^^, A2 ^^, A2 ^^, G1 ^^, E1 ^^, C2 ^^, C2 ^^, C1 ^^, C1 ^^, D1 ^^, C1 ^^, D2 ^^, E4 ^^, G2 ^^, G2 ^^, G2 ^^, G2 ^^, A2 ^^, A2 ^^, G1 ^^, E1 ^^, C2 ^^, C2 ^^, C2 ^^, E1 ^^, E1 ^^, E1 ^^, D1 ^^, C4 ^^ ');
v =.1;
pasqyrë_datum = 2700; %vendosur vlerën e referencës të sensorëve të shkëmbit
dritaBumper_datum = 200; %vendosur vlera e referencës së sensorëve të dritës Parakolp
pos = [0, 0]; %e ndryshueshme për ruajtjen e pozicionit me datën e inicializuar
kënd = 0; %vendosur këndin e referencës
rrjetë = 0; %zhvendosja e këndit neto
i = 2; %përsëritës për shtimin e rreshtave në ndryshoren e ruajtjes së pozicionit
dist = 0;
r.setDriveVelocity (v, v); %start roomba duke ecur përpara
ndërsa e vërtetë
Cliff = r.getCliffSensore;
Bump = r.getBumpers;
Light = r.getLightBumpers;
RandAngle = randi ([20, 60], 1); %gjeneron 1 kënd të rastit midis 20 dhe 60 gradë. Përdoret për të parandaluar që boti të ngec në një lak
%Çfarë duhet bërë nëse një ose më shumë rrota humbet kontaktin me tokën:
%ndalo lëvizjen, dërgoni një email paralajmërues me pamjen e rrethinës, %dhe pyesni përdoruesin nëse do të vazhdojë ose të presë për ndihmë
nëse Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
r.ndaloj
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (rrjetë); %merrni x koordinatë
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %merrni y koordinatë
i = i+1;
r.beep ('F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^, F#1 ^^, C1 ^^ ')
img = r.getImage;
imwrite (img, 'stuck.png');
%--------------------------
imfile = 'mbërthyer.png';
pozicioni = savepos (pos);
%---------------------------
sendmail (posta, 'HELP!', 'Unë jam bllokuar në një shkëmb!', {imfile, position})
lista = {'Vazhdo', 'Ndalo'};
idx = menu ('Çfarë duhet të bëj?', listë);
nëse idx == 2
pushim
fund
%Çfarë duhet të bëni nëse një objekt zbulohet para bot:
%ndalo, lëviz prapa, bëj fotografi, paralajmëro përdoruesin e zbulimit
%përmes postës elektronike, ktheni 90 gradë dhe vazhdoni të eksploroni
elseif Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1
r.ndaloj;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %merrni x koordinatë
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %merrni y koordinatë
i = i+1;
r.moveDistanca (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %merrni x koordinatë
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %merrni y koordinatë
i = i+1;
r.beep ('A1^, A1^, A4^, A2^, G2^, G2^, G4^, Bb2^, Bb2^, Bb3.5^, G1^, A8^')
img = r.getImage;
imwrite (img, 'FrontBump.png')
%--------------------------
imfile = 'FrontBump.png';
pozicioni = savepos (pos);
%---------------------------
sendmail (mail, 'Alert!', 'Kam gjetur diçka!', {imfile, position})
kënd = 90;
netangle = rrjetë+kënd;
r.tornAngle (kënd);
r.setDriveVelocity (v, v);
%Çfarë duhet të bëni nëse objekti zbulohet në të majtë të bot:
%ndalo, kthehu në drejtim të objektit, rezervo, fotografo, vigjilent
%përdorues i zbulimit përmes postës elektronike, kthejeni 90 gradë dhe vazhdoni të eksploroni
elseif Light.leftF front> lightBumper_datum || Light.left> lightBumper_datum || Bump.left == 1
r.ndaloj;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (rrjetë); %merrni x koordinatë
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %merrni y koordinatë
i = i+1;
kënd = 30;
netangle = rrjetë+kënd;
r.tornAngle (kënd);
r.moveDistanca (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (rrjetë); %merrni x koordinatë
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %merrni y koordinatë
i = i+1;
r.beep ('A4^, A4^, G1^, E1^, C3.5^, C2 ^^, C1^, C1^, C2^, D2^, D2^, E8^')
img = r.getImage;
imwrite (img, 'LeftBump.png')
%--------------------------
imfile = 'LeftBump.png';
pozicioni = savepos (pos);
%---------------------------
sendmail (mail, 'Alert!', 'Kam gjetur diçka!', {imfile, position})
kënd = -90;
netangle = rrjetë+kënd;
r.tornAngle (kënd);
r.setDriveVelocity (v, v);
%Çfarë duhet të bëni nëse objekti zbulohet në të djathtë të bot:
%ndalo, kthehu në drejtim të objektit, rezervo, fotografo, vigjilent
%përdorues i zbulimit përmes postës elektronike, kthejeni 90 gradë dhe vazhdoni të eksploroni
elseif Light.rightFront> lightBumper_datum || Light.right> lightBumper_datum || Bump.right == 1
r.ndaloj;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (rrjetë); %merrni x koordinatë
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %merrni y koordinatë
i = i+1;
kënd = -30;
netangle = rrjetë+kënd;
r.tornAngle (kënd);
r.moveDistanca (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (rrjetë); %merrni x koordinatë
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %merrni y koordinatë
i = i+1;
pauzë (1.5);
r.beep ('C1^, C1^, C2^, D2^, D2^, C8^')
img = r.getImage;
imwrite (img, 'RightBump.png')
%--------------------------
imfile = 'RightBump.png';
pozicioni = savepos (pos);
%---------------------------
sendmail (mail, 'Alert!', 'Kam gjetur diçka!', {imfile, position});
kënd = 90;
netangle = rrjetë+kënd;
r.tornAngle (kënd);
r.setDriveVelocity (v, v);
%Çfarë duhet bërë nëse zbulohet shkëmbi në të majtë të botit:
%ndalo, lëviz prapa, kthehu djathtas, vazhdo të eksplorosh
elseif Cliff.left <pasqyroj_datum || Cliff.leftFront <reflekto_datum
r.ndaloj;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (netangle); %merrni x koordinatë
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %merrni y koordinatë
i = i+1;
r.moveDistanca (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (rrjetë); %merrni x koordinatë
pos (i, 2) = pos (i-1, 2) + dist * cosd (netangle); %merrni y koordinatë
i = i+1;
kënd = -RandAngle;
netangle = rrjetë+kënd;
r.tornAngle (kënd);
r.setDriveVelocity (v, v);
%Çfarë duhet bërë nëse zbulohet shkëmbi në të djathtë të botit:
%ndalo, lëviz prapa, kthehu majtas, vazhdo të eksplorosh
elseif Cliff.djathtas <pasqyroj_datum || Cliff.rightFront <pasqyroj_datum
r.ndaloj;
dist = r.getDistance;
pos (i, 1) = dist * sind (këndi); %merrni x koordinatë
pos (i, 2) = dist * cosd (këndi); %merrni y koordinatë
i = i+1;
r.moveDistanca (-. 125);
kënd = RandAngle;
netangle = rrjetë+kënd;
r.tornAngle (kënd);
r.setDriveVelocity (v, v);
fund
fund
Kontrolluesi i smartphone
Opsionet = {'Autonome', 'Kontrolli manual'}
Prompt = menu ("Si do të donit të kontrollonit roverin?", Opsionet)
m = mobiledev
r = roomba (19)
nëse Prompt == 1
Eksploroni (r)
tjeter
ndërsa e vërtetë
pauzë (.5)
Të dhëna telefonike = m. Orientimi;
Azi = Të dhënat telefonike (1);
Fusha = Të dhënat telefonike (2);
Ana = Të dhënat e telefonit (3);
nëse Ana> 130 || Në anën <-130 %nëse telefoni kthehet me fytyrë poshtë ndaloni dhomën dhe dalni lakun
r.ndaloj
r. beep ('C, C, C, C')
pushim
elseif Side> 25 && Ana <40 %nëse telefoni është i kthyer anash midis 25 dhe 40 gradë kthehet majtas 5 gradë
r.krahAngle (-5);
elseif Ana> 40 %nëse telefoni është kthyer anash mbi 40 gradë kthejeni majtas 45 gradë
r.tornAngle (-45)
elseif Side -40 %nëse telefoni kthehet anash midis -25 dhe -40 gradë kthehet djathtas 5 gradë
r. ktheseAngle (5);
elseif Ana <-40 %nëse telefoni kthehet anash më pak se -40 gradë kthehet majtas 45 gradë
r. turnAngle (45)
fund
%Nëse telefoni mbahet pranë vertikalit, merrni një imazh dhe vizatoni atë
nëse Pitch <-60 && image <= 9
r.biep
img = r.getImage;
nënplot (3, 3, imazh)
imshow (img)
fund
%lëvizin përpara dhe prapa bazuar në orientimin para dhe mbrapa
nëse Pitch> 15 && Pitch <35 %nëse hapi midis 15 dhe 35 gradë ecni përpara në distancë të shkurtër
%marrin të dhëna të parakolpit të dritës para se të lëvizni
litBump = r.getLightBumpers;
nëse litBump.leftF front> 500 || litBump.leftCenter> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %nëse diçka është përpara dhomës dhe godet nëse lëviz përpara bëni zhurmë dhe shfaqni mesazh
r.beep ('C ^^, F#^, C ^^, F#^')
tjetër %lëviz
r.moveDistanca (.03);
%Merrni të dhëna parakolp pas lëvizjes
Bump = r.getBumpers;
nëse Bump.right == 1 || Bump.left == 1 || Bump.front == 1
r. biep ('A, C, E')
r.moveDistanca (-. 01)
fund
%marrin të dhëna të sensorit të shkëmbit
Cliff = r.getCliffSensore;
nëse Cliff.left> 1500 || Cliff.leftF front> 1500 || Cliff.rightF front> 1500 || Cliff.right> 1500 %nëse diçka shkakton sensorin e shkëmbit trajtojeni atë si lavë dhe mbështetuni
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistanca (-. 031)
fund
fund
elseif Katran> 35 %nëse lartësia më e madhe 35 gradë ecni përpara në distancë më të gjatë
%marrin të dhëna të parakolpit të dritës para se të lëvizni
litBump = r.getLightBumpers;
nëse litBump.leftF front> 15 || litBump.leftCenter> 15 || litBump.rightCenter> 15 || litBump.rightF front> 15 %nëse diçka është përpara dhomës dhe godet nëse lëviz përpara bëni zhurmë dhe shfaqni mesazh
r.beep ('C ^^, F#^, C ^^, F#^')
tjetër %lëviz
r.moveDistanca (.3)
%Merrni të dhëna parakolp pas lëvizjes
Bump = r.getBumpers;
nëse Bump.right == 1 || Bump.left == 1 || Bump.front == 1 %nëse godisni diçka bëni një zhurmë, shfaqni mesazhin dhe bëni kopje rezervë
r.beep ('A, C, E')
r.moveDistanca (-. 01)
fund
%marrin të dhëna të sensorit të shkëmbit pas lëvizjes
Cliff = r.getCliffSensore;
nëse Cliff.left> 1500 || Cliff.leftF front> 1500 || Cliff.rightF front> 1500 || Cliff.right> 1500 %nëse diçka shkakton sensorin e shkëmbit trajtojeni atë si lavë dhe mbështetuni
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistanca (-. 31)
fund
fund
elseif Pitch -35 %nëse hapi midis -15 dhe -35 gradë lëvizin prapa në distancë të shkurtër
r.moveDistanca (-. 03);
%marrin të dhëna të sensorit të shkëmbit pas lëvizjes
Cliff = r.getCliffSensore;
nëse Cliff.left> 1500 || Cliff.leftF front> 1500 || Cliff.rightF front> 1500 || Cliff.right> 1500 %nëse diçka shkakton sensorin e shkëmbit trajtojeni atë si lavë dhe mbështetuni
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistanca (.04)
fund
elseif Katran -60 %nëse hapi midis -35 dhe -60 gradë lëvizin prapa në distancë më të gjatë
r.moveDistanca (-. 3)
%marrin të dhëna të sensorit të shkëmbit pas lëvizjes
Cliff = r.getCliffSensore;
nëse Cliff.left> 1500 || Cliff.leftF front> 1500 || Cliff.rightF front> 1500 || Cliff.right> 1500 %nëse diçka shkakton sensorin e shkëmbit trajtojeni atë si lavë dhe mbështeteni
r.beep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistanca (.31)
fund
fund
fund
fund
Recommended:
Fanair: një stacion moti për dhomën tuaj: 6 hapa (me fotografi)
Fanair: një stacion meteorologjik për dhomën tuaj: Ka mënyra të panumërta për të zbuluar motin aktual, por atëherë ju e dini vetëm motin jashtë. Po sikur të doni të dini motin brenda shtëpisë tuaj, brenda një dhome të caktuar? Kjo është ajo që unë përpiqem të zgjidh me këtë projekt. Fanair përdor mul
Si ta ktheni Raspberry Pi tuaj në një portë të hyrjes në distancë: 6 hapa
Si ta ktheni Raspberry Pi tuaj në një portë të hyrjes në distancë: Hej djema! Në dritën e ngjarjeve të fundit, ekipi ynë në remote.it ka qenë i vështirë në punë duke krijuar ide për ta bërë punën në distancë pa dhimbje dhe të arritshme. Ne kemi dalë me telekomandën. ItPi Image Card Card, e cila është një kartë SD që mund ta vendosni në një të re
Si ta ktheni celularin tuaj në një kartë krediti/debiti: 5 hapa
Si ta ktheni celularin tuaj në një kartë krediti/debiti: Lehtë për tu bërë mod për një kartë krediti/debiti shtesë me çip RFID (d.m.th. Paypass). Duke përdorur këtë metodë, do të jeni në gjendje të gjeni dhe nxjerrni çipin RFID në kartën tuaj rezervë të aftë për Paypass dhe ta vendosni në celularin tuaj. Kjo do t'ju lejojë të paraqisni
Ktheni monitorin tuaj të vjetër kompjuterik CRT në një rezervuar peshku! ! !: 11 hapa (me fotografi)
Ktheni monitorin tuaj të vjetër kompjuterik CRT në një rezervuar peshku! ! !: Flisni për një mbrojtës të shkëlqyeshëm të ekranit! Unë kam qenë duke dashur të bëj këtë ndërtim për një kohë tani. Pothuajse çdo herë që shoh dhe monitorin e vjetër të kompjuterit CRT buzë rrugës në ditën e plehrave, mendoj me vete … kjo sigurisht që do të bënte një rezervuar peshku të mrekullueshëm. Kështu që
Si ta ktheni celularin tuaj LG EnV 2 në një modem portativ Dial Up për laptopin tuaj (ose desktopin): 7 hapa
Si ta ktheni celularin tuaj LG EnV 2 në një modem Dial Up Portable për laptopin tuaj (ose desktop): Ne të gjithë në një moment e kemi pasur atë nevojë për të përdorur internetin aty ku thjesht nuk ka qenë e mundur, si në makinë , ose me pushime, ku ata ngarkojnë një shumë të kushtueshme parash në orë për të përdorur wifi -n e tyre. më në fund, kam dalë me një mënyrë të thjeshtë për të arritur