Informatie over blog

Als team nemen wij deel aan een wedstrijd, zie (link voor meer info). http://www.ccm.nl/nl/trofee/edition-2013. Ons team bestaat negenpersonen en ieder teamlid heeft zijn eigen verantwoordelijkheid. Ons systeem is ingedeeld in vijf sub-systemen en elk team lid heeft zijn eigen sub-systeem. Ook is er nog een Project Manager en hij draagt zorg dat elk sub-systeem op elkaar aansluit. Mijn sub-systeem is Energieopslag/ transport, elektrische aansturing aandrijving & line tracking. De resultaten en bevindingen die ik heb tijdens dit project ga ik bloggen op deze blog.

Met vriendelijke groet,

Mark.

dinsdag 11 juni 2013

PI-Regeling Algoritme

Wat heb ik gedaan?

Om de robot een lijn te laten volgen maak ik gebruik van  twee LDR's. Een LDR heeft een bepaalde weerstand bij een bepaalde lichte intensiteit.  Dit is dan een input waarde voor het regel proces. Hieronder zijn de afbeeldingen te zien die ik heb geschetst om tot mijn algoritme te komen.

Hier een afbeelding van het proces analyse

Hier nog een 

Hier de eerste op set van een PSD

Hier een schematische schets van de opstelling van de LED's en LDR's

Hier een gedetailleerde uitwerking van een PSD

Hier op deze afbeelding een test opstelling geschetst van hoe ik de Line tracking kan testen.

Hier op de afbeelding een proces functie blok schets.



Resultaat

Hieronder het C++ programma.

/*
|--------------------------------------------------------------------------|
| Naam      : Mark.                                                        |
| Project   : line tracking robot "Tommy".                                 |
| Programma : PI regeling line tracking robot.                             |
| Versie    : 3.1                                                          |
| Datum     : 03-05-2013                                                   |
---------------------------------------------------------------------------|
*/

int motor_rechts =  6;                      // motor rechts uitgang op arduino.
int motor_links = 9;                        // motor links uitgang op arduino.
int sensor_links =  A1;                     // Sensor aan de linker kant van de robot.
int sensor_rechts = A0;                     // Sensor aan de rechter kant van de robot.
int led = 8;                                // Deze uitgang schakeld de LEDs aan van de sensoren.


unsigned long last_time;                    // tijd opname na meting.
unsigned long now;                          // de tijd op dit moment.
double timechange;                          // Het verschil tussen now en last time.

double M_correctie;                         // motor correctie snelheid.

float Kp = 0.2 ;                            // versterkings factor van de Propotionele versterking
float Ki = 0.1;                             // versterkings factor van de integratie versterking
int Error =0;                               // De fout die ontstaat tussen de PV en SP.

int MotorspeedLN = 0;                       // Nieuwe motor snelheid links met correctie factor.
int motorspeed_links = 60;                  // Ingesteld motor snelheid links kan ingesteld worden tussen de 0 en 255.
int MotorspeedRN = 0;                       // Nieuwe motor snelheid rechts met correctie factor.
int motorspeed_rechts = 60;                 // Ingesteld motor snelheid links kan ingesteld worden tussen de 0 en 255.
int motorspeed_links_opstart = 100;         // Opstart snelheid om aanloopkoppel te overwinnen.
int motorspeed_rechts_opstart = 100;        // Opstart snelheid om aanloopkoppel te overwinnen.

int ref = 123 ;                             // ingesteld referentie waarde. Dit is de waarde kleur van de lijn.
float S_links;
float S_total;
float S_afwijking;
float S_rechts;



void setup()
{
  pinMode (motor_links, OUTPUT);
  pinMode (motor_rechts, OUTPUT);
  pinMode (led, OUTPUT);

  pinMode (sensor_links, INPUT);
  pinMode (sensor_rechts, INPUT);

  Serial.begin (9600);

  digitalWrite (8,led);

  delay (4000);

  analogWrite (9, motorspeed_links_opstart);
  analogWrite (6, motorspeed_rechts_opstart);



  delay (1000);
}


void loop()
{


  double M_Correctie_factor = 0;
  double M_correctie = 0;


  analogWrite (9, motorspeed_links);
  analogWrite ( 6, motorspeed_rechts);

  do // in deze do while loop wordt de afwijking bepaald, of de robot zich naar links verplaats of naar rechts.
 
    {
   
     S_links = analogRead (sensor_links);
     S_rechts = analogRead (sensor_rechts);
   
     S_total = -S_links + S_rechts;
   
     S_afwijking = 0-S_total;
   
     {
   
      if (S_afwijking > 0 )
   
      {
         do // in deze do while loop verplaatst de robot zicht naar links. dan wordt het PI algoritme ingeschakeld
        {
          S_links = analogRead (sensor_links);
   
          Error = S_links - ref;
   
          M_correctie = Kp * Error + Ki * Error;
   
          MotorspeedLN = motorspeed_links + M_correctie;
          MotorspeedRN = motorspeed_rechts;
   
          analogWrite (6,  MotorspeedRN);
          analogWrite (9, MotorspeedLN);
   
          S_links = analogRead (sensor_links);
          S_rechts = analogRead (sensor_rechts);
   
   
          Serial.print (" L ");
          Serial.print (" ");
          Serial.print (S_links);
          Serial.print (" ");
          Serial.print (Error);
          Serial.print (" ");
          Serial.print (timechange);
          Serial.print (" ");
          Serial.print (M_correctie);
          Serial.print (" ");
          Serial.print (MotorspeedLN);
          Serial.print (" ");
          Serial.println (MotorspeedRN);
   
          S_rechts = analogRead (sensor_rechts);
          S_links = analogRead (sensor_links);
   
          last_time = now;
        }
         while ( S_rechts <= ref);
     
      }
   
      else
   
      {
        do // in deze do while loop verplaats de robot zich naar rechts. Hier wordt een algoritme uitgevoerd die afwijking te corrigeren.
     
          {
   
            S_rechts = analogRead (sensor_rechts);
            S_links = analogRead (sensor_links);
         
            S_rechts = (S_links/S_rechts)*S_rechts;
   
            Error = S_rechts - ref;
   
            M_correctie = Kp * Error + Ki * Error;
   
            MotorspeedRN = motorspeed_rechts + M_correctie;
            MotorspeedLN = motorspeed_links;
       
            analogWrite (6,  MotorspeedRN);
            analogWrite (9, MotorspeedLN);
   
            Serial.print (" R ");
            Serial.print (" ");
            Serial.print (S_rechts);
            Serial.print (" ");
            Serial.print (Error);
            Serial.print (" ");
            Serial.print (timechange);
            Serial.print (" ");
            Serial.print (M_correctie);
            Serial.print (" ");
            Serial.print (MotorspeedLN);
            Serial.print (" ");
            Serial.println (MotorspeedRN);
   
            S_rechts = analogRead (sensor_rechts)* 0,95;
            S_links = analogRead (sensor_links);
   
            last_time = now;
          }
             while ( S_links <= ref);
           
          }
      }
   
    }
    while ( S_afwijking == 0);
 
 
   Serial.println ("geen afwijking");
}




E-Schema's robot tommy.

In deze blog post ik de elektrische schema's van de Robot "Tommy".

Wat heb ik gedaan?

Systeem overzicht van een systeem bestaat uit verschillende lagen.



Door nu lager te gaan kijken dan het component niveau, kom je in de niveau's van samenstelling en onderdelen. Door je onderdelen zelf samen te stellen krijg je eigen component. Vaak is dit component goed koper dan een component dat je kan kopen. Dat heb ik gedaan. Nu heb ik twintig pagina's aan E-schema's. Deze schema's bestaan allemaal uit verschillende onderdelen. Eigenlijk kan je zeggen dat de schema's een soort van samenstellingen zijn. Elke samenstelling is een component.

Hetgeen wat ik probeer te vertellen is dat deze twintig pagina's aan E-schema's eigenlijk het sub-systeem Energie opslag & transport is, uit berekende onderdelen en deze samengekoppeld is een samenstelling wat dus weer leidt naar een Component.

Resultaat.
Hieronder de eerste pagina, deze pagina laat de "hardware" beveiliging zien van de robot.

Pagina twee, H-brug aansturing van de motor rechts.



Pagina drie, H-brug aansturing van de motor links.



Pagina vier, H-brug aansturing van de schaar lift motor.



pagina vijf, aansturing van de lucht kleppen.



pagina zes, de line tracking sensor schakeling. Bestaande uit een LED en een LDR met allebei een voorschakelweerstand.



pagina zeven, motor stroom beveiligingen.



pagina acht, de schakeling de ultra soon sensor uit te lezen.



pagina negen, de temperatuur regeling binnen in de systeem kast.



pagina tien, de gestabiliseerde voedingen voor de arduinos.



pagina elf, de aansluitingen van de uit en ingangen op de Master arduino.



pagina twaalf, de aansluitingen van de uit en ingangen op de Slave D1.0 arduino.



pagina dertien, de aansluitingen van de uit en ingangen op de Slave D2.0 arduino.



pagina veertien, de aansluiting van het I2C bus-systeem, met de daarbij behorende componenten.



pagina vijftien, de schakeling van de LED's die aangeschakeld worden voor de Line tracking LDR's



pagina zestien, Aansluiting van alle in en uitgangssignalen van de pick en place unit.



pagina zeventien, Aansluiting van alle in en uitgangssignalen van de A naar B unit.



pagina achttien, de signalen afkomstig van de schaarlift. Knop schaar lift hoog en knop schaar lift laag.



pagina negentien, de pull down schakeling van de schaarlift sensoren.



pagina twintig, de pull down schakeling van de Sensor line tracking breed sensoren.


Wat heb ik er van geleerd?


  1. Het ontwikkelen op onderdeel en samenstelling niveau maken mijn de grenzen van het project groter. Je kan dan je eigen printplaat ontwikkelen en deze aanpassen aan de ruimte die beschikbaar is. Dit geeft een groot voordeel.
  2. E-Schema's kan ik beteren tekenen in Autocad, want nu zit ik met de beperkingen van multi-sim.


Aansturing voortbeweging "Alfred"

Wat heb ik gedaan?

De aansturing van team Alfred ontworpen, het probleem was dat zij geen rekeningen houden met het vermogen van de motoren. Ik heb gevraagd naar de eisen van hun rij snelheid en de tijd die voor het optrekken staat. De acceleratie tijd was twee seconden.

De eisen en wensen heb ik ingevuld in mijn simulatie model van energie opslag en transport. Ook heb ik de parameters ingevuld die ik heb gekregen van de makers van de robot Alfred.

Hieronder zie u de resultaten die ik heb behaald.

Resultaat

Tabel
grenswaardes van de robot Alfred bepalen
Grafieken

Grafiek die de stroom door de motor weer geeft.
De kracht die nodig is tijdens het accelereren.

De acceleratie kromme tijdens het accelereren.
Elektrische-schema

Aansturing E-schema van de robot "Alfred"

* Let op de mosfet's, opamps en vrijloop diodes zijn niet de onderdelen die ik heb toegepast. De onderdelen licht ik toe in het kopje onderdeel keuzes.

Onderdeel keuzes.

Ik heb mijn keuzes van de onderdelen gebaseerd op de onderzoeksresultaten, hieronder laat ik nog een opsomming zien van de resultaten.


  1. Het maximale vermogen dat opgenomen wordt door de motoren, ligt ongeveer bij de 200 Watt.
  2. De maximale stroom die door de motoren vloeit ligt rond de 19 A. Deze stroom loopt er maximaal maar een aantal tiende secondes. Dit heeft te maken met het aanloopkoppel.
Door rekening te houden met deze twee resultaten kan ik, de mosfet gaan bepalen. Er zijn natuurlijk mosfets te koop van 6 euro die dit makkelijk kunnen schakelen. Maar als je goed doorzoek kom je mosfets die 3 euro kosten en dit vermogen kunnen schakelen. Zo bespaar je wel 3 euro per mosfet. Dus als er duizend robots gebouwd worden bespaar je je hiermee wel 3000 euro.

Mosfet keuze is uit gegaan naar,


IRFP 460 N. (URL link, mosfet), deze mosfet voldoet aan de eisen en wensen van de klant.


Opamp keuze is uitgegaan naar,



Opamp LM324N, (URL link,Opamp), groot ingangsspannings bereik. Goedkoop, bevat vier opamps.

Vrijloop diode keuze is uitgegaan naar,

Ik heb gekozen om een schotty Diode (URL link, Schotty Diode) toe te passen, want deze schotty diodes hebben een snel schakel gedrag. waardoor de stroom snel kan weg vloeien.

kostprijs schakeling,

€ 12 euro.



Test filmpje



foto's 

Besturing kastje "Alfred" 

Besturing kastje "Alfred"

Besturing kastje "Alfred"

Wat heb ik er van geleerd?


  1. Door ervaring op te doen met het excel simulatie programma, kan ik ook voor andere projecten snel en handig gebruik maken van die bestand. Want deze schakeling heb ik op een donderdag avond ontworpen en gebouwd. En mede dankzij het simulatie programma heb ik de onderdelen kunnen kiezen en beargumenteren waarom ik deze onderdelen heb gekozen.



Test motor reactie op LDR

Wat heb ik gedaan?

In deze post laat ik mijn onderzoeksresultaten zien die ik heb opgedaan tijdens het testen van de aandrijfmotor. Door dit onderzoek heb ik het regelgebied van de motor vast gelegd en daarbij ook mijn proces geoptimaliseerd en geparameteriseerd. Ook heb ik grenswaardes vastgelegd ten behoeve van mijn algoritme die ik in een andere blog post zal toe lichten.

meet opstelling van de test.


De meet opstelling met twee voltmeters er bij die spanning meten.

Een foto van de gehele meetopstelling met notie papier



























































Resultaat.


Door een eerder opgedane ervaring uit blok 6, kon ik mijn meet gegevens laten doorschrijven van arduino naar Excel.  Hieronder ziet u een stukje tabel, waar mijn meetgegevens naar toegeschreven werden.


  1. In de linker tabel staat de tijd genoteerd in (UU:MM:SS).
  2. De tabel er naast staat de ingangsspanning in Volts ( afkomstig van een potentio meter).
  3. De tabel daarnaast laat de waarde zien die de ADC omzet. 0 volt stuurt de ADC 0 bits. 5 volt stuurt de ADC 1024 bits.
  4. De een na laatste tabel laat de spanning zien die uitgestuurd wordt door de Arduino.
  5. De laatste tabel laat de bit waarde zien die de DAC uit stuurt.
Dit zijn vooral gegevens die gemeten worden door de arduino zelf en deze gegevens worden door geschreven naar Excel.

gedeelte van de tabel met meetgegevens uit de arduino





Om het werk gebied en het gedrag van de motor te kunnen bepalen heb ik nog een aantal meer gegevens nodig, zoals;
  1. omwentelingen van de motor in SI eenheden Rad/s.
  2. De spanning over de motor.
  3. De gemeten RMS spanning van het PWM signaal uit de arduino.
De resultaten van deze drie metingen heb ik hieronder in tabel opgeschreven.

tabel met meet gegevens uit de meet instrumenten.




Dankzij deze meetgegevens kan ik grafieken gaan vormen. Hieronder de grafiek die weergeeft hoe de motor reageert op het uitgestuurde PWM signaal. Zoals u kunt zien is het een tweede orde proces, want er zit een soort S-vorm in. Uit deze grafiek kan ik mijn regelgebied van de motor bepalen.

 Regelgebied van de motor



In dit gebied wil ik het proces gaan regelen, want hierin varieert het toerental het meest. Dus kan ik de robot tommy snel laten accelereren of deceleren.


Nog een belangrijk onderzoek resultaat is dat het toerental (rad/s) lineair oploopt met de toegevoerde hoofdspanning. Dit kunt u zien in de grafiek hieronder.

De hoofdspanningsverhouding uit gezet tegen de Rad/s
Wat heb ik geleerd?

  1. Het regelgebied van de bepalen. Om het regelgebied van de motor nog beter te kunnen bepalen moet ik de motor de volgende keer belasten. Want nu heb ik een onbelaste motor getest hieruit het regelgebied bepaald, maar dat is niet goed.
  2. In mijn C++ programma moet ik rekening houden met dat de DAC een bit waarde uitstuurt van 0 tot 255. Als mijn algoritme de uitgangswaarde versterkt boven de 255 of boven de grenswaarde van mijn regel gebied, dan heeft dat geen zin, want de wielen gaan dan toch niet harder draaien. Dit is een belangrijke eis, want anders worden de afwijking niet goed bij geregeld.

maandag 10 juni 2013

Aansturing voorbeweging robot "Tommy"

Wat heb ik gedaan?

De aansturing van de voortbeweging is een component van de het sub-systeem energie opslag & transport. Omdat een component samengesteld is uit een aantal onderdelen, is het uiterst belangrijk dat deze onderdelen zorgvuldig gekozen worden. Om deze onderdelen nauwkeurig te bepalen maak ik gebruik van twee tools, namelijk;


  1. Simulatie model van Energie opslag & milieu.
  2. Simulatie model voor het berekenen van Koelplaten.
De robot "Tommy" moet binnen drie seconden optrekken naar een snelheid van 1,2 m/s. Dit heb ik ingevuld in mijn simulatie van  Energie opslag & milieu. Zie tabel hieronder.

Tabel energie gegevens.















Uit de energie gegevens kan ik dan mijn maximale piek stroom aflezen. Deze maximale piekstroom kan ik in voeren in mijn andere simulatie model voor het bereken van de koelplaten.

Thermische berekening












Uit deze berekening is te zien dat er geen koelplaten nodig zijn. Toch heb ik hiervoor gekozen, want als de mosfets warm worden dan, worden ze toch nog passief gekoeld.

Resultaat.

Hier boven de grafiek van hoe Tommy accelereert van 0 m/s naar 1,2 m/s binnen 3 seconden.

Hier boven de grafiek welke kracht tommy minstens moet overwinnen om de snelheid van  1,2 m/s te behalen

Hierboven de grafiek van de afgelegde weg die tommy aflegt tijdens het accelereren.

Hierboven de grafiek van het vermogen die tommy opneemt tijdens  het accelereren

Hier boven de grafiek die weergeeft hoe het stroom verbruik is van tommy tijdens het accelereren.


























































Door dat ik nu bepaalde informatie weet kan ik mijn onderdelen preciezer bepalen. Op deze aangeleerde methode kan ik mijn schakeling optimaliseren, parameteriseren en helemaal uit detailleren.


Wat heb ik geleerd?

  1. Door het energie-simulatie model toe te passen, kan ik mijn schakeling optimaliseren. Eerst koos ik altijd wat is de hoogste mogelijke stroom die er kan lopen en nu kan ik deze stroom bepalen door het simulatie model. Zo kan ik dan kleinere onderdelen bestellen en dat is meestal voor de kostprijs gunstiger.
  2. Door een aantal parameters door te voeren naar mijn tweede simulatie (thermische koelplaatberekening) kan ik ook de koelende onderdelen beter bepalen. Dit heeft meestal ook invloed op de kostprijs, want de koelplaten dan kleiner. Dat betekend minder materiaal, dus goedkoper.