Բովանդակություն:
- Քայլ 1: Հավաքեք ձեր նյութերը
- Քայլ 2: Ներբեռնեք Roomba Toolboxes- ը MATLAB- ի համար
- Քայլ 3. Միացեք ձեր Roomba- ին
- Քայլ 4. Ընտրեք, թե ինչպես եք ցանկանում վերահսկել ձեր Roomba- ն
- Քայլ 5. Քշեք ձեր Roomba- ն
Video: Ձեր սենյակը վերածեք Mars Rover- ի ՝ 5 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:45
Քայլ 1: Հավաքեք ձեր նյութերը
Այս նախագիծն ավարտելու համար ձեզ հարկավոր է հավաքել հետևյալ նյութերը.
1 Roomba ռոբոտ
1 Raspberry Pi Kit
1 Տեսախցիկ
Մուտք դեպի MATLAB
Քայլ 2: Ներբեռնեք Roomba Toolboxes- ը MATLAB- ի համար
Գործարկեք հետևյալ ծածկագիրը ՝ այս նախագիծը ավարտելու համար անհրաժեշտ գործիքների տուփերը տեղադրելու համար:
գործառույթը roombaInstall
clc;
Տեղադրելու համար ֆայլերի % ցանկ
ֆայլեր = {'roomba.m', 'roombaSim.m', 'roombaSimGUI.m', 'roombaSimGUI.fig'};
% տեղադրման վայրը
ընտրանքներ = weboptions ('CertificateFilename', ''); % -ը ասում է, որ անտեսի սերտիֆիկատի պահանջները
սերվեր = 'https://ef.engr.utk.edu/ef230/projects/roomba-f2016/install/';
dlgTitle = 'Roomba- ի տեղադրում/թարմացում';
% ցուցադրման նպատակը և հաստատում ստանալը
հուշում = {
'Այս ծրագիրը կներբեռնի այս EF 230 Roomba ֆայլերը.'
''
strjoin (ֆայլեր, '')
''
'դեպի այս թղթապանակ:'
''
CD
''
- Ուզու՞մ եք շարունակել: '
};
ազդանշան;
yn = questdlg (հուշում,…
dlg Վերնագիր,…
«Այո», «Ոչ», «Այո»);
եթե ~ strcmp (yn, 'Yes'), վերադառնալ; վերջ
% ստանալ առկա ֆայլերի ցանկը
գոյություն ունեցող_ֆայլեր = ֆայլեր (բջջային զվարճանք (@exist, ֆայլեր)> 0);
if ~ isempty (գոյություն ունեցող_ ֆայլեր)
% համոզվեք, որ դրանք փոխարինելը իսկապես լավ է
հուշում = {'Դուք փոխարինում եք այս ֆայլերը (ֆայլերը):'
''
strjoin (գոյություն ունեցող_ֆայլեր, '')
''
«Լա՞վ է փոխարինել»:
};
ազդանշան;
yn = questdlg (հուշում,…
dlg Վերնագիր,…
«Այո», «Ոչ», «Այո»);
եթե ~ strcmp (yn, 'Yes'), վերադառնալ; վերջ
վերջ
% բեռնել ֆայլերը
cnt = 0;
համար i = 1: երկարություն (ֆայլեր)
f = ֆայլեր {i};
disp (['' Ներբեռնում 'f]);
փորձիր
url = [սերվեր f];
websave (f, url, ընտրանքներ); % ավելացված տարբերակներ `անվտանգության սխալներից խուսափելու համար
cnt = cnt + 1;
բռնել
disp (['Սխալ բեռնելիս' f]);
կեղծ = [f '.html'];
եթե գոյություն ունի (կեղծ, 'ֆայլ') == 2
ջնջել (կեղծ)
վերջ
վերջ
վերջ
եթե cnt == երկարությունը (ֆայլեր)
msg = 'Տեղադրումը հաջողվեց';
սպասել (msgbox (msg, dlgTitle));
ուրիշ
msg = 'Տեղադրման սխալ. մանրամասների համար տե՛ս հրամանի պատուհանը';
սպասել (errordlg (msg, dlgTitle));
վերջ
վերջ %roombaInstall
Քայլ 3. Միացեք ձեր Roomba- ին
Այժմ ժամանակն է միանալ ձեր Roomba- ին ՝ օգտագործելով WiFi: 2 մատով միաժամանակ սեղմեք Dock և Spot կոճակները ՝ Roomba- ն միացնելու կամ վերակայելու համար: Հաջորդը, գործարկեք r = roomba (# ձեր Roomba) կոդը MATLAB- ի հրամանի պատուհանում `ձեր ռոբոտին միանալու համար: Այս հրամանը կատարելուց հետո, ձեր Roomba- ն պետք է պատրաստ լինի գնալ:
Քայլ 4. Ընտրեք, թե ինչպես եք ցանկանում վերահսկել ձեր Roomba- ն
Ձեր Roomba- ն կառավարելու երկու եղանակ կա `ինքնավար կամ սմարթֆոնի օգտագործմամբ որպես վերահսկիչ:
Եթե դուք ընտրում եք Roomba- ն ինքնավար վարել, ապա ձեզ հարկավոր է օգտագործել երեք ներկառուցված սենսորներ `ժայռերի տվիչներ, հարվածների և լույսի տվիչներ:
Սմարթֆոն օգտագործելու համար նախ պետք է սմարթֆոնը միացնել համակարգչին ՝ հետևելով ստորև ներկայացված քայլերին:
Ո NOTՇԱԴՐՈԹՅՈՆ. Ձեր համակարգիչը և սմարթֆոնը պետք է լինեն միևնույն WiFi ցանցում `ճիշտ միանալու համար:
1. Ներբեռնեք MATLAB ծրագիրը ձեր սարքի հավելվածների խանութից:
2. Մուտքագրեք «միակցիչը միացված» ձեր հրամանի պատուհանում և սահմանեք գաղտնաբառ, որը պետք է մուտքագրվի երկու սարքերում:
3. Դա անելուց հետո MATLAB- ը ձեզ կտա ձեր համակարգիչների IP հասցեն: Դուք պետք է մտնեք սմարթֆոնի MATLAB հավելվածի կարգավորումների էջ և համակարգիչ ավելացնեք ՝ օգտագործելով տվյալ IP հասցեն և ավելի վաղ մուտքագրված գաղտնաբառը:
4. Ձեր համակարգչի հրամանի պատուհանում մուտքագրեք m = mobiledev ծածկագիրը և սա պետք է նախաստորագրի ձեր սմարթֆոնը որպես Roomba- ի վերահսկիչ:
5. Ձեր համակարգիչն ու սմարթֆոնը հիմա պետք է պատրաստ լինեն գործի:
Քայլ 5. Քշեք ձեր Roomba- ն
Այժմ, երբ դուք ունեք ձեր Mars Rover- ը ստեղծելու համար անհրաժեշտ բոլոր գործիքները, պատրաստ եք ստեղծել ձեր սեփական ծածկագիրը: Ստորև մենք կցել ենք օրինակելի կոդ ինչպես ինքնավար վարման, այնպես էլ սմարթֆոնով կառավարվող վարման համար:
Ինքնավար վարում
գործառույթը Explore_modified (r)
%մուտքագրման փաստարկներ. 1 roomba օբյեկտ, r
%ելքային արգումենտներ ՝ ոչ
%նկարագրություն:
%գործառույթը օգտագործում է անվերջ, իսկ հանգույց ՝ ինքնավարություն թույլ տալու համար
բոտի շրջակայքի %ուսումնասիրություն:
%
%funciton- ը նաև ցուցումներ է տալիս սենյակին, թե ինչ անել այնտեղ
%հետևյալ իրավիճակները. Անիվը (երը) կորցնում են կապը հողի հետ, %օբյեկտը հայտնաբերվում է բոտի դիմաց կամ դրա երկու կողմերում, և ա
%հանկարծակի անկում է հայտնաբերվում բոտի դիմաց կամ դրա երկու կողմերից առաջ:
%
Տիպիկ հրահանգները ներառում են շարժման հրամաններ `առավելագույնի հասցնելու համար
%որոնում կամ խուսափում հայտնաբերված վտանգից և հաղորդակցվելու հրամաններ
%տեղեկատվություն բոտերի հայտնագործությունների (նկարների), դիրքի (գրաֆիկի) վերաբերյալ, %և վիճակ (խցանված նախազգուշացում) օգտագործողի հետ matlab- ի և (կամ) էլփոստի միջոցով: Մի քանի
Վայելելու համար ավելացվում են %ձայնային հրամաններ:
%setup էլփոստի հնարավորություններ
փոստ = '[email protected]';
գաղտնաբառ = 'EF230Roomba';
setpref («Ինտերնետ», «SMTP_Server», «smtp.gmail.com»);
setpref («Ինտերնետ», «E_mail», փոստ);
setpref («Ինտերնետ», «SMTP_Username», փոստ);
setpref ('ինտերնետ', 'SMTP_Password', գաղտնաբառ);
props = java.lang. System.getProperties;
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 = սենյակ (19)
r.epep ('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;
reflect_datum = 2700; %սահմանել ժայռերի տվիչների տեղեկատու արժեքը
lightBumper_datum = 200; %սահմանված լույսի բամպերի տվիչների տեղեկատու արժեքը
pos = [0, 0]; %փոփոխական դիրքի պահպանման համար `սկզբնավորված տվյալներով
անկյուն = 0; %սահմանել հղման անկյունը
netangle = 0; %զուտ անկյունի տեղաշարժ
i = 2; %iterator ՝ տողերի պահպանման փոփոխականին տողեր ավելացնելու համար
dist = 0;
r.setDriveVelocity (v, v); %start roomba շարժվում է առաջ
մինչդեռ ճշմարիտ է
Cliff = r.getCliffSensors;
Bump = r.getBumpers;
Light = r.getLightBumpers;
RandAngle = ռանդի ([20, 60], 1); %-ը ստեղծում է 1 պատահական անկյուն 20 -ից 60 աստիճանի միջև: Օգտագործվում է բոտը մի օղակում խրվելուց խուսափելու համար
%Ինչ անել, եթե մեկ կամ մի քանի անիվ կորցնի կապը հողի հետ.
%դադարեցնել շարժումը, նախազգուշական նամակ ուղարկել շրջապատի պատկերով, %և օգտագործողին հարցրեք ՝ շարունակե՞լ, թե՞ սպասել օգնության
եթե Bump.rightWheelDrop == 1 || Bump.leftWheelDrop == 1
ռ. դադարեցնել
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ
pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ
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 = 'stuck.png';
դիրք = savepos (pos);
%---------------------------
sendmail (փոստ, 'HELP!', 'I clranded on a cliff!', {imfile, position})
ցուցակ = {'Շարունակել', 'Կանգնել'};
idx = մենյու («Ի՞նչ պետք է անեմ», ցուցակ);
եթե idx == 2
ընդմիջում
վերջ
%Ինչ անել, եթե օբյեկտը հայտնաբերվի բոտի դիմաց.
%կանգ առնել, հետ գնալ, լուսանկարել, զգուշացնել հայտնագործման մասին օգտագործողին
%էլփոստի միջոցով, շրջեք 90 աստիճան և շարունակեք ուսումնասիրել
elseif Light.leftCenter> lightBumper_datum || Light.rightCenter> lightBumper_datum || Bump.front == 1
r. դադարեցնել;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ
pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ
pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ
i = i+1;
r.epep ('A1^, A1^, A4^, A2^, G2^, G2^, G4^, Bb2^, Bb2^, Bb3.5^, G1^, A8^')
img = r.getImage;
imwrite (img, 'FrontBump.png')
%--------------------------
imfile = 'FrontBump.png';
դիրք = savepos (pos);
%---------------------------
sendmail (փոստ, «Alert!», «Ես գտա ինչ -որ բան», {imfile, position})
անկյուն = 90;
netangle = netangle+անկյուն;
r.turnAngle (անկյուն);
r.setDriveVelocity (v, v);
%Ինչ անել, եթե օբյեկտը հայտնաբերվի բոտի ձախ կողմում.
%կանգառ, շրջվել դեպի օբյեկտ, պահուստավորել, լուսանկարել, զգոն լինել
Էլփոստի միջոցով հայտնագործման %օգտվող, շրջեք 90 աստիճան և շարունակեք ուսումնասիրել
elseif Light.leftFront> lightBumper_datum || Light.left> lightBumper_datum || Bump.left == 1
r. դադարեցնել;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ
pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ
i = i+1;
անկյուն = 30;
netangle = netangle+անկյուն;
r.turnAngle (անկյուն);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ
pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ
i = i+1;
r.epep ('A4^, A4^, G1^, E1^, C3.5^, C2 ^^, C1^, C1^, C2^, D2^, D2^, E8^')
img = r.getImage;
imwrite (img, 'LeftBump.png')
%--------------------------
imfile = 'LeftBump.png';
դիրք = savepos (pos);
%---------------------------
sendmail (փոստ, «Alert!», «Ես գտա ինչ -որ բան», {imfile, position})
անկյուն = -90;
netangle = netangle+անկյուն;
r.turnAngle (անկյուն);
r.setDriveVelocity (v, v);
%Ինչ անել, եթե օբյեկտը հայտնաբերվի բոտի աջ կողմում.
%կանգառ, շրջվել դեպի օբյեկտ, պահուստավորել, լուսանկարել, զգոն լինել
Էլփոստի միջոցով հայտնագործման %օգտվող, շրջեք 90 աստիճան և շարունակեք ուսումնասիրել
elseif Light.rightFront> lightBumper_datum || Light.right> lightBumper_datum || Bump.right == 1
r. դադարեցնել;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ
pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ
i = i+1;
անկյուն = -30;
netangle = netangle+անկյուն;
r.turnAngle (անկյուն);
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ
pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ
i = i+1;
դադար (1.5);
r.epep ('C1^, C1^, C2^, D2^, D2^, C8^')
img = r.getImage;
imwrite (img, 'RightBump.png')
%--------------------------
imfile = 'RightBump.png';
դիրք = savepos (pos);
%---------------------------
sendmail (փոստ, «Alert!», «Ես գտա ինչ -որ բան», {imfile, position});
անկյուն = 90;
netangle = netangle+անկյուն;
r.turnAngle (անկյուն);
r.setDriveVelocity (v, v);
%Ինչ անել, եթե ժայռը հայտնաբերվի բոտի ձախ կողմում.
%կանգառ, հետ շարժվել, թեքվել աջ, շարունակել ուսումնասիրել
elseif Cliff.left <reflect_datum || Cliff.leftFront <արտացոլում_տվյալ
r. դադարեցնել;
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ
pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ
i = i+1;
r.moveDistance (-. 125);
dist = r.getDistance;
pos (i, 1) = pos (i-1, 1) + dist * sind (ցանց); %ստանալ x կոորդինատ
pos (i, 2) = pos (i-1, 2) + dist * cosd (ցանց); %get y կոորդինատ
i = i+1;
անկյուն = -RandAngle;
netangle = netangle+անկյուն;
r.turnAngle (անկյուն);
r.setDriveVelocity (v, v);
%Ինչ անել, եթե ժայռը հայտնաբերվի բոտի աջ կողմում.
%կանգառ, հետ գնալ, թեքվել ձախ, շարունակել ուսումնասիրել
elseif Cliff.right <reflect_datum || Cliff.rightFront <արտացոլում_դատում
r. դադարեցնել;
dist = r.getDistance;
pos (i, 1) = dist * sind (անկյուն); %ստանալ x կոորդինատ
pos (i, 2) = dist * cosd (անկյուն); %get y կոորդինատ
i = i+1;
r.moveDistance (-. 125);
անկյուն = RandAngle;
netangle = netangle+անկյուն;
r.turnAngle (անկյուն);
r.setDriveVelocity (v, v);
վերջ
վերջ
Սմարթֆոնի վերահսկիչ
Ընտրանքներ = {'Ինքնավար', 'Ձեռքով կառավարում'}
Արագ = ընտրացանկ («Ինչպե՞ս կցանկանայիք կառավարել ռովերը», ընտրանքներ)
m = mobiledev
r = սենյակ (19)
եթե Արագ == 1
Ուսումնասիրել (r)
ուրիշ
մինչդեռ ճշմարիտ է
դադար (.5)
PhoneData = մ. Կողմնորոշում;
Azi = PhoneData (1);
Սկիպիդար = PhoneData (2);
Կողք = PhoneData (3);
եթե Կողմ> 130 || Կողմ <-130 %, եթե հեռախոսը երես թեքված է, կանգնեցրեք սենյակը և դուրս եկեք հանգույցից
ռ. դադարեցնել
r. beep ('C, C, C, C')
ընդմիջում
elseif Side> 25 && Side <40 %, եթե հեռախոսը կողաշրջված է 25 -ից 40 աստիճանի միջև, ձախ թեքեք 5 աստիճան
r.turnAngle (-5);
elseif Կողմ> 40 %, եթե հեռախոսը կողքից շրջված է 40 աստիճանով, ձախ թեքվում է 45 աստիճանով
r.turnAngle (-45)
elseif Side -40 %, եթե հեռախոսը կողաշրջված է -25 և -40 աստիճանների միջև, աջ շրջադարձ 5 աստիճանով
r.turnAngle (5);
elseif Կողմ <-40 %, եթե հեռախոսը կողաշրջված է -40 աստիճանից պակաս, ձախ թեքիր 45 աստիճանով
r.turnAngle (45)
վերջ
Եթե հեռախոսը պահվում է ուղղաձիգի մոտ, վերցրեք պատկեր և գծեք այն
եթե սկիպիդար <-60 && պատկեր <= 9
ռ. բիփ
img = r.getImage;
ենթածրագր (3, 3, պատկեր)
ցուցադրել (img)
վերջ
%առաջ և հետ շարժվել ՝ հիմնվելով առջևի և հետևի կողմնորոշման վրա
եթե Pitch> 15 && Pitch <35 %, եթե բարձրությունը 15 -ից 35 աստիճանի միջև առաջ է շարժվում կարճ տարածությամբ
%-ը շարժվելուց առաջ ստացեք թեթև բամպերի տվյալներ
litBump = r.getLightBumpers;
եթե litBump.left Առաջինը> 500 || litBump.left Կենտրոն> 500 || litBump.rightCenter> 500 || litBump.rightFront> 500 %, եթե ինչ -որ բան գտնվում է սենյակի դիմաց և կհարվածի, եթե այն առաջ շարժվի, աղմուկ բարձրացրեք և հաղորդագրություն ցուցադրեք
r.epep ('C ^^, F#^, C ^^, F#^')
այլ %տեղափոխել
r.moveDistance (.03);
%Տեղափոխելուց հետո ստացեք բամպերի տվյալներ
Bump = r.getBumpers;
եթե Bump.right == 1 || Bump.left == 1 || Bump.front == 1
r.beep ('A, C, E')
r.moveDistance (-. 01)
վերջ
%-ը ստանում է ժայռերի տվիչների տվյալները
Cliff = r.getCliffSensors;
եթե Cliff.left> 1500 || Cliff.left Առջև> 1500 || Cliff.rightF Front> 1500 || Cliff.right> 1500 %, եթե ինչ -որ բան առաջացնում է ժայռի սենսորը, այն վերաբերվեք որպես լավայի և պահուստավորեք
r.epep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 031)
վերջ
վերջ
elseif Pitch> 35 %, եթե բարձրության բարձրությունը 35 աստիճան առաջ է շարժվում ավելի մեծ հեռավորության վրա
%-ը շարժվելուց առաջ ստացեք թեթև բամպերի տվյալներ
litBump = r.getLightBumpers;
եթե litBump.left Առջև> 15 || litBump.left Կենտրոն> 15 || litBump.rightCenter> 15 || litBump.rightFront> 15 %, եթե ինչ -որ բան գտնվում է սենյակի դիմաց և կհարվածի, եթե այն առաջ շարժվի, աղմուկ բարձրացրեք և հաղորդագրություն ցուցադրեք
r.epep ('C ^^, F#^, C ^^, F#^')
այլ %տեղափոխել
r.moveDistance (.3)
%Տեղափոխելուց հետո ստացեք բամպերի տվյալներ
Bump = r.getBumpers;
եթե Bump.right == 1 || Bump.left == 1 || Bump.front == 1 %, եթե ինչ -որ բանի հարվածում եք, աղմուկ բարձրացրեք, ցուցադրեք հաղորդագրությունը և կրկնօրինակեք
r.beep ('A, C, E')
r.moveDistance (-. 01)
վերջ
%-ը ստանում է ժայռերի տվիչների տվյալները տեղափոխվելուց հետո
Cliff = r.getCliffSensors;
եթե Cliff.left> 1500 || Cliff.left Առջև> 1500 || Cliff.rightF Front> 1500 || Cliff.right> 1500 %, եթե ինչ -որ բան առաջացնում է ժայռի սենսորը, վերաբերվեք դրան որպես լավա և պահուստավորեք
r.epep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (-. 31)
վերջ
վերջ
elseif Pitch -35 %, եթե բարձրությունը -15 -ից -35 աստիճանի միջև ընկնում է կարճ հեռավորության վրա
r.moveDistance (-. 03);
%-ը ստանում է ժայռերի տվիչների տվյալները տեղափոխվելուց հետո
Cliff = r.getCliffSensors;
եթե Cliff.left> 1500 || Cliff.left Առջև> 1500 || Cliff.rightF Front> 1500 || Cliff.right> 1500 %, եթե ինչ -որ բան առաջացնում է ժայռի սենսորը, վերաբերվեք դրան որպես լավա և պահուստավորեք
r.epep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.04)
վերջ
elseif Pitch -60 %, եթե բարձրությունը -35 -ից -60 աստիճանի միջև հետ է շարժվում ավելի մեծ հեռավորության վրա
r.moveDistance (-. 3)
%-ը ստանում է ժայռերի տվիչների տվյալները տեղափոխվելուց հետո
Cliff = r.getCliffSensors;
եթե Cliff.left> 1500 || Cliff.left Առջև> 1500 || Cliff.rightF Front> 1500 || Cliff.right> 1500 %, եթե ինչ -որ բան առաջացնում է ժայռի սենսորը, այն վերաբերվեք որպես լավայի և պահուստավորեք
r.epep ('C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C, C ^^, C')
r.moveDistance (.31)
վերջ
վերջ
վերջ
վերջ
Խորհուրդ ենք տալիս:
Ինչպե՞ս ավտոմատացնել ձեր սենյակը Arduino- ով: Մաս 1: 5 քայլեր
Ինչպե՞ս ավտոմատացնել ձեր սենյակը Arduino- ով: Մաս 1. Ես միշտ ցանկացել եմ վերահսկել իմ սենյակը հեռակա կարգով, ուստի որոշեցի ստեղծել համակարգ, որը թույլ կտա ինձ դա անել: Եթե ցանկանում եք սովորել, թե ինչպես դա անել: ապա ես հրավիրում եմ ձեզ հետևել ստորև նշված քայլերին
Ավտոմատացրեք ձեր ամբողջ սենյակը Google Home- ով + Arduino, NodeMCU և Ubidots- ով ՝ 5 քայլ
Ավտոմատացրեք ձեր ամբողջ սենյակը Google Home- ով + Arduino, NodeMCU և Ubidots. Բարև բոլորին, ահա ես ձեզ ցույց կտամ իմ կատարած նախագիծը: Այն պատրաստվում է կառավարել և ավտոմատացնել ձեր սենյակը arduino- ով և nodemcu- ով IoT հարթակով, որը ես սկսում եմ օգտագործել ամիսներ առաջ և ես կարծում եմ, որ զարմանալի է, ուստի այստեղ ես կիսվում եմ ձեզ հետ իմ փորձով: Սրանով
Ձեր լարային դռան զանգը վերածեք խելացի դռան զանգի ՝ տան օգնականի միջոցով. 6 քայլ
Դարձրեք ձեր լարային դռան զանգը խելացի դռան զանգի ՝ տնային օգնականի միջոցով. Դարձրեք ձեր առկա լարային դռան զանգը խելացի դռան զանգի: Ստացեք ծանուցում ձեր հեռախոսի համար կամ զուգակցեք ձեր առջևի դռնփակ տեսախցիկի հետ ՝ լուսանկար կամ տեսազանգ ստանալու համար, երբ որևէ մեկը զանգի ձեր դռան զանգին: Իմացեք ավելին ՝ fireflyelectronix.com/pro
Bubble Talk: Ձեր խոսքը վերածեք պղպջակների: 6 քայլ (նկարներով)
Bubble Talk: Դարձրեք ձեր խոսքը պղպջակների. Վարրո (մ.թ.ա. 116 - մ.թ.ա. 27), De Re RusticaA օճառի պղպջակը վաղանցիկ է: Այն տևում է ընդամենը մի կարճ պահ և
Ինչպե՞ս ավտոմատացնել ձեր սենյակը Google Օգնականի և Arduino- ի միջոցով: 7 քայլ
Ինչպե՞ս ավտոմատացնել ձեր սենյակը Google Assistant- ի և Arduino- ի միջոցով. աջակցել սարքերի ձայնային կառավարմանը, քանի որ