Zelfgemaakte Cleanning Robot met Bluetooth (4 / 5 stap)

Stap 4: De Code


DE BIBLIOTHEKEN:

De "SweeperBot" maakt gebruik van draad, I2Cdev, TimerOne (voor onderbrekingen), Adafruit Sensor, HMC5883 en LCD bibliotheken. U kunt het downloaden van het Zip-bestand, waarin de code voor de Arduino, en alle bibliotheken. Bevat ook de Bluetooth-project voor Windows Phone.

DE WINDOWS PHONE 8.1 CODE:

Het project waarmee de robot via Bluetooth van de Windows Phone werd aangepast van een voorbeeld beschikbaar op het internet. Het werd gewijzigd om vier knoppen, één naar elke richting. Omhoog, omlaag, links en rechts. Elke knop een brief sturen naar de robot, respectievelijk U, O, L en R. Wanneer de robot deze ontvangt, maakt het een van de volgende handelingen:

  • U - de robot zal de richting te volgen ongecompliceerd; instellen
  • D - de robot zal ingaan op de rug en rechtdoor;
  • L - de robot zal de richting te volgen precies 90 graden links van waar het is op dit moment instellen "op zoek";
  • R - de robot zal de richting te volgen precies 90 graden vanaf waar het is op dit moment instellen "op zoek";

De manier waarop die de robot deze opdrachten verwerkt kan worden veranderd met de code op de Arduino. Het is mogelijk om toe te voegen meer knoppen om te schakelen van de robot, of om het te stoppen of zelfs om het te maken gaan achteruit. Deze code is slechts een voorbeeld. Het is ook mogelijk te maken van soortgelijke programma's naar andere apparaten, zoals Androids een voor IOS. Het enige wat je hoeft te sturen van de robot zijn deze brieven - U, D, L of R.

 private async void RedButton_Click_1(object sender, RoutedEventArgs e) { string command = "U"; await connectionManager.SendCommand(command); } private async void GreenButton_Click_1(object sender, RoutedEventArgs e) { string command = "L"; await connectionManager.SendCommand(command); } private async void YellowButton_Click_1(object sender, RoutedEventArgs e) { string command = "R"; await connectionManager.SendCommand(command); } private async void RedButton_Copy_Click(object sender, RoutedEventArgs e) { string command = "D"; await connectionManager.SendCommand(command); } 

Voor het implementeren van deze code naar uw Windows Phone zal u Visual Studio en een ontwikkelaar ontgrendeld telefoon. Dit kan worden gedaan na de instructies op deze koppeling.

DE ARDUINO-CODE:

In samenvatting is de belangrijkste logica van de robot als volgt:

  1. Afstand tot het dichter bij object gevonden in elk van de 6 possibles sensoren;
  2. Gedrag van de robot proces afstanden en punt gewenste richting met een vector X, Y (echter als een bericht wordt ontvangen van de smartphone, stap 2 is vervangen door de richting gestuurd van het apparaat);
  3. Digitale kompas geeft gaat het richting de robot, om te controleren de wielen;
  4. Informatie X', Y' van kompas is genormaliseerd naar ruimte [-1,1];
  5. Kruisproduct tussen vector van gewenste richting en de werkelijke richting vindt fout tussen hen;
  6. PID-methode berekent PWM (kracht) elke gelijkstroommotor voor de twee wielen (2WD);
  7. Onderbreking activeert PWM;

Als het project geëvolueerd, ik heb de standaard bibliotheek beschikbaar op GitHub ontdekt voor de ultrasone sensoren conflicteert met de PWM-activering van de motoren, waren omdat ze beide de zelfde timer gebruikt. Als dit project gebruiken 5 pinnen voor het configureren van de PWM van de drie DC-motoren (en dit alleen mogelijk is omdat het tapijt sweeper alleen om één richting draait), en meer 7 naar de sensoren, die het micro-controller moet worden voortdurend te controleren als de lezing werd ontvangen, was het niet kunnen gebruiken van het materiaal beschikbaar op internet.

Dus, om conflicten te voorkomen, deze is geconfigureerd alleen de timer 1-interrupt. De Arduino via deze onderbreking, kunt controleren of er lezingen op elke sensor was: als niet, het verhoogt een variabele aan elk van hen, die worden gebruikt als parameter voor het vinden van de afstand tot het object.

 void callback() { //callback is the interruption name noInterrupts(); //if no reading, increases variable sonarCount[n], where n is the number of sensor if ((sonar[0] == 1) && (digitalRead(ECHO))) sonarCount[0]++; //if there is readind on that sensor, sonar[n] = 2 accuses object found if ((sonar[0] == 1) && (!digitalRead(ECHO)) && (sonarCount[0] > 0)) sonar[0] = 2; 

Ook binnen deze onderbreking gooit het volle kracht aan de motor. Als er al een aantal onderbrekingen die groter is dan het aantal PWM_R of PWM_L variabelen, dan gooit het nul potentie die motor.

 if (PWMCount == 0) { if (PWML) { //if pwm left is positive then turn to a certain way digitalWrite(MOTOR + 2, HIGH); digitalWrite(MOTOR + 3, LOW); } else { //else turn to the other side the left motor digitalWrite(MOTOR + 2, LOW); digitalWrite(MOTOR + 3, HIGH); } (...) if (PWMCount >= abs(PWM_L)) { //if the counter equals the power we want digitalWrite(MOTOR + 2, LOW); //shut down both pins of this motor digitalWrite(MOTOR + 3, LOW); } (...) PWMCount++; //increases counter if (PWMCount == 250) PWMCount = 0; //if counter equals maximum value we want Timer1.attachInterrupt(callback); //250 equals 100% power } 

Tijdens de hoofdlus blijft de robot zoeken van obstakels en berekenen van routes te vermijden of te wijzigen het pad. Als de ontwikkelaar wil potentiële velden controle methode configureren of wijzigen van de robot gedrag, hij gewoon moeten werken een beter obst()-functie. De andere onderdelen van het programma noodzakelijk zijn en hoeft niet te worden gewijzigd. Wanneer de robot ontvangt een bericht via Bluetooth, het stopt met het vermijden van hindernissen en luister gewoon voor gebruikersinvoer.

 void loop() //main loop { lcd.clear(); //clears previous messages on lcd delay(10); search(); //search obstacles and saves the distance value to each sensor readings(); //reads compass and calculates the error from its desired direction calcPWM(); //calculates the PWM for each motor based on PID if (!mensagem) { //message from Bluetooth? if not, continue doing this obst(); //here is where the robot defines its behavior } //and where it defines the direction it want to go (...) 

Uit alle delen van de code, alle van hen vrij basic zijn, de slechts één functie die is interessant om te nemen nota hier, is de readings(). Erin haalt de robot de waarde op X, Y en Z voor de huidige positie op het digitale kompas. Dus, hoe om te zetten die lezing in iets dat maakt de robot weet aan welke richting het is op zoek?

Eerst krijg je de ruwe waarden:

 double rawX = event.magnetic.x; double rawY = event.magnetic.y; double rawZ = event.magnetic.z; 

Vervolgens controleren of de robot op het juiste vliegtuig. Dit kan worden zien als de Z (loodrechte as) met een waarde tussen een bepaald klein bereik

 if ((rawZ > Zprim + 10) || (rawZ < Zprim - 10)) return; //if not right, return 

Nu is het tijd om te normaliseren van de X- en Y-waarden met een spatie tussen [-1,1], om te berekenen sin() en cos() van deze waarden.

 //Ymin, Ymax, Xmin and Xmax are obtained when the calibration occurs vector[1] = ((rawY) - ((Ymax + Ymin) / 2)) / ((Ymax - Ymin) / 2); vector[0] = ((rawX) - ((Xmax + Xmin) / 2)) / ((Xmax - Xmin) / 2); 

We maken nu vectorOBJ [n] een bidirectionele vector naar waar, over het plan, we willen de robot om te gaan. We moeten dus, om te zoeken naar de fout tussen twee vectoren maken de cross product tussen hen beide. De resultaatwaarde is een andere aanvalsvector, maar loodrecht op beide wijzen omhoog of omlaag, afhankelijk van het teken.

 error = (vectorOBJ[0] * vector[0] + vectorOBJ[1] * vector[1]) / (sqrt(vectorOBJ[0] * vectorOBJ[0] + vectorOBJ[1] * vectorOBJ[1]) * sqrt(vector[0] * vector[0] + vector[1] * vector[1])); error = (acos(error)) * 180 / PI; //from rad to degrees //find out the way the result vector is pointing sentido = vector[0] * vectorOBJ[1] - vector[1] * vectorOBJ[0]; if (sentido > 0) error = -error; 

Gerelateerde Artikelen

Gids voor beginners aan de opbouw van de Arduino robots met Bluetooth en Android

Gids voor beginners aan de opbouw van de Arduino robots met Bluetooth en Android

In deze tutorial gaan we om te gaan over het bouwen van een Arduino robot die kan worden aangestuurd via bluetooth met een Android telefoon/tablet. Dit is een beginnersgids die gaat kort over het proces van bedrading en programmeren van uw robot.Stap
R2D2 Robot met Bluetooth en geluid

R2D2 Robot met Bluetooth en geluid

Dit zal u tonen hoe maak je eigen robot bluetooth-gecontroleerde met aangepaste geluidseffecten. Zoals hierboven gezien, ouderwets ik mij te laten uitzien als R2D2.Onderdelenlijst1 x Arduino Uno1 x Adafruit Wave Shield (zul je om te solderen dit same
PC Controlled Bluetooth Robot (met een GUI!)

PC Controlled Bluetooth Robot (met een GUI!)

In dit Instructable ik zal u tonen hoe te bouwen van een robot die wordt beheerd via Bluetooth met behulp van een toetsenbord, heeft een grafische gebruikersinterface gebouwd met verwerking dat wordt weergegeven de invoer van het toetsenbord en eigen
JabberBot! De Arduino robot met een ATMega hersenen en bluetooth braun! :-)

JabberBot! De Arduino robot met een ATMega hersenen en bluetooth braun! :-)

JabberBot wordt beheerd via een Android applicatie via een bluetooth seriële verbinding.De ingewanden van het zijn gebaseerd op een I2C-aanpassing van de Adafruit, WaveShield en MotorShield.De bluetooth-module is een Bluetooth metgezel Silver van Spa
Gesture control car(robot) met Arduino en Android(bluetooth)

Gesture control car(robot) met Arduino en Android(bluetooth)

Hallo mensen,Hier is een interessant project voor alles wat je daar creatieve geesten. We gaan om een android telefoon gecontroleerde RC auto te bouwen.Niets zou zijn meer fascinerend dan extern gecontroleerde auto. Deze maakt gebruik van Bluetooth v
Bluetooth controlled robot met spy camera's draadloos

Bluetooth controlled robot met spy camera's draadloos

In deze instructables die ik u hoe tonen zal te maken is draadloze robot gecontroleerd met Bluetooth module.the beste eigenschap van deze robot draadloze camera werkt via wiffi.in boven de afbeelding u de werken van mijn telefoon ziet als camera.my t
Zelfgemaakte Scara Robot Arm Robotic Draw met Arduino Control

Zelfgemaakte Scara Robot Arm Robotic Draw met Arduino Control

Zelfgemaakte Scara Robot Arm Robotic vestigen controle van de Arduino DIY Laser graveren Frame 3D Printer, PlotterMaterialen:1 stk 57 mm stappenmotor 1.8 graden nemen van oude fotokopie machine1 stk 42 mm stappenmotor 1.8 graden nemen van oude fotoko
Hoe bijhouden van uw Robot met OpenCV

Hoe bijhouden van uw Robot met OpenCV

UPDATE: Laat maken Robots, mijn huis digitale hackerspace, werd gekocht door RobotShop. Ik wil niet ingaan, maar de nieuwe eigenaren verboden mezelf en de meeste van de ervaren leden. Dat gezegd, allermeest naar de verbinding er gebroken zal worden.
Baldroid v3 Balancing Robot met Actobotics onderdelen en IOIO-OTG

Baldroid v3 Balancing Robot met Actobotics onderdelen en IOIO-OTG

Hallo, na het ontwerpen van een paar prototypes met een Android telefoon + IOIO + OTG module heb ik besloten om te bouwen van een afgewerkt product dat met behulp van onderdelen en componenten van Actobotics / Servocity.com... Naast de kwaliteit van
Doolhof van Oplosser Robot, met behulp van kunstmatige intelligentie met Arduino

Doolhof van Oplosser Robot, met behulp van kunstmatige intelligentie met Arduino

(Als je dit Instructable, vergeet dan niet te stemmen (boven: rechts hoek vlag). Rex, de Robot concurreert op ROBOTICA en sensoren wedstrijden. Heel hartelijk bedankt! ;-)Dit Instructable werd ontwikkeld na mijn laatste project: lijn volgeling Robot
Maak een eenvoudige draadloze RF robot met behulp van Arduino!

Maak een eenvoudige draadloze RF robot met behulp van Arduino!

UPDATE: IK HEB JOYSTICK-CONTROLE TOEGEVOEGD AAN DEZE ROBOT. GELIEVE TE VERWIJZEN NAAR DE STAP 7, ALS U WILT BEPALEN UW ROBOT VIA JOYSTICK.HalloDit is mijn eerste instructable en in deze tutorial, I 'm gonna Toon u hoe te bouwen van een eenvoudige dra
Maken van een Robot met Camera kleurherkenning

Maken van een Robot met Camera kleurherkenning

Hallo! Dit is voor groep 18 jaar of ouder.Dit instructable begeleidt u stapsgewijs door het bouwen van een robot met kleurherkenning met behulp van een camera en een servo. De robot die zal ik bouwen heeft ook servo's voor wapens, maar ze zijn niet n
Maak een draadloze Robot met een Android telefoon

Maak een draadloze Robot met een Android telefoon

In dit Instructable we gonna een MouseBot bouwen.De MouseBot is een klein draadloos arduino robot die u met een computer beheren kunt. Het vereist geen een Wi-Fi-module. In plaats daarvan gebruikt het een android telefoon zelf verbinden met het inter
2-wiel Self Balancing Robot met behulp van de Arduino en MPU6050

2-wiel Self Balancing Robot met behulp van de Arduino en MPU6050

2-wiel Self Balancing Robot met behulp van de Arduino en MPU6050.Arduino als de controller en de sensor MPU6050 gebruiken om te bepalen van het evenwicht. Gewoon een eenvoudige seriële Bluetooth module toevoegen en een Bluetooth seriële Controller AP