- Benodigde materialen om een op Arduino gebaseerde vloerreinigingsrobot te bouwen
- Draagbare stofzuiger
- HC-SR04 Ultrasone sensormodule
- Vloersensor (IR-sensor) voor detectie van trappenhuizen
- Schakelschema van op Arduino gebaseerde vloerreinigingsrobot
- Het circuit bouwen voor een op Arduino gebaseerde vloerreinigingsrobot
- Arduino
In een hedendaags scenario zijn we allemaal zo druk met ons werk dat we geen tijd hebben om ons huis goed schoon te maken. De oplossing voor het probleem is heel eenvoudig, je hoeft alleen maar een huishoudelijke stofzuigerrobot te kopen, zoals irobot roomba, die je huis met een druk op de knop schoonmaakt. Maar dergelijke commerciële producten zijn een veelvoorkomend probleem, namelijk de kosten. Daarom hebben we vandaag besloten om een eenvoudige vloerreinigingsrobot te maken , die niet alleen eenvoudig te maken is, maar ook veel minder kost in vergelijking met commerciële producten die op de markt verkrijgbaar zijn. Frequente lezers herinneren zich misschien onze Arduino stofzuigrobot, die we lang geleden hebben gebouwd, maar die was erg omvangrijk en had een grote loodzuurbatterij nodig om te kunnen bewegen. De nieuwe Arduino-stofzuiger we gaan bouwen hier zal compact en praktischer zijn. Bovendien krijgt deze robot ultrasone sensoren en een IR-naderingssensor. De ultrasone sensor stelt de robot in staat obstakels te vermijden, zodat hij vrij kan bewegen totdat de kamer goed is schoongemaakt, en de naderingssensor helpt hem om te voorkomen dat hij van de trap valt. Al deze functies klinken interessant, toch? Dus laten we beginnen.
In een van onze vorige artikelen hebben we veel bots gemaakt, zoals de Self Balancing Robot, Automated Surface Desinfecting Robot en de Obstacle Avoiding Robot. Kijk die eens na als je dat interessant vindt.
Benodigde materialen om een op Arduino gebaseerde vloerreinigingsrobot te bouwen
Omdat we zeer algemene componenten hebben gebruikt om het hardwaregedeelte van de stofzuigerrobot te bouwen, zou je die allemaal in je plaatselijke hobbywinkel moeten kunnen vinden. Hier is de volledige lijst van vereist materiaal, samen met de afbeelding van alle componenten.
- Arduino Pro Mini - 1
- HC-SR04 Ultrasone module - 3
- L293D-motorstuurprogramma - 1
- 5Volt N20-motoren en montagebeugels - 2
- N20-motorwielen - 2
- Schakelaar - 1
- LM7805 Spanningsregelaar - 1
- 7,4 V lithium-ionbatterij - 1
- IR-module - 1
- Perfboard - 1
- Zwenkwiel - 1
- MDF
- Generieke draagbare stofzuiger
Draagbare stofzuiger
In het onderdeel vereiste componenten hebben we het gehad over een draagbare stofzuiger, de onderstaande afbeeldingen laten precies dat zien. Het is een draagbare stofzuiger van Amazon. Dit wordt geleverd met een heel eenvoudig mechanisme. Het heeft drie delen aan de onderkant (een kleine kamer om het stof op te slaan, het middelste deel bevat de motor, ventilator en de batterijaansluiting aan de bovenkant (er is een deksel of dop voor de batterij). Het heeft een gelijkstroommotor en een ventilator. Deze motor is rechtstreeks verbonden met 3V (2 * 1,5 volt AA-batterijen) via een simpele schakelaar. Omdat we onze robot voeden met een 7,4 V-batterij, zullen we de verbinding van de interne batterij verbreken en deze voeden met de 5V We hebben dus alle overbodige onderdelen verwijderd en alleen de motor met tweedraadssteunen, dat zie je in de afbeelding hieronder.
HC-SR04 Ultrasone sensormodule
Om de obstakels te detecteren, gebruiken we de populaire HC-SR04 ultrasone afstandssensor of we kunnen het de obstakelvermijdingssensoren noemen. De werking is heel eenvoudig. Ten eerste zendt de zendermodule een ultrasone golf die door de lucht reist, een obstakel raakt en terugkaatst en de ontvanger ontvangt die golf. Door met Arduino de tijd te berekenen, kunnen we de afstand bepalen. In een vorig artikel over het Arduino Based Ultrasonic Distance Sensor-project hebben we het werkingsprincipe van deze sensor zeer grondig besproken. Bekijk dat als je meer wilt weten over de HC-SR04 ultrasone afstandssensormodule.
Vloersensor (IR-sensor) voor detectie van trappenhuizen
In de features sectie hebben we gesproken over een feature waarbij de robot trappen kan detecteren en kan voorkomen dat hij valt. Om dat te doen, gebruiken we een IR-sensor. We gaan een interface maken tussen de IR-sensor en Arduino. De werking van de IR-naderingssensor is heel eenvoudig, hij heeft een IR-led en een fotodiode, de IR-led zendt IR-licht uit en als er een obstakel voor dit uitgezonden licht komt, wordt het gereflecteerd en wordt het gereflecteerde licht gedetecteerd door de fotodiode. Maar de gegenereerde spanning van de reflectie zal erg laag zijn. Om dat te vergroten, kunnen we een op-amp-comparator gebruiken, we kunnen versterken en uitvoer krijgen. Een IR-moduleheeft drie pinnen - Vcc, aarde en uitvoer. Meestal wordt de output laag als er een obstakel voor de sensor komt. We kunnen dit dus gebruiken om de vloer te detecteren. Als we een fractie van een seconde een hoogte van de sensor detecteren, kunnen we de robot stoppen, hem terugdraaien of alles doen wat we willen voorkomen dat hij van de trap valt. In een vorig artikel hebben we een Breadboard-versie van de IR Proximity Sensor Module gemaakt en het werkingsprincipe in detail uitgelegd, je kunt dat checken als je meer wilt weten over deze sensor.
Schakelschema van op Arduino gebaseerde vloerreinigingsrobot
We hebben drie ultrasone sensoren die obstakels detecteren. We moeten dus alle gronden van ultrasone sensoren verbinden en verbinden met gemeenschappelijke aarde. We verbinden ook alle drie de Vcc van de sensor en verbinden die met de gemeenschappelijke VCC-pin. Vervolgens verbinden we de trigger- en echopinnen met de PWM-pinnen van de Arduino. We verbinden ook de VCC van de IR-module met 5V en aarde met de aardingspin van Arduino, de output-pin van de IR-sensormodule gaat naar de digitale pin D2 van de Arduino. Voor de motordriver verbinden we de twee activeringspinnen met 5v en ook de spanningspin van de driver met 5V omdat we 5volt-motoren gebruiken. In een vorig artikel hebben we een Arduino Motor Driver Shield gemaakt, je kunt dat bekijken voor meer informatie over L293D Motor Driver ICen zijn operaties. De Arduino, Ultrasone modules, motordriver en motoren werken op 5 Volt, de hogere spanning zal het doden en we gebruiken de 7,4 volt batterij, om dat om te zetten in 5 Volt wordt de LM7805 spanningsregelaar gebruikt. Sluit de stofzuiger rechtstreeks op het hoofdcircuit aan.
Het circuit bouwen voor een op Arduino gebaseerde vloerreinigingsrobot
Om ideeën op te doen over mijn robot, zocht ik online naar stofzuigerrobots en kreeg ik wat afbeeldingen van ronde robots. Dus besloot ik om een ronde robot te bouwen. Om de achtervolging en het lichaam van de robot te bouwen, heb ik tal van opties zoals schuimplaat, MDF, karton, enz. Maar ik kies voor MDF omdat het hard is en een aantal waterbestendige eigenschappen heeft. Als je dit doet, kun je beslissen welk materiaal je voor je bot kiest.
Om de robot te bouwen, heb ik de MDF-plaat genomen en vervolgens twee cirkels getekend met een straal van 8 CM en binnen die cirkel heb ik ook nog een cirkel getekend met een straal van 4 CMvoor het plaatsen van de stofzuiger. Daarna heb ik de cirkels uitgesneden. Ook heb ik de juiste stukken voor het wielpad gesneden en verwijderd (raadpleeg de afbeeldingen voor een beter begrip). Ten slotte heb ik drie kleine gaatjes gemaakt voor het zwenkwiel. De volgende stap is het monteren van de motoren op de basis met behulp van de beugels, ook het plaatsen en bevestigen van het zwenkwiel op zijn positie. Plaats daarna de ultrasone sensoren links, rechts en in het midden van de robot. Verbind ook de IR-module met de onderkant van de robot. Vergeet niet de schakelaar buiten toe te voegen. Dat is alles over het bouwen van de robot, als je op dit punt in de war raakt, kun je de volgende afbeeldingen raadplegen.
Voor het bovenste deel heb ik ook een cirkel van 11 cm in straal op de schuimplaat getekend en deze uitgesneden. Voor de afstand tussen het boven- en ondergedeelte had ik drie 4 cm lange stukken van een plastic buis uitgesneden. Daarna heb ik de plastic afstandhouders op het onderste deel gelijmd en vervolgens het bovenste deel gelijmd. Je kunt de zijkanten van de bot bedekken met plastic of iets dergelijks als je wilt.
Arduino
De volledige code voor dit project staat aan het einde van het document. Deze Arduino-code is vergelijkbaar met de op Arduino gebaseerde ultrasone afstandssensorcode, de enige verandering zit in de vloerdetectie. In de volgende regels leg ik uit hoe de code werkt. In dit geval gebruiken we geen extra bibliotheken. Hieronder hebben we de code stap voor stap beschreven. We gebruiken geen extra bibliotheken om de afstandsgegevens van de HC-SR04-sensor te decoderen, omdat het heel eenvoudig is. In de volgende regels hebben we beschreven hoe. Eerst moeten we de triggerpin en echopin definiëren voor alle drie de ultrasone afstandssensoren die op het Arduino-bord zijn aangesloten. In dit project hebben we drie echopinnen en drie triggerpinnen. Merk op dat 1 de linker sensor is, 2 de voorste sensor en 3 de rechter sensor.
const int trigPin1 = 3; const int echoPin1 = 5; const int trigPin2 = 6; const int echoPin2 = 9; const int trigPin3 = 10; const int echoPin3 = 11; int irpin = 2;
Vervolgens hebben we variabelen gedefinieerd voor de afstand die allemaal (int) type variabelen zijn en voor de duur hebben we ervoor gekozen om (long) te gebruiken. Nogmaals, we hebben er drie van elk. Ik heb ook een geheel getal gedefinieerd voor het opslaan van de status van de beweging, we zullen er later in deze sectie over praten.
lange duur1; lange duur2; lange duur3; int distanceleft; int afstand voorzijde; int afstandsvermogen; int a = 0;
Vervolgens moeten we in de setup-sectie alle perspectiefpinnen als invoer of uitvoer maken met behulp van de functie pinModes () . Om ultrasone golven vanuit de module te verzenden, moeten we de triggerpin op hoog zetten, dwz alle triggerpinnen moeten worden gedefinieerd als OUTPUT. En om de echo te ontvangen, moeten we de status van de echopinnen lezen, zodat alle echopinnen moeten worden gedefinieerd als INPUT. Ook schakelen we de seriële monitor in voor probleemoplossing. Om de status van de IR-modules te kunnen lezen, heb ik de irpin als input gedefinieerd.
pinMode (trigPin1, OUTPUT); pinMode (trigPin2, OUTPUT); pinMode (trigPin3, OUTPUT); pinMode (echoPin1, INPUT); pinMode (echoPin2, INPUT); pinMode (echoPin3, INPUT); pinMode (irpin, INPUT);
En deze digitale pinnen zijn gedefinieerd als OUTPUT voor de input van de motordriver.
pinMode (4, UITGANG); pinMode (7, UITGANG); pinMode (8, UITGANG); pinMode (12, UITGANG);
In de hoofdlus hebben we drie secties voor drie sensoren. Alle secties werken hetzelfde, maar elk voor verschillende sensoren. In deze sectie lezen we de obstakelafstand vanaf elke sensor en slaan deze op in elk gedefinieerd geheel getal. Om de afstand af te lezen, moeten we er eerst voor zorgen dat de triggerpinnen vrij zijn, daarvoor moeten we de triggerpin gedurende 2 µs op LOW zetten. Om de ultrasone golf te genereren, moeten we de triggerpen nu 10 µs HOOG draaien. Dit stuurt het ultrasone geluid en met behulp van de pulseIn () functie kunnen we de reistijd aflezen, en die waarde opslaan in de variabele “ duration ”. Deze functie heeft 2 parameters, de eerste is de naam van de echopin en voor de tweede kun je een van beide schrijvenHOOG of LAAG. HOOG betekent dat de functie pulseIn () wacht tot de pin HOOG gaat, veroorzaakt door de teruggekaatste geluidsgolf, en het zal beginnen met tellen, en vervolgens zal wachten tot de pin LAAG wordt wanneer de geluidsgolf stopt, wat het tellen zal stoppen. Deze functie geeft de lengte van de puls in microseconden. Om de afstand te berekenen, vermenigvuldigen we de duur met 0,034 (geluidssnelheid in lucht is 340 m / s) en delen we deze door 2 (dit komt door het heen en weer bewegen van de geluidsgolf). Ten slotte slaan we de afstand van elke sensor op in overeenkomstige gehele getallen.
digitalWrite (trigPin1, LOW); delayMicroseconds (2); digitalWrite (trigPin1, HIGH); delayMicroseconds (10); digitalWrite (trigPin1, LOW); duration1 = pulseIn (echoPin1, HIGH); distanceleft = duur1 * 0,034 / 2;
Nadat we de afstand van elke sensor hebben gekregen, kunnen we de motoren besturen met behulp van een if-statement, dus we sturen de beweging van de robot. Dit is heel eenvoudig, eerst hebben we een obstakelafstandswaarde gegeven, in dit geval is deze 15 cm (verander deze waarde naar wens). Vervolgens gaven we voorwaarden op basis van die waarde. Als er bijvoorbeeld een obstakel voor de linkersensor komt (dat betekent dat de afstand van de linkersensor onder of gelijk moet zijn aan 15 cm) en de andere twee afstanden hoog zijn (dat betekent dat er geen obstakel voor die sensoren staat), dan kunnen we met behulp van de digitale schrijffunctie de motoren naar rechts drijven. Later heb ik de status van de IR-sensor gecontroleerd. Als de robot op de grond staat, is de waarde van de IR-pin LAAG, en zo niet, dan is de waardeHOOG. Vervolgens heb ik die waarde opgeslagen in de variabele int s . We gaan de robot besturen volgens deze status.
Dit gedeelte van de code wordt gebruikt om de robot vooruit en achteruit te bewegen :
if (s == HIGH) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, LOW); digitalWrite (12, HIGH); vertraging (1000); a = 1; }
Maar er is een probleem met deze methode wanneer de motor achteruit beweegt, de vloer terugkomt en de bot naar voren beweegt, en het zal zich herhalen waardoor de bot vastloopt. Om dat te verhelpen, slaan we een waarde (1) op in int nadat we begrijpen dat floor niet aanwezig is. We controleren deze toestand ook voor andere bewegingen.
Na het detecteren van de afwezigheid van de vloer, zal de robot niet vooruit bewegen. In plaats daarvan gaat het naar links, op deze manier kunnen we het probleem vermijden.
if ((a == 0) && (s == LOW) && (distanceleft <= 15 && distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && afstand voorzijde> 15 && afstandszicht> 15))
In bovenstaande staat. Eerst controleert de robot de status van de verdieping en de gehele waarde. De bot gaat alleen vooruit als aan alle voorwaarden is voldaan.
Nu kunnen we de opdrachten voor de motordriver schrijven. Hierdoor wordt de rechtermotor achteruit en de linkermotor vooruit gedreven, waardoor de robot naar rechts draait.
Dit gedeelte van de code wordt gebruikt om de robot naar rechts te verplaatsen:
digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, HIGH); digitalWrite (12, LOW);
Als de bot detecteert dat de vloer afwezig is, verandert de waarde in 1 en beweegt de bot naar links. Na het afslaan naar links verandert de waarde van 'a' van 1 naar 0.
if ((a == 1) && (s == LOW) - (s == LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright> 15) - (s == LOW) && (distanceleft <= 15 && afstand voorzijde <= 15 && afstandsfront> 15) - (s == LOW) && (afstand links <= 15 && afstand voorzijde> 15 && afstandszicht> 15) - (afstand links <= 15 && afstand voorzijde> 15 && afstandszicht> 15)) { digitalWrite (4, HIGH); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (12, HIGH); vertraging (100); a = 0; }
Dit gedeelte van de code wordt gebruikt om de robot naar links te verplaatsen:
if ((s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront> 15 && distanceright <= 15) - (s == LOW) && (distanceleft> 15 && distancefront <= 15 && distanceright> 15)) { digitalWrite (4, LOW); digitalWrite (7, HIGH); digitalWrite (8, HIGH); digitalWrite (12, LOW); }
Dat is het voor het bouwen van een op Arduino gebaseerde slimme stofzuigerrobot. De volledige werking van het project is te vinden in de video die onderaan deze pagina is gelinkt. Als u vragen heeft, kunt u hieronder reageren.