Licht volgen en vermijden van robot op basis van Arduino - Ajarnpa
Licht volgen en vermijden van robot op basis van Arduino - Ajarnpa
Anonim
Licht volgende en vermijdende robot op basis van Arduino
Licht volgende en vermijdende robot op basis van Arduino

Dit is een eenvoudig project dat licht volgt of vermijdt.

Ik heb deze simulatie gemaakt in Proteus 8.6 pro. Benodigde onderdelen:-1) Arduino uno.

2) 3 LDR.

3) 2 DC-reductiemotoren.4) Eén servo.5) Drie 1k-weerstanden.6) één H-brug l290D7) Eén aan- en uitschakelaar [voor het wijzigen van de staat van het programma]

8) 9v en 5v batterij

Stap 1: Ardunio-code

Arduino-code is een beetje aangepast Datum 23 februari 2016]

Deze code is zeer becommentarieerd, ik wil het niet uitleggen, maar als je hulp nodig hebt, neem dan gerust contact met me op via ([email protected])

Opmerking: - Ik gebruik twee voorwaarden in dit programma: de eerste voor licht volgend en de tweede voor het vermijden van licht.

Voor zover aan deze voorwaarden is voldaan, zal de robot licht volgen of vermijden. [Dit is de minimale LDR-waarde die ik kies. Bij normaal licht is het bereik 80 tot 95, maar naarmate de intensiteit toeneemt, worden er steeds meer spanningen opgewekt omdat het werkt volgens het principe van spanningsdeler int a = 400; // Tolarantiewaarde]

Stap 2: Proteus-bestanden

Download voor Arduino Library via die link

Stap 3: Hoe uw H-brug werkt

Hoe uw H-brug werkt
Hoe uw H-brug werkt
Hoe uw H-brug werkt
Hoe uw H-brug werkt

De L293NE/SN754410 is een zeer eenvoudige H-brug. Het heeft twee bruggen, één aan de linkerkant van de chip en één aan de rechterkant, en kan 2 motoren aansturen. Het kan tot 1 ampère stroom leveren en werkt tussen 4,5 V en 36 V. De kleine DC-motor die u in dit lab gebruikt, kan veilig op een lage spanning werken, dus deze H-brug zal prima werken. De H-brug heeft de volgende pinnen en functies: Pin 1 (1, 2EN) schakelt onze motor in en uit, of deze nu HIGH of LOW is Pin 2 (1A) is een logische pin voor onze motor (input is HOOG of LAAG)Pin 3 (1Y) is voor een van de motorterminalsPin 4-5 zijn voor aardePin 6 (2Y) is voor de andere motorterminalPin 7 (2A) is een logische pin voor onze motor (ingang is HOOG of LAAG)Pin 8 (VCC2) is de voeding voor onze motor, deze moet worden gegeven de nominale spanning van uw motorPin 9-11 zijn niet aangesloten aangezien u slechts één motor in dit lab gebruiktPin 12-13 zijn voor aardePin 14-15 zijn niet aangeslotenPin 16 (VCC1) is aangesloten op 5V. Hierboven staat een schema van de H-brug en welke pinnen wat doen in ons voorbeeld. Inbegrepen bij het diagram is een waarheidstabel die aangeeft hoe de motor zal functioneren volgens de status van de logische pinnen (die zijn ingesteld door onze Arduino).

In dit project maakt de enable-pin verbinding met een digitale pin op je Arduino, zodat je hem HOOG of LAAG kunt sturen en de motor AAN of UIT kunt zetten. De logische pinnen van de motor zijn ook verbonden met aangewezen digitale pinnen op uw Arduino, zodat u deze HOOG en LAAG kunt sturen om de motor in de ene richting te laten draaien, of LAAG en HOOG om hem in de andere richting te laten draaien. De voedingsspanning van de motor wordt aangesloten op de spanningsbron voor de motor, wat meestal een externe voeding is. Als uw motor op 5V en minder dan 500mA kan draaien, kunt u de 5V-uitgang van de Arduino gebruiken. De meeste motoren hebben een hogere spanning en een hoger stroomverbruik nodig, dus je hebt een externe voeding nodig.

Sluit de motor aan op de H-brug Sluit de motor aan op de H-brug zoals getoond in de 2e afbeelding.

Of, als u een externe voeding voor de Arduino gebruikt, kunt u de Vin-pin gebruiken.

Stap 4: Hoe LDR werkt

Het eerste dat wellicht verdere uitleg behoeft, is het gebruik van de lichtafhankelijke weerstanden. Lichtafhankelijke weerstanden (of LDR's) zijn weerstanden waarvan de waarde verandert afhankelijk van de hoeveelheid omgevingslicht, maar hoe kunnen we weerstand detecteren met Arduino? Nou, dat kan niet echt, maar je kunt spanningsniveaus detecteren met behulp van de analoge pinnen, die (in basisgebruik) tussen 0-5V kunnen meten. Nu vraag je je misschien af: "Wel, hoe zetten we weerstandswaarden om in spanningsveranderingen?", Het is simpel, we maken een spanningsdeler. Een spanningsdeler neemt een spanning op en voert vervolgens een fractie van die spanning uit die evenredig is met de ingangsspanning en de verhouding van de twee waarden van de gebruikte weerstanden. De vergelijking waarvoor is:

Uitgangsspanning = Ingangsspanning * (R2 / (R1 + R2)) Waarbij R1 de waarde van de eerste weerstand is en R2 de waarde van de tweede.

Nu roept dit nog steeds de vraag op: "Maar welke weerstandswaarden heeft de LDR?", Goede vraag. Hoe minder omgevingslicht, hoe hoger de weerstand, meer omgevingslicht betekent een lagere weerstand. Nu voor de specifieke LDR's die ik gebruikte, was hun weerstandsbereik van 200 - 10 kilo ohm, maar dit verandert voor verschillende, dus zorg ervoor dat je opzoekt waar je ze hebt gekocht en probeer een datasheet of iets dergelijks te vinden. Nu in dit geval R1 is eigenlijk onze LDR, dus laten we die vergelijking terugbrengen en wat math-e-magic doen (mathematische elektrische magie). Nu moeten we eerst die kilo-ohm-waarden omrekenen naar ohm: 200 kilo-ohm = 200.000 ohm 10 kilo-ohm = 10, 000 ohmDus om te vinden wat de uitgangsspanning is als we in pikzwart zijn, pluggen we de volgende nummers in: 5 * (10000 / (200000 + 10000)) De ingang is 5V, want dat is wat we krijgen van de Arduino. Bovenstaande geeft 0.24V (afgerond). Nu vinden we wat de uitgangsspanning is in piekhelderheid door de volgende getallen te gebruiken: 5 * (10000 / (10000 + 10000)) En dit geeft ons 2.5V precies. Dit zijn dus de spanningswaarden die we in de analoge pinnen van de Arduino gaan krijgen, maar dit zijn niet de waarden die in het programma te zien zijn: "Maar waarom?" je mag vragen. De Arduino maakt gebruik van een analoog naar digitaal chip die de analoge spanning omzet in bruikbare digitale data. In tegenstelling tot de digitale pinnen op de Arduino die alleen een HOGE of LAGE toestand van 0 en 5V kunnen lezen, kunnen de analoge pinnen van 0-5V lezen en dit omzetten in een nummerbereik van 0-1023. Nu met wat meer math-e-magic. we kunnen daadwerkelijk berekenen welke waarden de Arduino daadwerkelijk zal lezen.

Omdat dit een lineaire functie zal zijn, kunnen we de volgende formule gebruiken: Y = mX + C Waar; Y = Digitale Waarde Waar; m = helling, (stijgen / lopen), (digitale waarde / analoge waarde) Waar; C = Y-snijpunt Het Y-snijpunt is 0, dus dat geeft ons: Y = mXm = 1023 / 5 = 204,6 Daarom: Digitale waarde = 204,6 * Analoge waarde Dus in pikzwart is de digitale waarde: 204,6 * 0,24 Wat ongeveer 49 oplevert. En in piekhelderheid zal het zijn: 204,6 * 2,5, wat ongeveer 511 geeft. Nu met twee van deze op twee analoge pinnen kunnen we twee integer-variabelen maken om hun waarden twee op te slaan en vergelijkingsoperatoren te doen om te zien welke de laagste waarde heeft, de robot in die richting draaien.