Hacking een Rumble-Robot



Hallo. Dit is mijn versie van het gebruik van een Arduino Uno om te hack een Rumble Robot, een speeltje circa 2000 en 2001. Krediet voor de start van dit project is op:
http://www.dinofab.com/rumblebot.html

Het doel is het creëren van een asielzoeker robot. Ik heb twee ping sensoren op dit. Links pingt, dan rechts, dan links, dan rechts. Deze waarden worden opgeslagen in een matrix. Dit geeft 4 waarden te gebruiken voor analyse. Het doel is om het verkeer te detecteren. Ik vond dat er enige variatie in de ping-metingen en ook de sensoren zijn niet precies uitgelijnd, is dus er een waarde voor tolerantie is. Er is een verandering in de waarde vervolgens beweging opgetreden en de robot zal bewegen naar het verkeer.

Hier is de schets. Ik heb zodat het zal cirkel en zoeken. Maar ik heb een robot om te jagen, die volgende week zal komen. Sorry de code is niet super schoon. Maar dat is een work in progress.

++++++++++++++++++++++++++++++++++++++++

Dit is om te testen hoe om functies werken te maken. Goed.
LED's knipperen prima.
Twee pingers ping en terug te keren van de afstand in cm.
Dit heeft een geheugen creatie matrix.
Nu gebruiken de afstand meten en besluiten op basis van die.

int vcount = 0;
int vSonarTime = 0; Dit zal de waarde van de tijd van de sonar-ping, oftewel de afstand
int arrSonarPin [] {} =
4,2}; Dit is links dan rechts sonar
int antwoord = 0; variabele voor iets
int sonarLeft = 0;
int sonarRight = 0;
int vTolerate = 10; Dit is de microseconden van fout in de ping die wordt genegeerd
int arrScanz [96]; Dit is waar besluiten gaan over comparePing besluiten
int arrScanzEnd = 95; einde element nummer voor matrix arrScanz
int vScanz = 0; Global var gebruikte naar recordresultaten voor scan analyse
int vMovementRight = 3; initialiseren met 3 om te zien of er een fout later
int vMovementLeft = 3; initialiseren met 3 om te zien of er een fout later
int vCloserRight = 3;
int vCloserLeft = 3;
int vStayPut = 3;

int aPoints [48]; matrix-punten en afstanden willen maken
int PointsEnd = 47;
int vPoint = 0; Dit is init zou voor gebruik als de toenemende matrixelementen waar afstanden krijgen opgeslagen.
Want dit globale is kunnen we usitilize in functies. Maar alleen StorePoint() zal wijzigen vPoint
int i; voor het tellen for-lussen
int LedA = 13; aan boord
int LedB = 12; rood
int LedC = 9; rood
int LedD = 8; groen
int greenLED = 8; makkelijker te herinneren

int arrLed [] {LedA, LedB, LedC, LedD} =;
int arrLedEnd = 3; de matrix arrLed heeft 4 leden, dus laatst is #3

int motorpinright = 10; PIN voor rechts motor rood
int motorpinleft = 11; PIN voor linker motor vooruit geel
int motorpinrevright = 5; PIN voor rechts motor omgekeerde black
int motorpinrevleft = 6; PIN voor rechts motor vooruit groen
int vMoveTime = 200; Dit is de tijd verplaatst var
int vDelayTime = 250;

VOID Setup {}
Serial.begin(9600);
pinMode(LedA,OUTPUT);
pinMode(LedB,OUTPUT);
pinMode(LedC,OUTPUT);
pinMode(LedD,OUTPUT);
pinMode (motorpinright, OUTPUT); Motor rijdt---
pinMode (motorpinleft, OUTPUT); //------------------------
pinMode (motorpinrevright, OUTPUT); //------------------------
pinMode (motorpinrevleft, OUTPUT); //------------------------
voor (ik = 0; ik < PointsEnd; i ++) {/ / noodzaak om de afstanden aPoints [] array te initialiseren
aPoints [i] = 0;
} / / End de for-lus
voor (ik = 0; ik < arrScanzEnd; i ++) {/ / noodzaak om de arrScanz [] array te initialiseren
arrScanz [i] = 0;
} / / End de for-lus

} / / void lus end

void loop {}
digitalWrite(13,LOW); laag gesteld om te starten
Serial.println ("Start in main loop");

blinxAll(arrLedEnd); Fancy Ass-functie aanroepen. Niet een externe waarde toewijst

ShowArrayContents();

BlinxOne(greenLED,100,6);

DetectMovement(); Doet pings in 3 richtingen

DecideWhichWay(); Als er geen beweging gedetecteerd dan verplaatsen en zoeken
einde de beslissing om te verhuizen

vMoveTime = 200;
Serial.Print ("Just uit sonarx. vSonarTime = ");
Serial.println(vSonarTime);
Serial.println ("van de functie blinxAll");
arrLedEnd = 3;

int vMovementRight = 3; initialiseren met 3 om te zien of er een fout later
int vMovementLeft = 3; initialiseren met 3 om te zien of er een fout later
int vStayPut = 3;

} / / einde van de lus
//+++++++++++++++++++++++++++++++++++++++++++
*** Verklaren functies ***
//+++++++++++++++++++++++++++++++++++++++++++
int sonarx (int vpin) {/ / deze functie zal de sonar module om te pingen en een retourwaarde voor de ping call
int x = 5;
int vPingDist = 0; geen onger nodig
int vDuration; , inch, cm;
x = vpin; Dit is het pin-nummer
Serial.Print ("in de sonarx en de waarde vpin is:");
Serial.Print(x);
pinMode (vpin, OUTPUT);
digitalWrite (vpin, laag);
delayMicroseconds(2);
digitalWrite (vpin, hoge);
delayMicroseconds(5);
digitalWrite (vpin, laag);

Dezelfde pincode wordt gebruikt voor het lezen van het signaal van de PING))): een hoog
Pulse waarvan de duur de tijd (in microseconden) van de verzending is
voor de ping naar de receptie van de echo off van een object.
pinMode (vpin, INPUT);
vDuration = pulseIn (vpin, hoge);

cm = microsecondsToCentimeters(vDuration);

Serial.Print ("vDuration:");
Serial.println(vDuration);

Return vDuration;
}
//+++++++++++++++++++++++++++++++++++++++++++

int microsecondsToCentimeters (int microseconden)
{
De snelheid van het geluid is 340 m/s of 29 microseconden per vierkante centimeter.
De ping reist uit en terug, zo vind je de afstand van de
we de helft van de afgelegde afstand nemen-object.
retourneren van microseconden / 29 / 2;
}

//+++++++++++++++++++++++++++++++++++++++++++
VOID blinxAll (int arrLedEndi) {}
int ivar1;

Serial.Print ("In de blinxAll functie, waarde is:");
Serial.println(arrLedEndi);
delay(100);

for (int i = 0; ik < = arrLedEndi; i ++) {}
ivar1 = arrLed [i]; / * ik is de plek in de matrix, en dit verandert elke lus.
De waarde van de matrix wordt toegewezen. Dit is het pin-nummer van de LED
dat zal outputted.* /
Serial.Print ("de waarde van ivar1 is:");
Serial.Print(ivar1);
digitalWrite(ivar1,HIGH);
delay(100);
digitalWrite(ivar1,LOW);
delay(100);
} / / Einde van de cyclus voor via array

Serial.println ("End of functie blinxAll");

} / / End function
//+++++++++++++++++++++++++++++++++++++++++++
VOID BlinxOne (int vLED, int vDelay, int numBlinks) {/ / vLED heeft keuzen van bovenaf. vDelay is
int vLED;
vDelay = 100;
Serial.Print ("In de BlinxOne functie, waarde is:");
Serial.println(vLED);
delay(vDelay);
for (int i = 0; ik < = numBlinks; i ++) {}
digitalWrite(vLED,HIGH);
delay(vDelay);
digitalWrite(vLED,LOW);
delay(vDelay);
} //End van for-lus
Serial.println ("End of functie BlinxOne");

} / / End function BlinxOne
//+++++++++++++++++++++++++++++++++++++++++++
VOID MoveAhead() {}
int ivar1 = LedD;
digitalWrite(ivar1,HIGH);

int v2MoveTime = vMoveTime;
Serial.Print ("vMoveTime MoveAhead is de moeite waard:");
Serial.println(v2MoveTime);
Dit zal gaan bot voor een tijd doorgegeven aan de functie
analogWrite (motorpinleft, 0); de linker motor stop
analogWrite (motorpinright, 0); de juiste motor stop
analogWrite (motorpinleft, 255); de linker motor stop
analogWrite (motorpinright, 255); de juiste motor stop
delay(vMoveTime);
analogWrite (motorpinleft, 0); de linker motor stop
analogWrite (motorpinright, 0); de juiste motor stop

digitalWrite(ivar1,LOW); uitschakelen van groen licht
vMoveTime = 0; voorkomen van eindeloze lussen ++ weglopers die is
}
//+++++++++++++++++++++++++++++++++++++++++++
VOID MoveBack() {}
Serial.println ("Moving terug OK!");
int v2MoveTime = vMoveTime;
Serial.Print ("vMoveTime is de moeite waard:");
Serial.println(v2MoveTime);

analogWrite (motorpinrevleft, 255); de linker motor stop
analogWrite (motorpinrevright, 255); de juiste motor stop
delay(vMoveTime);
analogWrite (motorpinrevleft, 0); de linker motor stop
analogWrite (motorpinrevright, 0); de juiste motor stop
vMoveTime = 0; voorkomen van eindeloze lussen ++ weglopers die is
}
//+++++++++++++++++++++++++++++++++++++++++++
VOID TurnRight90() {}
int v2MoveTime = vMoveTime;
Serial.Print ("vMoveTime TurnRight90 is de moeite waard:");
Serial.println(v2MoveTime);

analogWrite (motorpinrevleft, 255); de linker motor stop
analogWrite (motorpinright, 255); de juiste motor stop
delay(vMoveTime);
analogWrite (motorpinrevleft, 0); de linker motor stop
analogWrite (motorpinright, 0); de juiste motor stop
vMoveTime = 0; voorkomen van eindeloze lussen ++ weglopers die is
}
//+++++++++++++++++++++++++++++++++++++++++++

VOID TurnLeft45() {}
int. vMoveTime2 = (vMoveTime/2);
Serial.Print ("vMoveTime TurnLeft45 is de moeite waard:");
Serial.println(vMoveTime2);

analogWrite (motorpinleft, 0); Start links motor
delay(vMoveTime2); Dit is de helft om de beurt
analogWrite (motorpinright, 255); Start rechts motor
delay(vMoveTime);
analogWrite (motorpinleft, 0); de linker motor stop
analogWrite (motorpinright, 0); de juiste motor stop
vMoveTime = 0; voorkomen van eindeloze lussen ++ weglopers die is
}
//+++++++++++++++++++++++++++++++++++++++++++

VOID TurnRight45() {}
int. vMoveTime2 = (vMoveTime/2);
Serial.Print ("vMoveTime TurnRight45 is de moeite waard:");
Serial.println(vMoveTime2);

analogWrite (motorpinleft, 255); Start links motor
delay(vMoveTime);
analogWrite (motorpinright, 0); Start rechts motor
delay(vMoveTime2); Dit is de helft om de beurt
analogWrite (motorpinleft, 0); de linker motor stop
analogWrite (motorpinright, 0); de juiste motor stop
vMoveTime = 0; voorkomen van eindeloze lussen ++ weglopers die is
}

//+++++++++++++++++++++++++++++++++++++++++++
VOID TurnLeft90() {}
int v2MoveTime = vMoveTime;
Serial.Print ("vMoveTime TurnLeft90 is de moeite waard:");
Serial.println(v2MoveTime);

analogWrite (motorpinleft, 255); de linker motor stop
analogWrite (motorpinrevright, 255); de juiste motor stop
delay(vMoveTime);
analogWrite (motorpinleft, 0); de linker motor stop
analogWrite (motorpinrevright, 0); de juiste motor stop
vMoveTime = 0; voorkomen van eindeloze lussen ++ weglopers die is
}
//+++++++++++++++++++++++++++++++++++++++++++
VOID AllStop() {}
analogWrite (motorpinleft, 0); de linker motor stop
analogWrite (motorpinright, 0); de juiste motor stop
analogWrite (motorpinrevright, 0); juiste rev motor stoppen
analogWrite (motorpinrevleft, 0); linker rev motor stoppen

}
//+++++++++++++++++++++++++++++++++++++++++++
functie StorePoint slaat puntenwaarden in een array
VOID StorePoint () {}
Als (vPoint < = PointsEnd) {}
aPoints [vPoint] = sonarx(svar); dit ergens een functie maken
vPoint ++; Increment vPoint variabele
}
else {}
vPoint = 0;
aPoints [vPoint] = sonarx(svar); dit ergens een functie maken
}
}
//+++++++++++++++++++++++++++++++++++++++++++
functie StoreScanz
VOID StoreScanz (int vfScan) {}
Als (vScanz < = arrScanzEnd) {}
arrScanz [vScanz] = vfScan;
vScanz ++; _ / / verhogen de vScanz de teller
} else
{
vScanz = 0;
arrScanz [vScanz] = vfScan;
}
}
//+++++++++++++++++++++++++++++++++++++++++++
ongeldig get4pings() {}
2 sets van links en rechts waarden krijgt.
voor (int f = 0; f < = 1; f ++) {}
Doe de ping-functie, eerst links dan rechts.
voor (int b = 0; b < = 1; b ++) {}
antwoord = arrSonarPin [b]; Kies de links dan rechts ping pin: 4 is nu verlaten
vSonarTime = sonarx(svar); Bel functie sonarx voor het meten van de tijd van de afstand van de ping.
Deze waarde toe te wijzen aan vSonarTime is waarschijnlijk nutteloos
StorePoint(); sonarx functie heet in deze functie vPoint is een wereldwijde Var

de huidige afstand wordt opgeslagen in een array-element
if(b==0) {}
Serial.Print ("sonarx linkerhand vPoint waarde toegewezen =");
Serial.println(vPoint); vPoint is de globale variabele te gebruiken.
}
else {}
Serial.Print ("sonarx rechterhand vPoint waarde toegewezen =");
Serial.println(vPoint); vPoint is de globale variabele te gebruiken.
} / / end if else
} / / einde van for-lus. Twee waarden toegewezen in memory array. 2 sets van linker- en waarden.
} / / End de for-lus die 4 waarden krijgt
} //End get4 functiewaarden
//++++++++++++++++++++++++++++++++++++++++++++
Een functie voor het afdrukken van de inhoud van de matrix.

VOID ShowArrayContents() {}
Dit wordt gebruikt voor diagnostiek bij het oplossen van problemen.
voor (ik = 0; ik < = PointsEnd; ik ++) / / print uit de matrix van gemeten afstanden
{
Serial.Print ("ik =");
Serial.Print(i);
Serial.Print ("aPoints waarde is =");
Serial.Print(aPoints[i]);
Serial.println();
} / / End de for-lus.
} / / End function ShowArrayContents
//+++++++++++++++++++++++++++++++++++++++++++++
int comparePings() / / als we de positie van de laatste array element geschreven weten, dan kunnen we vergelijken e.e.a.
{/ / start van functie
int s = 1; Dit zal alleen gaan door eens.
int t = 2;
int vComparePingsLD = abs ((aPoints[vPoint-1]) - (aPoints[vPoint-3])); Hieruit blijkt ' D'epth verkeer
int vComparePingsRD = abs ((aPoints[vPoint-0]) - (aPoints[vPoint-2]));
int vComparePingsRC = abs ((aPoints[vPoint-0]) - (aPoints[vPoint-1])); Dit toont welke kant heeft ' C'losest ping
int vComparePingsLC = abs ((aPoints[vPoint-3]) - (aPoints[vPoint-4]));

Serial.Print ("vComparePingsLD waarde is:");
Serial.println (vComparePingsLD);
Serial.Print ("vComparePingsRD waarde is:");
Serial.println (vComparePingsRD);
Serial.Print ("vComparePingsRC waarde is:");
Serial.println (vComparePingsRC);
Serial.Print ("vComparePingsLC waarde is:");
Serial.println (vComparePingsLC);

terwijl (s < t) {/ / de resaon te kijken er is een tijdje lus werkte slechts eenmaal.
Als ((aPoints [vPoint-1] == aPoints[vPoint-3]) || (vComparePingsLD < = vTolerate))
{//if die eqivalent zijn dan is er geen beweging naar of uit de buurt van pinger
arrScanz [vScanz] = 0; geen beweging
Serial.Print ("de linkerkant diepte punten zijn gelijk:");
Serial.Print (aPoints[vPoint-3]);
Serial.Print ("");
Serial.println (aPoints[vPoint-1]);
vScanz ++;
vScanz ++;
}
else {}
vMovementLeft = 1;
arrScanz [vScanz] = 1; Er was verkeer
vScanz ++;
vScanz ++;
}

Als (((aPoints[vPoint]) == (aPoints[vPoint-2])) || (vComparePingsRD < = vTolerate))
{//if die eqivalent zijn dan is er geen beweging naar of uit de buurt van pinger
arrScanz [vScanz] = 0; geen beweging
Serial.Print ("de rechterkant diepte punten zijn gelijk:");
Serial.Print (aPoints[vPoint-2]);
Serial.Print ("");
Serial.println (aPoints[vPoint]);
vScanz ++;
}
else {}
vMovementRight = 1;
arrScanz [vScanz] = 1; Er was verkeer
vScanz ++;
vScanz ++;
}

Als (((aPoints[vPoint]) == (aPoints[vPoint-1])) || (vComparePingsRC < = vTolerate))
{//check om te zien welke manier heeft dichter object
Serial.Print ("de nieuwste twee afstanden van links en rechts zitten:");
Serial.Print (aPoints[vPoint-1]);
Serial.Print ("vervolgens rechtsaf:");
Serial.println (aPoints[vPoint]);
vScanz ++;
}
else {}
Als ((aPoints [vPoint - 1]) < (aPoints[vPoint])) {/ / start als
vCloserLeft = 1;
vCloserRight = 0;
} / / end als
anders
{
vCloserLeft = 0;
vCloserRight = 1;
arrScanz [vScanz] = 1; Er was verkeer
vScanz ++;
vScanz ++;
} / / end anders
} / / end anders

Als (((aPoints[vPoint-3]) == (aPoints[vPoint-4])) || (vComparePingsLC < = vTolerate))
{//check om te zien welke manier heeft dichter object
Denk niet dat ik dit op dit moment nodig hebben. Hmmmm
Serial.Print ("de oudere twee afstanden van links en rechts zitten:");
Serial.Print (aPoints[vPoint-4]);
Serial.Print ("vervolgens rechtsaf:");
Serial.println (aPoints[vPoint-3]);
vScanz ++;
}
anders
{
arrScanz [vScanz] = 1; Er was verkeer
vScanz ++;
}
eind als
s+ +; _ / / verhogen voor de while lus
} //end de terwijl functie
delay(500); Om mij te laten lezen de seriële Monitor. U kunt deze later verwijderen.
} / / einde van functie
//++++++++++++++++++++++++++++++++++++++++++++
VOID DetectMovement() {//Does pings in 3 direcctions
left45 ping gaan dan gaan right45 (oftewel center) dan right45 dan beslissen of er beweging is.
int s = 0;
int t = 2; Dit kan worden aangepast voor meer scans
int fDelay = 100; intern nummer voor de vertraging tussen scans
vMoveTime = 500; Dit is een globale variabele die een hoop is veranderd
TurnLeft45(); Dit is de eerste arbitary zet. Maakt u de scan gegevens gemakkelijker sorteert.
Serial.println ("Turn left45, get-waarden");

terwijl (s < t) {}
get4pings();
delay(fDelay);
comparePings(); Wanneer dit heet zal dan de vergelijkingen beslissen beweging of geen beweging

s = s+ +;
TurnRight45();
Serial.println ("Turn right45, get-waarden");
} / / end terwijl
s = 0; Reset de functie variabele

Vergelijken de verzamelde waarden.

delay(fDelay);

} / / Einde van DetectMovement functie
//++++++++++++++++++++++++++++++++++++++++++++
VOID DecideWhichWay() {}

Als (aPoints [vPoint] > 200) {}
vMoveTime = (aPoints[vPoint]/10); geeft een schaal om te gebruiken op basis van afstand
}
else {/ / te dicht zo beurt alleen
vMovementLeft = 0;
vMovementRight = 0;
}

Als (vMovementLeft == 1) {}
TurnLeft45 ();
MoveAhead ();
} / / end als
else if (vMovementRight == 1) {}
TurnRight45 ();
MoveAhead ();
} //
else if (vStayPut == 0) {}
vMoveTime = vMoveTime;
MoveAhead();
} //

else {/ / blijven op hun plaats, maar juiste 90 om te scannen op nieuwe gebied draaien.
TurnRight90();
AllStop();
} / / end anders

} / / End function DecideWhichWay
//+++++++++++++++++++++++++++++++++++++++++++++

Gerelateerde Artikelen

Hoe Hack een Apple Time Capsule met een Raspberry Pi

Hoe Hack een Apple Time Capsule met een Raspberry Pi

Invoering van de "Pi-Capsule." Het is momenteel de enige Apple Time Capsule die u op uw TV aansluiten kunt..., betekent dit dat het een Apple TV? ;-)OK, ok, laten we zeggen dat je hebt een oude Apple Time Capsule rond leggend dat niet meer werkt
Hack een Toaster Oven voor Reflow solderen

Hack een Toaster Oven voor Reflow solderen

als ik ernstiger in mijn elektronica hobby krijgen, ik moet werken met meer SMD componenten. Sommige onderdeelpakketten zijn zeer moeilijk of onmogelijk om te solderen met een traditionele soldeerbout. U kunt dit probleem oplossen, besloten heb ik om
Een praktische Robot

Een praktische Robot

ik noem het een praktische robot om een aantal redenen. Kan het maken met behulp van de tools van elke dag dat de meeste mensen die rond het huis werken zou hebben. Met behulp van veel overtollige items is de kosten laag gehouden. De robot de arm hij
De Crawler van de tapijt - een BEAM Robot.

De Crawler van de tapijt - een BEAM Robot.

De Crawler van tapijt is een kleine robot die zijn weg over uw vloer zal schudden.  Bekijk de video en u zult zien hoe het kreeg zijn naam (dat, en ik ben een oude prog-rock fan in hart!).BEAM staat voor elektronica, esthetiek, biologie, mechanica, e
Een barman robot--Doggie4

Een barman robot--Doggie4

De robot die we gemaakt is een barman robot die we ontworpen om te dienen eten en drinken in een bar. Wij noemden het Doggie4. De robot is verdeeld in vier lagen. De onderkant (de vierde laag) is een station chassis, uitgerust met twee wielen en twee
Een eenvoudige robot mechanisme

Een eenvoudige robot mechanisme

Een eenvoudige robot mechanismeEen eenvoudige robot.
Hoe Hack een Wifi met behulp van Kali Linux 2.0

Hoe Hack een Wifi met behulp van Kali Linux 2.0

Hoe hack een wifi met behulp van kali linux 2.0. De l van deze tutorial zal u tonen hoe te kraken van wifi wachtwoorden een woordenlijst met Kali Linux 2.0.Stap 1: Controleer hoe Hack hetStap 2: stappenVoel je vrij om een commentaar & suggesties (bv.
Een zachte robot grijper voor de MeArm

Een zachte robot grijper voor de MeArm

Zachte robotica is een jonge veld van robotica waardoor robots uit zachte materialen. Veel zachte robotics projects robotica projecten die er weliswaar volledig zacht zijn, zal zachte robotica zijn grootste gevolgen wanneer gecombineerd met harde rob
Hugbot - een zachte Robot die kleine knuffels geeft

Hugbot - een zachte Robot die kleine knuffels geeft

Hugbot is een zachte robot waardoor kleine knuffels. Haar armen zijn gemaakt van aangepaste 3D gedrukte wervels en gedreven door visserij draad dat is schroefdraad door middel van de wervels te stappenmotoren gecontroleerd door een Arduino in haar li
Hack een Toilet voor gratis Water - geïnspireerde versie.

Hack een Toilet voor gratis Water - geïnspireerde versie.

Dit Instructable is een stap voor stap beschrijving van het proces van het toevoegen van een gootsteen boven toilet zodat het gebruik van het schone water voordat het gaat in de kom en terug in de stortbak van de wc.Ik was geïnspireerd door de post o
Rijden een Roomba-robot van Sprinkhaan met behulp van computer-visie

Rijden een Roomba-robot van Sprinkhaan met behulp van computer-visie

Roomba robots zijn geweldig en dat weten we allemaal. Er zijn nogal een paar tutorials die er op welke manier voor kappen hen en miljoenen verschillende manieren om ze te bestrijden. Als ik werk veel met Grasshopper en Rhino besloten heb ik om mijn e
LDRs + Arduino = een eenvoudige robot die het licht kan voelen!

LDRs + Arduino = een eenvoudige robot die het licht kan voelen!

Een LDR is een Light Dependent Resistor en heeft vele toepassingen, bijvoorbeeld een photocel dat wanneer de lichten van uw huis kunt schakelen zijn donker buiten.Een interessante manier om te begrijpen hoe het werkt is het lezen van haar waarden met
Het ontwerpen en bouwen van een bestrijding robot

Het ontwerpen en bouwen van een bestrijding robot

Combat robots zijn onderhoudend en vermakelijk sinds voordat ze populair op Comedy Central waren. Een tijdje terug ik ondernam de uitdaging van de bouw van een paar van bestrijding robots (een 30 pond en een 220lb). Ongeacht de grootte van de machine
DIY: How to Build een WiFi Robot Spybot

DIY: How to Build een WiFi Robot Spybot

wij zal u tonen hoe te bouw een wifi-robot / spybot vanaf nul. Het is een zeer ongecompliceerd project en kan gemakkelijk door een intermediaire robot bouwer worden behandeld. Ter voltooiing van de robot, duurt het een paar uur.Video van de totale ro