In de wereld wordt elke dag steeds populairder onder robotreinigers. Dankzij zulke kleine helpers wordt het huis veel schoner en wordt er veel minder moeite gedaan om schoon te maken. Er zijn veel verschillende modificaties van robots, ze verschillen allemaal in functionaliteit, grootte en andere parameters.
Dit artikel zal met name een voorbeeld bekijken van hoe
doe het zelf U kunt een eenvoudige robot maken, die zelf indien nodig de kamer zal stofzuigen. De controller wordt hier gebruikt als het "brein"
Arduino.
Materialen en gereedschappen voor de fabricage van de robot:- board dat de werking van motoren bestuurt (Arduino motor shield);
- Arduino-bord;
- twee motoren met versnellingen (motoren op 3 volt en een rotatiesnelheid van ongeveer 100 tpm.);
- wielen (kunnen gemaakt zijn van aluminium blikjes;
- een koeler van een computervoeding (zowel mogelijk op 5V als 12V);
- 5V voeding (batterij);
- draden en plaat voor installatie van radio-elementen;
- om de koffer te maken heb je een plastic bak nodig;
- Nog een kleine container voor het maken van een afvalbak;
- hete lijm;
- magneten;
- karton.
Het fabricageproces van de robot:
Eerste stap. Software onderdeel van de robot en schets:
Het hart van de robot is de Arduino-controller. Om het te programmeren heb je een computer en speciale software nodig.
Om de schets naar het bord te downloaden, heb je het Arduino IDE-programma nodig. Hieronder kun je de programmacode van de robot nemen en het hoofdcircuit bekijken.
/*
Programma voor het besturen van een robot met twee motoren.
De robot draait wanneer motoren hun snelheid en richting veranderen.
Voorbumpers aan de linker- en rechterkant detecteren obstakels.
Ultrasone sonars kunnen worden aangesloten op analoge ingangen (getest op LV-MaxSonar-EZ1):
- plaats pinnen in array sonarPins in de volgende volgorde: links, rechts, voorkant, anderen
Voorbeelden:
1. alleen linker en rechter sonars verbonden met pinnen 2 en 3: sonarPins [] = {2,3}
2. linkse, rechtse en voorste sonars aangesloten op pinnen 2, 3 en 5: sonarPins [] = {2,3,5}
3. alleen voorste sonar aangesloten op pin 5: sonarPins [] = {-1, -1.5}
4. alleen linker sonar aangesloten op pin 2: sonarPins [] = {2}
5. alleen rechter sonar aangesloten op pinnen 3: sonarPins [] = {-1,3}
6.5 sonars verbonden met pinnen 1,2,3,4,5: sonarPins [] = {1,2,3,4,5}
Motorafscherming wordt gebruikt om motoren te laten draaien.
*/
const int Baud = 9600; // UART-poortsnelheid
// Sonar-eigenschappen
int sonarPins [] = {1, 2}; // Analoge pin-nummers naar sonarsensor Pin AN
const lang MinLeftDistance = 20; // Minimaal toegestane linker afstand
const lang MinRightDistance = 20; // Minimum toegestane juiste afstand
const long MinFrontDistance = 15; // Minimaal toegestane afstand vooraan
const int SamplesAmount = 15; // meer samples - soepeler meten en grotere vertraging
const int SonarDisplayFrequency = 10; // toon slechts een van deze regels - niet allemaal
int sonarDisplayFrequencyCount = 0;
const lange factor = 2,54 / 2;
lange monsters [sizeof (sonarPins)] [SamplesAmount];
int sampleIndex [sizeof (sonarPins)];
// rechterkant
const int pinRightMotorDirection = 4; // dit kan op het motorscherm worden gemarkeerd als "DIR A"
const int pinRightMotorSpeed = 3; // dit kan op het motorschild worden gemarkeerd als "PWM A"
const int pinRightBumper = 2; // waar de rechterbumper is aangesloten
// linkerkant
const int pinLeftMotorDirection = 7; // dit kan op het motorscherm worden gemarkeerd als "DIR B"
const int pinLeftMotorSpeed = 6; // dit kan op het motorscherm worden gemarkeerd als "PWM B"
const int pinLeftBumper = 8; // waar de rechterbumper is aangesloten
// commentaar volgend 2 regels als Motor Shield breekt
// const int pinRightMotorBreak = PUT_BREAK_PIN_HERE; // dit kan op het motorschild worden gemarkeerd als "BREAKE A"
// const int pinLeftMotorBreak = PUT_BREAK_PIN_HERE; // dit kan op het motorscherm worden gemarkeerd als "BREAK B"
// velden
const int turnRightTimeout = 100;
const int turnLeftTimeout = 150;
// stel in teller hoe lang een motor terugloopt: N / 10 (in milliseconden)
int countDownWhileMovingToRight;
int countDownWhileMovingToLeft;
// Initialisatie
ongeldige setup () {
Serial.begin (Baud);
initPins ();
// uncomment volgende 4 regels als Motor Shield breekt
// pinMode (pinLeftMotorBreak, OUTPUT);
// pinMode (pinRightMotorBreak, OUTPUT);
// digitalWrite (pinLeftMotorBreak, LOW); // pauzes uitschakelen
// digitalWrite (pinRightMotorBreak, LOW); // pauzes uitschakelen
runRightMotorForward ();
runLeftMotorForward ();
startMotors ();
}
// Hoofdlus
leegte lus () {
verifAndSetRightSide ();
verifAndSetLeftSide ();
processRightSide ();
processLeftSide ();
delay (10); // Herhaal elke 10 milliseconden
}
//---------------------------------------------------
ongeldig initPins () {
pinMode (pinRightMotorDirection, OUTPUT);
pinMode (pinRightMotorSpeed, OUTPUT);
pinMode (pinRightBumper, INPUT);
pinMode (pinLeftMotorDirection, OUTPUT);
pinMode (pinLeftMotorSpeed, OUTPUT);
pinMode (pinLeftBumper, INPUT);
voor (int i = 0; i pinMode (sonarPins [i], INPUT);
}
ongeldig startMotors () {
setMotorSpeed (pinRightMotorSpeed, 255);
setMotorSpeed (pinLeftMotorSpeed, 255);
}
ongeldig waitWhileAnyBumperIsPressed () {
while (checkBumperIsNotPressed (pinRightBumper)
&& checkBumperIsNotPressed (pinLeftBumper)) {
delay (20); // Controleer elke 20 milliseconden
}
}
nietig processRightSide () {
if (countDownWhileMovingToRight MinFrontDistance) // controleert of de minimaal toegestane frontafstand niet wordt bereikt
terugkeer
if (checkCounterIsNotSet (countDownWhileMovingToLeft)) // als de teller nog niet aftelt
runLeftMotorBackward (); // Draai de rechtermotor achteruit
countDownWhileMovingToLeft = turnLeftTimeout; // Zet de teller op maximale waarde om het aftellen te starten
}
bool checkCounterIsNotSet (int counter) {
return teller = SamplesAmount)
sampleIndex [pinIndex] = 0;
samples [pinIndex] [sampleIndex [pinIndex]] = waarde;
waar terugkeren;
}
long calculAvarageDistance (int pinIndex) {
lang gemiddelde = 0;
voor (int i = 0; i gemiddeld + = monsters [pinIndex] [i];
retourgemiddelde / SamplesAmount;
}
Stap twee Voorbereiding van de basiselementen van de robot
Karton wordt gebruikt als basis voor het bevestigen van alle componenten van de robot, inclusief de batterij, besturingsborden en motoren.
De turbine moet goed worden vastgelijmd of anderszins worden bevestigd op een kleine plastic container waarin een gat kan worden gemaakt voor het absorberen van vuil. Dit ontwerp wordt vervolgens op de kartonnen basis gelijmd. Bovendien moet de container een extra gat hebben waardoor lucht kan ontsnappen. Er zou een filter moeten zijn, de auteur besloot voor deze doeleinden synthetische stof te gebruiken.
In de volgende fase moet de koeler worden gelijmd met servo's en vervolgens wordt dit ontwerp op een kartonnen basis geïnstalleerd.
Stap drie We maken wielen voor de robot
Om de wielen te maken, moet je aluminium blikjes nemen en de bovenste en onderste delen ervan afsnijden. Vervolgens worden deze elementen aan elkaar gelijmd. Nu is het alleen nog nodig om de wielen met smeltlijm goed op de servomotoren te bevestigen. Het is belangrijk om te begrijpen dat de wielen duidelijk in het midden van de servo-assen moeten worden bevestigd. Anders de robot rijdt scheef en verbruikt energie.
Stap vier Het laatste assemblageproces van de robot
Nadat de batterij is geïnstalleerd en alle elementen van de robot zijn aangesloten, blijft het om de structuur in een duurzame behuizing te plaatsen. Een grote plastic container is hiervoor ideaal. Allereerst moeten er gaten worden gemaakt in de neus van het robotlichaam, waardoor contacten worden uitgestuurd die een signaal geven elektronica wanneer de robot tegen een obstakel botst.
Om de koffer snel en gemakkelijk te verwijderen, worden magneten gebruikt om hem te bevestigen, in dit geval zijn er acht. Magneten worden aan de binnenkant van de stofzuiger en aan de container zelf gelijmd, elk 4 stuks.
Dat is alles. Nu is de robot gemonteerd en kan hij in de praktijk worden uitgeprobeerd. Ondanks het feit dat de robot niet in staat is om zelfstandig op te laden en een vrij beperkt vermogen heeft op het gebied van navigatie, zal hij binnen een half uur afval in de keuken of kleine kamer kunnen opruimen. Het voordeel van de robot is dat alle componenten gemakkelijk te vinden zijn en dat ze niet erg duur zijn. Geen twijfel mogelijk zelfgemaakt Je kunt verfijnen door nieuwe sensoren en andere elementen toe te voegen.