Asuro Robot

Inleiding

Asuro Robot De Asuro robot is een kleine in C programmeerbare robot. De Asuro robot wordt geleverd als een bouwpakket en heeft de volgende eigenschappen: Een AVR microcontroller, twee aandrijfmotoren, twee signaal LED's, twee odometerie sensoren, een lijn volg sensor, zes detectie schakelaars, een status LED en een seriële (infra rood) communicatie mogelijkheid met een PC.

Er wordt een uitgebreide handleiding meegeleverd om de Asuro robot is elkaar te zetten. Kijk voor het in elkaar zetten van de Asuro robot naar "Mijn modificaties aan de Asuro robot".

Ontwikkel omgeving

Asuro development environment Voor het schrijven van programma's voor de Asuro robot en het flashen van de AVR microcontroller op de Asuro robot wordt software meegeleverd. De meegeleverde software is echter vrij oud (2003).

Voor mijzelf heb ik een ontwikkel omgeving ingericht op een Linux systeem. Ik maak gebruik van Genie om de programma's te schrijven. Deze worden gecompileerd met behulp van de gcc compiler die is aangevuld met avr-gcc. Voor het flashen gebruik ik de Windows versie van het flash programma via Wine. Dit omdat de meegeleverde Linux versie door zijn leeftijd niet meer werkt op een modern Linux systeem.
Voor de communicatie met de Asuro robot via de USB infrarood zend/ontvanger gebruik ik het programma CuteCom.

Klik hier voor een handleiding voor het installeren van een ontwikkelomgeving voor de Asuro robot op een Linux systeem.

Mijn modificaties aan de Asuro robot (1)

Modification of the odometer sensors. Na het in elkaar zetten van de Asuro robot ben ik de diverse sensoren gaan testen. Ik heb een klein programma geschreven die de waarden van de odometrie sensoren en de lijn volg sensor continue via de infrarood communicatie naar de PC stuurt.


Odometrie sensoren:

Probleem: Het tandwiel met de odometrie reflectie sticker heeft veel speling (circa 3 mm).

Tandwiel op minimale afstand (0 mm):
Motor links, wit vlak: 862, zwart vlak: 476
Motor rechts, wit vlak: 915, zwart vlak: 675

Tandwiel op maximale afstand (3 mm):
Motor links, wit vlak: 885, zwart vlak: 642
Motor rechts wit vlak: 937, zwart vlak: 804

Modificaties:

Ik heb de vier assen van de Asuro robot 3 mm naar buiten verplaatst om ruimte te maken voor een borgsysteem op de assen met de tandwielen met de reflectie sticker. Op de assen voor de wielen heb ik een aantal kleine ringen toegevoegd om het wiel en tandwiel weer correct uit te lijnen. Het borgsysteem is gemaakt van een kroonsteentje.

Het resultaat van de modificatie is een stabiele meting van de odometrie sensoren, vergelijkbaar met de metingen met 0 mm afstand.

Mijn modificaties aan de Asuro robot (2)

Modification of the line follow sensor.

Lijn volg sensor:

Probleem: Omgevingslicht beïnvloed de lijn volg censor.

De lijn volg sensor bestaat een lichtbron die het licht naar beneden schijnt en twee lichtgevoelige sensoren die het op de ondergrond gereflecteerde licht van de lichtbron weer opvangen. Ik heb metingen verricht met normaal omgevingslicht en metingen waarbij de Asuro robot was afgedekt met twee handen.

Normaal:
Sensor links, wit vlak: 970
Sensor links, zwart vlak: 262
Sensor rechts, wit vlak: 912
Sensor rechts, zwart vlak: 298

Afgedekt:
Sensor links, wit vlak: 600
Sensor links, zwart vlak: 160
Sensor rechts, wit vlak: 514
Sensor rechts, zwart vlak: 146

Het volgen van een lijn is gebaseerd op het verschil tussen de twee lichtgevoelige sensoren, daarvoor zijn absolute waarde van de lichtgevoelige sensoren niet zo van belang.
Echter wil ik ook een kruispunt kunnen herkennen. De kruispunten hebben een grijze kleur. Ik wil dus een bepaalde grijstint kunnen koppelen aan een absolute waarde van de lichtgevoelige sensoren.

Modificaties:

Ik heb de lijn volgsensor voorzien van een afdek kapje. Dit afdek kapje is een oude behuizing van een 9-polige SUB-D stekker waarvan de bovenzijde is afgezaagd. De afstand tussen het afdek kapje en de ondergrond is nu minimaal (circa 0,5 mm) en daardoor heeft licht van buitenaf geen invloed meer.

Met afdek kapje:
Sensor links, wit vlak: 520
Sensor links, grijs vlak: 375
Sensor links, zwart vlak: 91
Sensor rechts, wit vlak: 440
Sensor rechts, grijs vlak: 310
Sensor rechts, zwart vlak: 70

Het resultaat van de modificatie is een betrouwbare meting voor zowel wit, grijs als zwart.

Mijn eerste programma voor de Asuro robot

Dit is een video van mijn eerste programma voor de Asuro robot. Het programma gebruikt de lijn volg sensor om de zwarte lijn te blijven volgen.


Mijn modificaties aan de Asuro robot (3)

Modification of the motor and the odometer sensors. Na een tijdje met de Asuro robot te hebben geëxperimenteerd ontstond er een probleem. Tijdens het uitvoeren van een programma gebeurde er rare dingen, en het programma stopte onverklaarbaar.
Na het schrijven van een programma dat de motoren en de LEDs aanstuurt met behulp van de schakelaars ben ik gaan testen of ik de oorzaak kon vinden van het probleem. Het probleem ontstond als ik de linker motor liet draaien, maar niet elke keer.
Nadat ik de motor had verwijderd van de printplaat was het probleem verdwenen. Mijn conclusie is dat de metalen behuizing van de motor kortsluiting veroorzaakte op de printplaat. Het plaatsen van een stukje isolatie plakband op de printplaat heeft het probleem verholpen. Een extra voordeel is dat het isolatie plakband minder glad is en de motor beter op zijn plaats blijft. Ik heb dit ook toegepast bij de rechter motor.

Tevens heb ik de odometrie sensoren afgedekt. Ik merkte dat bij sterk zonlicht de odometrie sensoren werden beïnvloed en dat daardoor de Asuro robot niet goed rechtdoor reed of geen correcte draai maakte. Het afdekkapje is gemaakt van karton.

Mijn modificaties aan de Asuro robot (4)

Modification of the asuro.c software. Niet elke Asuro robot is exact het zelfde, en dat heeft invloed op de meetwaarde van de sensoren. In de software (asuro.c - v2.61) zijn mogelijkheden om deze afwijkingen te corrigeren. Hier volgen mijn aanpassingen.

De functie: ISR (ADC_vect)

Ik heb asuro.c tijdelijk aangepast zodat in de functie ISR (ADC_vect) de waarde van tmp[toggle] van één van de odometrie sensoren naar de PC wordt verzonden. Deze waarde heb ik een grafiek gezet en dan wordt zichtbaar wat de beste omschakel waarden zijn. Mijn keuze is < 190 en > 200.

De functie: Go()

Ik gebruik op mijn Asuro robot de 6 + 6 reflectie sticker. Ik heb een klein programma geschreven dat de Asuro robot 200 mm naar voren laat rijden. Echter klopte dit niet met de werkelijkheid.
Een kleine aanpassing in de functie Go() heeft dit verholpen:
enc_count=abs((100L * distance) / 200L);

De functie: Turn()

Daarna heb een klein programma geschreven dat de Asuro robot 180 graden laat draaien. Een kleine aanpassing in de functie Turn() zorgt nu voor een correcte draai:
enc_count=abs(degree)*0166L;

De functie: PollSwitch()

Ik heb ook een klein programma geschreven dat de waarde van de schakelaars op de Asuro robot naar de PC zend.
Ik heb de standaard waarde van 61 gewijzigd in 63.

De functie: LineData()

Daarna heb een klein programma geschreven dat de lijn volg sensor waarde van de Asuro robot naar de PC zend. Er was een verschil tussen de linker en rechte waarde van 20%.
Een kleine aanpassing in de functie LineData() heeft dit verholpen:
data[1] = (((ADCL + (ADCH << 8)) * 120L) / 100L);

Mijn tweede Asuro Robot programma.

Deze keer een groter en meer moeilijk circuit en een obstakel! Het programma gebruikt de lijn volg sensor om op de zwarte lijn te blijven en schakelaars om een botsing te detecteren.



Het programma voor de Asuro robot.

Het parcours voor de Asuro robot.

Mijn modificaties aan de Asuro robot (5)

Alternative library for the Asuro robot. Als je een programma schrijft voor de Asuro robot, dan maak je gebruik van de Asuro bibliotheek. In mijn geval maak ik gebruik van de Asuro bibliotheek v2.61. Deze bibliotheek bevat functies voor het uitlezen van de odometrie en lijn volg sensoren, je kan de Asuro robot een bocht laten maken, een stukje rechtuit laten rijden en nog veel meer.

Ik ontdekte dat het uitlezen van de odometrie sensoren werd verstoord door andere functies. Als je informatie opvraagt van een andere sensor wordt het uitlezen van de odometrie sensoren stilgezet. Dit betekend dat het odometrie systeem niet betrouwbaar is tijdens het volgen van een lijn.

Ik heb besloten om een persoonlijke Asuro bibliotheek te maken die gebaseerd is op de Asuro bibliotheek v2.61. De grootste verschillen zijn:
Odometrie sensoren en lijn volg sensoren worden nu continue uitgelezen en de waarden zijn continue beschikbaar als globale variabelen. De odometrie tellers worden ook continue ververst en deze zijn ook beschikbaar als globale variabelen . Elke 1 ms wordt een van de vier sensoren uitgelezen, dus na elke 4 ms zijn alle sensor waarden ververst.
De motoren worden nu aangestuurd door slechts één variabele per motor. Het bereik is van -255 tot +255, de min is de snelheid achteruit, positief is de snelheid vooruit en de motor remt bij een waarde van nul.
Een speciale routine voor het detecteren van de schakelaars en verbeterde routines voor het maken van een bocht en rechtuit rijden met behulp van de odometrie sensoren.

Mijn modificaties aan de Asuro robot (6)

Switching voltage regulator for the Asuro robot. De elektronica van de Asuro robot wordt gevoed door een batterij. Je kan vier normale of vier oplaadbare batterijen gebruiken. Het probleem is echter dat de batterij spanning niet altijd hetzelfde is, nieuwe of volledig opgeladen batterijen hebben een hogere spanning dan batterijen die al een tijdje worden gebruikt.
De odometrie sensoren zijn minder betrouwbaar als de spanning wat lager is. Als je de lijn volg sensoren gebruikt om kleuren te herkennen zijn deze ook minder betrouwbaar als de spanning niet stabiel is. En de snelheid van de Asuro robot is afhankelijk van de batterij spanning.

Een oplossing is om een spanningsregelaar te gebruiken. Maar een standaard (lineaire) spanningsregelaar gebruikt zelf ongeveer 2 Volt om zijn werk te doen. Dit betekend dat je meer batterijen nodigt hebt om de 2 extra Volt te compenseren, en de efficiëntie van deze regelaars is niet bijzonder hoog.

Een betere oplossing is om een schakelende spanningsregelaar te gebruiken. Ik gebruik nu een schakelende spanningsregelaar die gebaseerd is op de XL6009 van XLSEMI. Maar er is een klein probleem, wanneer de ingangsspanning tussen 2,75 Volt en 3,75 Volt is, is de uitgangsspanning veel hoger dan de normale uitgangsspanning. De oplossing is een kleine schakeling die de schakelende spanningsregelaar pas inschakelt als de ingangsspanning hoger is dan 4,15 Volt.

Met behulp van dit systeem is de spanning voor de Asuro elektronica nu altijd 5,95 Volt zolang de ingangsspanning tussen 4,15 Volt en 6,30 Volt ligt.
De extra schakelaar is noodzakelijk omdat de schakelend spanningsregelaar altijd werkt en daardoor de batterij langzaam zal leegmaken.

Mijn modificaties aan de Asuro robot (7)

Battery-pack upgrade for the Asuro robot. Meer vermogen… De Asuro robot gebruikt vier normale of vier oplaadbare AAA batterijen. Mijn oplaadbare AAA batterijen hebben een capaciteit van 900 mAh. Ik wilde een beetje meer dan dat, en besloot om het batterij gedeelte aan te passen.

Als eerste heb ik een simpele connector (printplaat header) geïnstalleerd op de Asuro robot. Daarna heb ik een kleine connector (3 pins) van een oude PC aangesloten op de originele batterij houder. De connector op de Asuro robot heeft een extra pin die voorkomt dat de connector van de batterijen verkeerd om wordt aangesloten.

Ik heb ook een tweede set batterijen gemaakt bestaande uit vier oplaadbare AA batterijen, met een capaciteit van 1300 mAh. In de toekomst maak ik nog een set batterijen met een capaciteit van 2500 mAh.

Het voordeel is dat ik nu een set batterijen kan gebruiken en de andere set kan opladen. Het omwisselen van de batterijen m.b.v. de connectors is zeer eenvoudig.

De Asuro Robot en een doolhof

Deze keer rijdt de Asuro robot door een doolhof. De Asuro robot verkent (leert) het doolhof en kan daarna de snelste route rijden. Als er een obstakel wordt gevonden dan rijdt de Asuro robot een alternatieve route.


Bijgewerkt: 2019-05-12 13:22:03