Tartalomjegyzék:
- Kellékek
- 1. lépés: A robotplatform építése
- 2. lépés: Programozza be a robotot
- 3. lépés: Hogyan működik?
- 4. lépés: Ötletek és maradékok
Videó: DuvelBot - ESP32 -CAM sörkiszolgáló robot: 4 lépés (képekkel)
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:40
Egy kemény munkanap után semmi sem közelíti meg a kedvenc sörök kortyolását a kanapén. Az én esetemben ez a belga szőke ale "Duvel". Az összeomlás után azonban egy legsúlyosabb problémával szembesülünk: a párnámat tartalmazó hűtőszekrény áthidalhatatlan 20 lábnyi távolságra van a kanapétől.
Bár enyhe kényszerítés az oldalamról arra késztethet egy alkalmi tinédzser hűtőszekrényt, hogy kiönthesse a heti Duvel -juttatásomat, a feladat, hogy ténylegesen eljuttassa a majdnem kimerült utódjához, egy lépéssel túl messze van.
Ideje kitörni a forrasztópáka és a billentyűzet közül …
A DuvelBot egy egyszerű AI-Thinker ESP32-CAM alapú vezetési webkamera, amelyet okostelefonjáról, böngészőjéről vagy táblagépéről vezérelhet.
Könnyen adaptálható vagy bővíthető ez a platform kevesebb alkoholtartalmú felhasználásra (gondoljunk a SpouseSpy, NeighbourWatch, KittyCam …).
Ezt a robotot elsősorban azért építettem, hogy megismerjek egy kicsit a webes programozásról és az IoT dolgokról, amelyekről semmit sem tudtam. Tehát ennek az utasításnak a végén van egy részletes magyarázat arról, hogy ez hogyan működik.
Ennek az utasításnak számos része a Random Nerd Tutorials kiváló magyarázatán alapul, ezért kérjük, látogasson el hozzájuk!
Kellékek
Amire szükséged van:
Az alkatrészlista nincs kőbe vésve, és sok alkatrész rengeteg különböző változatban és sok helyről beszerezhető. A legtöbbet az Ali-Express-től szereztem be. Ahogy Machete mondta: improvizáljon.
Hardver:
- AI Thinker ESP32-CAM modul. Valószínűleg működhet más ESP32-CAM modulokkal, de ezt használtam
- L298N motorvezérlő tábla,
- Olcsó négykerekű robotplatform,
- Egy nagy sík felületű ház, például a Hammond Electronics 1599KGY,
- USB-3.3V-TTL átalakító a programozáshoz.
- A világításhoz: 3 fehér LED, BC327 vagy más általános célú NPN tranzisztor (Ic = 500mA), 4k7k ellenállás, 3 82 Ohm ellenállás, perfboard, kábelek (lásd az ábrát és a képeket).
- Be/ki kapcsoló és egy normálisan nyitott nyomógomb a programozáshoz.
Választható:
- Halszem kamera hosszabb hajlítással, mint az ESP32-CAM modullal szállított szabványos OV2460 kamera,
- WiFi antenna megfelelően hosszú kábellel és Ultra Miniature Coax csatlakozóval, mint ez. Az ESP32-CAM beépített antennával rendelkezik, és a ház műanyag, így nincs igazán szükség antennára, de azt gondoltam, hogy jól néz ki, így…
- Tintasugaras nyomtatható matricapapír a felső borító kialakításához.
A szokásos hardver eszközök: forrasztópáka, fúrók, csavarhúzók, fogók…
1. lépés: A robotplatform építése
A sematikus:
A vázlat nem különleges. Az ESP32-bütyök vezérli a motorokat az L298N motorvezérlő táblán keresztül, amely két csatornával rendelkezik. A bal és a jobb oldali motorok párhuzamosan vannak elhelyezve, és mindegyik oldal egy csatornát foglal el. Négy kicsi 10..100nF kerámia kondenzátor a motorcsapok közelében, mint mindig tanácsos az RF interferencia ellen. Ezenkívül egy nagy elektrolitsapka (2200… 4700uF) a motorlap tápellátásán, ahogyan az a rajzon látható, bár nem feltétlenül szükséges, kissé korlátozhatja a tápfeszültség hullámzását (ha horrorfilmet szeretne látni, próbálja meg a Vbat szondát) oszcilloszkóppal, miközben a motorok aktívak).
Vegye figyelembe, hogy mindkét motorcsatorna ENABLE csapját az ESP32 (IO12) azonos impulzusszélességű modulált (PWM) csapja hajtja. Ennek az az oka, hogy az ESP32-CAM modul nem rendelkezik rengeteg GPIO-val (a modul vázlata referenciaként szerepel). A robot LED -jeit az IO4 vezérli, amely a fedélzeti vaku LED -jét is hajtja, ezért távolítsa el a Q1 -et, hogy a vaku LED -je ne világítson zárt házban.
A programozó gomb, a ki/be kapcsoló, a töltőcsatlakozó és a programozó csatlakozó elérhető a robot alatt. Sokkal jobb munkát végezhettem volna a programozó csatlakozónál (3,5 mm -es jack?), De a sör már nem várt. Szintén jó lenne beállítani az OTA-t.
A robot programozási módba állításához nyomja meg a programozó gombot (ez alacsony IO0 -t von le), majd kapcsolja be.
Fontos: A robot NiMH akkumulátorainak feltöltéséhez használjon laboratóriumi tápegységet (lemerült) körülbelül 14 V feszültségre, és az áramerősség legfeljebb 250 mA. A feszültség alkalmazkodik az akkumulátorok feszültségéhez. Válassza le, ha a robot forrónak érzi magát, vagy ha az akkumulátor feszültsége eléri a 12,5 V -ot. Nyilvánvaló előrelépés lenne a megfelelő akkumulátortöltő integrálása, de ez kívül esik az utasításban.
A hardver:
Kérjük, tekintse meg a képeken található megjegyzéseket is. A ház 4 M4 csavar és önzáró anya segítségével rögzíthető a robot talpára. Vegye figyelembe a távolságtartóként használt gumicsövet. Remélhetőleg ez némi felfüggesztést is ad a Duvelnek, ha az út rögösnek bizonyul. Az ESP32-CAM modul és az L298N motortábla műanyag ragadós lábakkal van felszerelve a házba (nem biztos a megfelelő angol névben), hogy ne kelljen további lyukakat fúrni. Az ESP32 szintén saját perforációs táblájára és dugaszolható tűhegyekre van felszerelve. Ez megkönnyíti az ESP32 cseréjét.
Ne felejtse el: ha külső beépített WiFi antennával készül a beépített helyett, akkor forrasztja be az antenna-kiválasztó jumpert az ESP32-CAM kártya alján.
Nyomtassa ki a felső logót a DuvelBot.svg fájlban tintasugaras matricapapírra (vagy tervezzen sajátot), és máris indulhat!
2. lépés: Programozza be a robotot
Célszerű beprogramozni a robotot, mielőtt bezárja, hogy megbizonyosodjon arról, hogy minden működik, és nem jelenik meg varázslatos füst.
A következő szoftvereszközökre van szüksége:
- Az Arduino IDE,
- Az ESP32 könyvtárak, SPIFFS (soros perifériás flash fájlrendszer), ESPAsync Webserver könyvtár.
Ez utóbbi telepíthető úgy, hogy követi ezt a randomnerdtutorial -t a "fájlok rendszerezése" szakaszig bezárólag. Tényleg nem tudnám jobban megmagyarázni.
A kód:
A kódom megtalálható:
- Egy Arduino vázlat DuvelBot.ino,
- Adatok almappája, amely tartalmazza azokat a fájlokat, amelyeket SPIFFS használatával tölt fel az ESP flash -re. Ez a mappa tartalmazza az ESP által kiszolgált weboldalt (index.html), a weboldal részét képező logóképet (duvel.png) és egy lépcsőzetes stíluslapot vagy CSS -fájlt (style.css).
A robot programozása:
- Csatlakoztassa az USB-TTL átalakítót a vázlat szerint,
- Fájl -> Megnyitás -> menjen a DuvelBot.ino mappába.
- Módosítsa hálózati hitelesítő adatait a vázlatban:
const char* ssid = "yourNetworkSSIDHere"; const char* password = "yourPasswordHere";
- Eszközök -> Tábla -> "AI -Thinker ESP -32 CAM", és válassza ki a megfelelő soros portot a számítógépéhez (Eszközök -> Port -> valami hasonló /dev /ttyUSB0 vagy COM4),
- Nyissa meg a soros monitort az Arduino IDE -ben. Miközben lenyomja a PROG gombot (ez alacsony IO0 -t húz), kapcsolja be a robotot,
- Ellenőrizze a soros monitoron, hogy az ESP32 készen áll -e a letöltésre,
- Zárja be a soros monitort (különben az SPIFFS feltöltése sikertelen),
- Eszközök -> "ESP32 Sketch Data Upload", és várja meg, amíg befejeződik,
- A programozási módba való visszatéréshez kapcsolja ki és be a PROG gombot,
- Nyomja meg a „Feltöltés” nyilat a vázlat programozásához, és várja meg, amíg befejeződik,
- Nyissa ki a soros monitort, és kapcsolja ki/be az ESP32 -t,
- Miután elindult, jegyezze fel az ip-címet (például 192.168.0.121), és válassza le a robotot az USB-TTL átalakítóról,
- Nyisson meg egy böngészőt ezen az IP -címen. Látnia kell a felületet, mint a képen.
- Választható: állítsa az ESP32 mac-címét rögzített IP-címre az útválasztóban (az útválasztótól függően).
Ez az! Olvassa el, ha szeretné tudni, hogyan működik…
3. lépés: Hogyan működik?
Most elérkeztünk az érdekes részhez: hogyan működik mindez együtt?
Lépésről lépésre megpróbálom elmagyarázni, de ne feledje, Kajnjaps nem webprogramozási szakember. Valójában egy kis webes programozás megtanulása volt a DuvelBot építésének alapfeltétele. Ha nyilvánvaló hibákat követek el, írjon megjegyzést!
Oké, miután az ESP32 be van kapcsolva, a beállításoknál megszokott módon inicializálja a GPIO -kat, és társítja őket a motor- és LED -vezérléshez használt PWM időzítőkkel. A motorvezérlésről bővebben itt olvashat, ez eléggé szabványos.
Ezután a kamera konfigurálva van. Szándékosan tartottam meglehetősen alacsony felbontást (VGA vagy 640x480), hogy elkerüljem a lassú választ. Megjegyzés: Az AI-Thinker ESP32-CAM kártya soros ram chipet (PSRAM) tartalmaz, amelyet a nagyobb felbontású kamerakockák tárolására használ:
if (psramFound ()) {Serial.println ("PSRAM megtalálva."); config.frame_size = FRAMESIZE_VGA; config.jpg_quality = 12; config.fb_count = 2; // a keretbufferek száma lásd: https://github.com/espressif/esp32-camera} else {Serial.println ("nem található PSRAM."); config.frame_size = FRAMESIZE_QVGA; config.jpg_quality = 12; config.fb_count = 1; }
Ezután inicializálja a soros perifériás flash fájlrendszert (SPIFFS):
// inicializálja a SPIFFS if (! SPIFFS.begin (true)) {Serial.println ("Hiba történt a SPIFFS telepítése közben!"); Visszatérés; }
A SPIFFS úgy működik, mint egy kis fájlrendszer az ESP32 -en. Itt három fájl tárolására szolgál: maga a weboldal index.html, egy lépcsős fájlstílus -stílus style.css és egy-p.webp
Ezután az ESP32 csatlakozik az útválasztóhoz (ne felejtse el megadni hitelesítő adatait a feltöltés előtt):
// az útválasztó hitelesítési adatainak módosítása itt: char* ssid = "yourNetworkSSIDHere"; const char* password = "yourPasswordHere"; … // csatlakozás a WiFi Serial.print -hez ("Csatlakozás a WiFi -hez"); WiFi.begin (ssid, jelszó); while (WiFi.status ()! = WL_CONNECTED) {Serial.print ('.'); késleltetés (500); } // most csatlakozik az útválasztóhoz: az ESP32 most már rendelkezik IP -címmel
Ahhoz, hogy valami hasznosat tegyünk, elindítunk egy aszinkron webszervert:
// hozzon létre egy AsyncWebServer objektumot a 80 -as portonAsyncWebServer szerver (80); … Server.begin (); // kezdje el figyelni a kapcsolatokat
Ha most beírja azt az ip -címet, amelyet az útválasztó rendelt az ESP32 -hez a böngésző címsorába, az ESP32 kérést kap. Ez azt jelenti, hogy az ügyfélnek (Önnek vagy a böngészőjének) úgy kell válaszolnia, hogy szolgáltat neki valamit, például egy weboldalt.
Az ESP32 tudja, hogyan kell válaszolni, mert a beállítás során az összes lehetséges engedélyezett kérésre adott választ regisztrálták a server.on () használatával. Például a fő weboldal vagy index (/) a következőképpen kezelhető:
server.on ("/", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("/kérés megérkezett!"); request-> send (SPIFFS, "/index.html", String (), false, processzor);});
Tehát ha az ügyfél csatlakozik, az ESP32 válaszol az index.html fájl elküldésével a SPIFFS fájlrendszerből. A paraméterfeldolgozó egy olyan funkció neve, amely előfeldolgozza a html -t, és lecseréli a speciális címkéket:
// Helyettesítőket cserél a html -ben, mint %DATA %// a megjeleníteni kívánt változókkal //
Adatok: %DATA %
String processzor (const String & var) {if (var == "DATA") {//Serial.println("in processzor! "); visszatérési karakterlánc (dutyCycleNow); } visszatérési karakterlánc ();}
Most hagyjuk, hogy a weboldal index.html magát. Általában mindig három részből áll:
- html kód: milyen elemeket kell megjeleníteni (gombok/szöveg/csúszkák/képek stb.),
- stíluskód, akár külön.css fájlban, akár… részben: hogyan kell kinézni az elemeknek,
- javascript a… szakasz: hogyan kell viselkednie a weboldalnak.
Miután az index.html betöltődik a böngészőbe (amely a DOCTYPE sor miatt tudja, hogy html), a következő sorba fut:
Ez egy css stíluslap kérése. Ennek a lapnak a helye href = "…". Tehát mit csinál a böngészője? Igaz, újabb kérést indít a szervernek, ezúttal a style.css fájlra. A szerver rögzíti ezt a kérést, mert regisztrálva volt:
server.on ("/style.css", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("css kérés megérkezett"); request-> send (SPIFFS, "/style.css", "text/css ");});
Tiszta, mi? Egyébként a href = "/some/file/on/the/other/side/of/the moon" lehet az összes böngészője számára. Ugyanilyen boldogan hozná el azt a fájlt. Nem fogok magyarázni a stíluslapról, mivel csak a megjelenést szabályozza, így itt nem igazán érdekes, de ha többet szeretne megtudni, nézze meg ezt az oktatóanyagot.
Hogyan jelenik meg a DuvelBot logó? Az index.html fájlban a következők találhatók:
amelyre az ESP32 válaszol:
szerver.on ("/duvel", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("a paplan logó kérése megérkezett!"); request-> send (SPIFFS, "/duvel.png", "image-p.webp
..egy másik SPIFFS fájl, ezúttal egy teljes kép, amint azt a válasz "image/png" jelzi.
Most elérkeztünk az igazán érdekes részhez: a gombok kódjához. Fókuszáljunk a FORWARD gombra:
ELŐRE
A class = "…" név csak egy név, amely a stíluslaphoz kapcsolja a méret, szín stb. Testreszabásához. A fontos részek a következők: onmousedown = "toggleCheckbox ('forward')" és onmouseup = "toggleCheckbox ('stop') ". Ezek képezik a gomb műveleteit (ugyanaz az ontouchstart/ontouchend esetében, de az érintőképernyők/telefonok esetében). Itt a gombművelet a toggleCheckbox (x) függvényt hívja meg a javascript részben:
function toggleCheckbox (x) {var xhr = new XMLHttpRequest (); xhr.open ("GET", "/" + x, true); xhr.send (); // tehetnénk valamit a válasszal is, ha készen állunk, de nem tesszük meg}
Tehát az előre gomb megnyomása azonnal a toggleCheckbox ('előre') hívását eredményezi. Ez a függvény ezután elindítja a "GET" XMLHttpRequest "/forward" helyet, amely ugyanúgy működik, mintha a 192.168.0.121/forward parancsot írta volna be a böngésző címsorába. Miután ez a kérés megérkezett az ESP32 -hez, azt a következők kezelik:
server.on ("/továbbítás", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("fogadva/továbbítva"); actionNow = ELŐRE; kérés-> küldés (200, "text/plain", "OK forward. ");});
Most az ESP32 egyszerűen "OK tovább" szöveggel válaszol. Ne feledje, hogy a toggleCheckBox () semmit sem tesz ezzel a válasszal (vagy várjon vele), de ez lehetséges, amint azt a kamera kódja később mutatja.
Önmagában e válasz során a program csak egy változó actionNow = FORWARD értéket állít be a gomb megnyomására adott válaszként. Most a program fő körében ezt a változót figyelik azzal a céllal, hogy felfelé/lefelé növeljék a motorok PWM -jét. A logika a következő: amíg van olyan műveletünk, amely nem STOP, addig emelje fel a motorokat ebbe az irányba, amíg el nem ér egy bizonyos számot (dutyCycleMax). Ezután tartsa fenn ezt a sebességet, amíg a actionNow nem változik:
void loop () {currentMillis = millis (); if (currentMillis - previousMillis> = dutyCycleStepDelay) {// mentse el a ciklus legutóbbi végrehajtását előzőMillis = currentMillis; // a mainloop felelős a motorok felfelé/lefelé emelkedéséért, ha (actionNow! = previousAction) {// rámpa lefelé, majd leállítás, majd a művelet megváltoztatása és a duty up növeléseCycleNow = dutyCycleNow-dutyCycleStep; if (dutyCycleNow <= 0) {// ha a dc lecsökkentése után 0, állítsa az új irányba, kezdje min. dutycycle setDir (actionNow); previousAction = actionNow; dutyCycleNow = dutyCycleMin; }} else // actionNow == previousAction rámpa felfelé, kivéve, ha STOP irány {if (actionNow! = STOP) {dutyCycleNow = dutyCycleNow+dutyCycleStep; if (dutyCycleNow> dutyCycleMax) dutyCycleNow = dutyCycleMax; } else dutyCycleNow = 0; } ledcWrite (pwmChannel, dutyCycleNow); // a motorkerékpár beállítása}}
Ez lassan megnöveli a motorok fordulatszámát, ahelyett, hogy csak teljes sebességgel indítanánk, és kiöntenénk a drága értékes paplant. Nyilvánvaló javulás lenne, ha ezt a kódot egy időzítő megszakítási rutinba helyeznénk át, de úgy működik, ahogy van.
Most, ha elengedjük a továbbítás gombot, a böngésző toggleCheckbox ('stop') hívást kap, ami kérést kap a GET /stop számára. Az ESP32 az actionNow -t STOP -ra állítja (és "OK stop" -dal válaszol), ami a főhurkot a motorok leforgatására nyitja.
Mi a helyzet a LED -ekkel? Ugyanaz a mechanizmus, de most van egy csúszka:
A javascriptben a csúszka beállítását figyeli, hogy minden változtatáskor a "/LED/xxx" lekérdezésre kerüljön sor, ahol xxx a fényerő értéke, amelyre a LED -eket be kell állítani:
var slide = document.getElementById ('slide'), sliderDiv = document.getElementById ("sliderAmount"); slide.onchange = function () {var xhr = new XMLHttpRequest (); xhr.open ("GET", "/LED/" + this.value, true); xhr.send (); sliderDiv.innerHTML = this.value; }
Ne feledje, hogy a document.getElementByID ('slide') segítségével kaptuk meg magát a csúszkaobjektumot, amelyet a -val deklaráltunk, és hogy az érték minden változáskor egy szövegelembe kerül.
A vázlatban lévő kezelő minden fényerőre vonatkozó kérést elfog a "/LED/*" használatával a kezelő regisztrációjában. Ezután az utolsó részt (egy számot) feldaraboljuk és int -re öntjük:
server.on ("/LED/ *", HTTP_GET, (AsyncWebServerRequest *kérés) {Serial.println ("led kérés érkezett!"); setLedBrightness ((request-> url ()). (5).toInt ()); request-> send (200, "text/plain", "OK Leds.");});
A fentebb leírtakhoz hasonlóan a rádiógombok vezérlik a PWM alapértelmezett értékeit beállító változókat, így a DuvelBot lassan vezethet hozzád a sörrel, ügyelve arra, hogy ne folyjon ki a folyékony arany, és gyorsan vissza a konyhába, hogy többet hozzon.
… Tehát hogyan frissül a kamera képe anélkül, hogy frissítenie kellene az oldalt? Ehhez az AJAX (aszinkron JavaScript és XML) nevű technikát használjuk. A probléma az, hogy általában az ügyfél-szerver kapcsolat rögzített eljárást követ: az ügyfél (böngésző) kérést küld, a szerver (ESP32) válaszol, az eset lezárva. Kész. Már nem történik semmi. Ha csak valahogy becsaphatnánk a böngészőt, hogy rendszeresen kérjen frissítéseket az ESP32 -től … és pontosan ezt fogjuk tenni ezzel a javascript -részlettel:
setInterval (function () {var xhttp = new XMLHttpRequest (); xhttp.open ("GET", "/CAMERA", true); xhttp.responseType = "blob"; xhttp.timeout = 500; xhttp.ontimeout = function () {}; xhttp.onload = function (e) {if (this.readyState == 4 && this.status == 200) {// lásd: https://stackoverflow.com/questions/7650587/using… // https://www.html5rocks.com/en/tutorials/file/xhr2/ var urlCreator = window. URL || window.webkitURL; var imageUrl = urlCreator.createObjectURL (this.response); // hozzon létre egy objektumot a blobból document.querySelector ("#camimage"). src = imageUrl; urlCreator.revokeObjectURL (imageurl)}}; xhttp.send ();}, 250);
A setInterval paraméterként egy függvényt vesz fel, és oly gyakran hajtja végre (itt 250 ms -onként egyszer, ami 4 képkocka/másodpercet eredményez). A végrehajtott függvény bináris "blob" kérést kér a /CAMERA címen. Ezt az ESP32-CAM kezeli a vázlatban (Randomnerdtutorials):
server.on ("/CAMERA", HTTP_GET, (AsyncWebServerRequest * kérés) {Serial.println ("kamera kérés érkezett!"); camera_fb_t * fb = NULL; // esp_err_t res = ESP_OK; size_t _jpg_buf_len = 0; uint8 * _jpg_buf = NULL; // képkocka rögzítése fb = esp_camera_fb_get (); if (! fb) {Serial.println ("A keretpuffer nem szerezhető be"); return;} if (fb-> formátum! = PIXFORMAT_JPEG)/ /már ebben a formátumban a konfigurációból {bool jpeg_converted = frame-j.webp
A fontos részek az, hogy az fb = esp_camera_fb_get () keretet jpg-re konvertálja (az AI-Thinker esetében ez már ebben a formátumban van), és elküldi a jpeg-t: request-> send_P (200, "image/jpg", _jpg_buf, _jpg_buf_len).
A javascript függvény megvárja, amíg megérkezik ez a kép. Ezután csak egy kis munka szükséges ahhoz, hogy a kapott "blob" -ot URL -re alakítsa, amely forrásként használható a kép frissítésére a html oldalon.
huh, végeztünk!
4. lépés: Ötletek és maradékok
Ennek a projektnek a célja számomra az volt, hogy csak annyi webes programozást tanuljak meg, amellyel a hardvert az internethez illeszthetjük. Ennek a projektnek számos kiterjesztése lehetséges. Íme néhány ötlet:
- Végezze el az „igazi” kamerás adatfolyamot az itt és itt leírtak szerint, és helyezze át egy második szerverre az itt leírtak szerint ugyanazon az ESP32 -n, de a másik CPU -magon, majd importálja a kamerát az 1. szerver által kiszolgált html -be…. Ennek gyorsabb kamerafrissítéseket kell eredményeznie.
- Használja a hozzáférési pont (AP) módot, hogy a robot önállóbb legyen, ahogy az itt le van írva.
- Bővítse az akkumulátor feszültségmérésével, a mély alvás képességeivel stb. Ez egyelőre nehézkes, mivel az AI-Thinker ESP32-CAM nem rendelkezik sok GPIO-val; bővítésre szorul uart és például egy slave arduino segítségével.
- Váltson macskakereső robotrá, amely időről időre kiad egy macskacsemegét egy nagy gomb mancsának megnyomásával, és tonna szép macskaképeket közvetít a nap folyamán…
Kérjük, írja meg véleményét, ha tetszett, vagy kérdése van, és köszönöm, hogy elolvasta!
Ajánlott:
Arduino - Labirintus megoldó robot (MicroMouse) Falkövető robot: 6 lépés (képekkel)
Arduino | Maze Solving Robot (MicroMouse) Falkövető robot: Üdvözlöm, Isaac vagyok, és ez az első robotom, a "Striker v1.0". Ezt a robotot egy egyszerű labirintus megoldására tervezték. A versenyen két labirintus és a robot volt képes volt azonosítani őket. A labirintusban bekövetkező egyéb változások miatt szükség lehet a
SMARS robot építése - Arduino Smart Robot Tank Bluetooth: 16 lépés (képekkel)
SMARS Robot építése - Arduino Smart Robot Tank Bluetooth: Ezt a cikket büszkén szponzorálja a PCBWAY. A PCBWAY kiváló minőségű prototípus -készítő PCB -ket készít a világ minden tájáról. Próbálja ki Ön is, és szerezzen 10 PCB -t mindössze 5 dollárért a PCBWAY -n, nagyon jó minőségben, köszönöm PCBWAY. A motorpajzs az Arduino Uno -hoz
PAPER HUNGRY ROBOT - Pringles Recycle Arduino Robot: 19 lépés (képekkel)
PAPER HUNGRY ROBOT - Pringles Recycle Arduino Robot: Ez a Hungry Robot egy másik változata, amelyet 2018 -ban építettem. Ezt a robotot 3D nyomtató nélkül is elkészítheti. Csak annyit kell tennie, hogy megvásárol egy doboz Pringles -t, egy szervo motort, egy közelségérzékelőt, egy arduino -t és néhány eszközt. Letöltheti az összes
Joy Robot (Robô Da Alegria) - Nyílt forráskódú 3D nyomtatás, Arduino Powered Robot!: 18 lépés (képekkel)
Joy Robot (Robô Da Alegria) - nyílt forráskódú 3D nyomtatott, Arduino hajtású robot !: Első díj az Instructables Wheels versenyen, második díj az Instructables Arduino versenyen, és második hely a Design for Kids Challenge versenyen. Köszönjük mindenkinek, aki ránk szavazott !!! A robotok mindenhova eljutnak. Az ipari alkalmazásoktól a
A vaj robot: az Arduino robot egzisztenciális válsággal: 6 lépés (képekkel)
A vajrobot: az Arduino robot egzisztenciális válsággal: Ez a projekt a "Rick and Morty" animációs sorozaton alapul. Az egyik epizódban Rick robotot készít, amelynek egyetlen célja a vaj elhozása. A Bruface (Brüsszeli Műszaki Kar) hallgatóiként feladatunk van a mecha