COMPUTERGESTUURDE RC AUTO PWS beoordelingsmoment 2 10-10-2008 Namen: Klas: Docent: Wilco Wisse, Jan van den Ende A6 STE INLEIDING Beiden programmeren we al enkele jaren. Daarom wilden we een onderwerp kiezen dat iets met programmeren en met de computer te maken heeft. Om de kennis van programmeren te gebruiken in het profielwerkstuk voor natuurkunde, moest dit gecombineerd worden met een natuurkundig probleem. Na wat gebrainstormd te hebben kwamen we op het volgende idee: een radiografisch bestuurbaar autootje aansturen met de computer. Dit onderwerp heeft twee aspecten. Ten eerste de softwarekant. Dit is vooral een informaticatechnisch probleem. Voor het aansturen van het autootje en andere mogelijkheden in de software moet een programma worden geschreven. Dit willen we doen door zelf een programma te schrijven die de elektronica in de afstandbediening kan aansturen d.m.v. de parallelle ofwel printerpoort. We programmeren de software in Java. Deze taal is platformonafhankelijk. Dit is vooral handig voor de pws-computer, die we voor het profielwerkstuk gebruiken, waar Linux op staat. Ten tweede is er de hardwarekant. Dit heeft vooral met natuurkunde te maken. Via de computer moet de afstandsbediening van het autootje worden aangestuurd. De afstandsbediening moeten we dus gaan aanpassen om er de parallelle poort op te laten aansluiten. Dit heeft dus alles te maken met elektriciteit: de signalen die vanaf de computer komen moeten tot gevolg hebben dat de afstandsbediening ingeschakeld wordt. Daarvoor moet bovendien de afstandsbediening doorgemeten worden, zodat de juiste elektronische componenten gekozen kunnen worden. Het autootje en de afstandbediening zijn niet zelfgemaakt. Met de printerpoort hebben we praktisch nog geen ervaring. We weten niet precies of dit wel allemaal te realiseren is met Java, daarom is dit onderwerp juist een uitdaging. 2 THEORIE Software Schema afhandeling acties hoofdprogramma ProfielwerkstukProgramma (Grafische deel) Stuur commando met tijdsduur Stuur commando voor onbeperkte tijdsduur Kernel (Besturingsdeel) Stuur byte ParPort (Native interface: extra bibliotheek voor Java die niet standaard aanwezig is). Printerpoort Parport Parport is een simpele Java class die het mogelijk maakt bytes te ontvangen en sturen van en naar de parallelle poort(printerpoort) van de computer. Het maakt hierbij gebruik van enkele C++ functies door middel van JNI, deze zijn niet standaard aanwezig in Java. Het gebruikt de functies van de programmeertaal C++ omdat Java in een virtuele machine draait en daardoor de hardware niet direct kan aanspreken, maar daarover meer onder het kopje Java. 3 Bij NT besturingssystemen (waaronder Win. XP) is uit veiligheidsredenen de rechtstreekse verbinding met de parallelle poort uitgeschakeld. Met het programma UserPort kan ingesteld worden welke poorten wél bereikbaar moeten zijn. Onder Linux is deze stap niet nodig, maar daar moet je wel als root ingelogd zijn om de poort te kunnen benaderen. Voor de volledigheid verwijzen we nogmaals naar de informatie op onze website. Java Java is een objectgeoriënteerde en platformonafhankelijke programmeertaal. Platformonafhankelijk wil zeggen dat Java programma's niet rechtstreeks op de hardware draaien, maar in een virtuele computer. De Java Virtual Machine. Dit betekent dat Java programma's op elk platform( Linux, Unix, Mac en Windows) draaien. De enige voorwaarde is dat de JVM voor elk platform opnieuw is geschreven, maar het voordeel daarvan is dat je niet elk programma voor elk platform opnieuw hoeft te schrijven. Het is zoals de Java slogan zegt: “write once, run anywhere.” Een nadeel hiervan is dat de hardware niet direct kan worden aangesproken omdat Java programma's dus niet direct op de hardware draaien. Er is dus geen communicatie over en weer mogelijk met hardware vanuit Java zelf. Er bestaat gelukkig wel een API die dat mogelijk maakt: JNI(Java Native Interface). JNI is een interface tussen Java programma's en programma's die in instructietaal voor de hardware(C++ o.i.d.) zijn geschreven, zogeheten native programma's. Hierdoor gaat wel de platformonafhankelijkheid van het programma verloren, want nu moet het native programma voor elk platform opnieuw worden geschreven. Van code tot programma Teksteditor broncode Compiler bytecode Uitvoering Java Virtual Machine Native code Besturingssystee m Processor opdrachten en geheugen opvraag enz. Processor + Hardware 4 Stappen uitgelegd: 1. Het programma wordt getypt in een teksteditor (géén tekstverwerker). 2. De broncode wordt door de compiler omgezet in bytecode die wordt begrepen door de JVM. 3. De bytecode wordt door de JVM uitgevoerd. En omgezet naar de bytecode die de hardware begrijpt en wordt naar het besturingssysteem gezonden. 4. Het besturingssysteem zorgt voor de geordende afhandelingen van de aanvragen en commando's van de native code. Hardware -Parallelle poort/printerpoort De parallelle poort ook wel (LPT- of printer poort genoemd) bestaat uit 25 pinnetjes. Elke keer als de computer informatie naar de printer stuurt, worden er 8 bits (dat is één byte) tegelijk verzonden. Daardoor komt het aan de naam Parallelle poort. Pin # Label 2 D0 Bit waarde om naar de poort te sturen 20 = 1 3 D1 21 = 2 5 4 D2 22 = 4 5 D3 23 = 8 6 D4 24 = 16 7 D5 25 = 32 8 D6 26 = 64 9 D7 27 = 128 Zoals aan de afbeeldingen en tabellen is te zien, kan er naar de poorten 2 t/m 9 data worden verstuurd. Pin 18-25 is de aarde. De poort heeft een spanning van 5 Volt en een stroomsterkte van 10-15 milliampère wanneer de pin “aan” staat. De overige pinnetjes hebben functies die voor ons niet van enige waarde zijn. Relais Definitie Een relais is een schakelaar die wordt bediend door een elektromagneet. Hiermee kan een zwakke stroom door middel van de elektromagneet bijvoorbeeld een nieuwe en sterkere stroomkring openen of sluiten. Constructie Een relais bestaat uit een spoel die fungeert als elektromagneet. Zodra er op die spoel een passende spanning wordt gezet(S1, S2), wordt er een magnetisch veld opgewekt en schakelt er ergens een contact(C) om, zodat er een stroomkring(NC, NO) wordt geopend of gesloten. Zodra de spanning wordt verbroken, schiet de schakelaar weer terug naar zijn oorspronkelijke positie door middel van een veer o.i.d. De meeste relais hebben meerdere contacten. Een Common-contact(C), een maakcontact(NO) en een breekcontact(NC). Het laatste contact is altijd gesloten bij afwezigheid van de stuurspanning(spanning die nodig is om te laten schakelen). 6 Toepassing Een relais wordt gebruikt om met een kleine spanning een grotere stroom te kunnen schakelen. Er zijn dus eigenlijk twee circuits die door elkaar worden gescheiden met behulp van een relais. De mogelijkheid om twee circuits van elkaar te scheiden, kunnen wij gebruiken om met behulp van de stroom uit de printerpoort de stroomkring van de afstandsbediening te sluiten. Hieronder staat een schematische weergave van onze hardware, waarin het relais de hoofdrol speelt. Circuit 1 is op de printerpoort aangesloten, deze regelt circuit 2 zoals onder de afbeelding wordt uitgelegd. Onderdeel A is de printerpoort. Als deze ‘spanningsbron’ aanstaat zal hierdoor het relais (B) ingeschakeld worden. Onderdeel C is de drukknop die op de afstandsbediening aanwezig is. Deze willen we niet gebruiken omdat we met behulp van de printerpoort willen schakelen. Het relais overbrugt de schakelaar zodat met behulp van circuit 1, circuit 2 kortgesloten kan worden. Voor de volledigheid: onderdeel D is de voeding in de afstandsbediening zelf en onderdeel E stelt de inwendige elektronica van de afstandsbediening voor. De printerpoort heeft een spanning van 5V. De maximaal belastbare stroomsterkte bedraagt 10-20 mA. Met behulp van deze gegevens moet een geschikt relais gekozen worden. De nominale spanning moet dus 5V zijn. Voor de spoelweerstand geld: Rmin = U / Imax U = 5V Imax = 20 mA = 0,020A Rmin = 5 / 0,020 = 250Ω 7 De volgende relais uit de Conrad catalogus komen in aanmerking voor gebruik: Voor meer informatie: vul het artikelnummer in op de website van conrad: www.conrad.nl. Artikel nummer: 503410 – 89 Prijs: €5,29 per stuk Afm.: (lxbxh) 13.5 x 8 x 8 mm IS max.: 1A Schakelvermogen: 60 W/AC / 30 W/DC Schakelspanning: 125 V/AC/150 V/DC RM: 5.08 mm Contactsoort: 1 wisselaar Rspoel: 320 Ω Nominale spanning (spoel): 5V Conform RoHS: Ja Prijs: €3,69 per stuk Artikel nummer: 504513-89 Afm.: (lxbxh) 19.1 x 6.6 x 10.2 mm Vermogen: 10 W Contactbelastbaarheid: 10 W Nominale spanning: 5 V/DC Weerstand: 500 Ω Continuegrensstroom: 0.5 A Contactsoort: 1 sluiter Max. schakelspanning: 100 V Conform RoHS: Ja Prijs: €2,89 per stuk Artikel nummer: 504572-89 Afm.: (lxbxh) 19.1 x 6.6 x 10.2 mm Vermogen: 10 W Contactbelastbaarheid: 10 W Nominale spanning: 5 V/DC Weerstand: 500 Ω Continuegrensstroom: 0.5 A Contactsoort: 1 sluiter Max. schakelspanning: 100 V Conform RoHS: Ja 8 Artikel nummer: 504599 – 89 Prijs: €2,69 per stuk Afm.: (lxbxh) 19 x 5.08 x 7.4 mm IS max.: 0,5 A Schakelvermogen: Max 10 W Weerstand: 500 Ω Contactsoort: 1 sluiter Max. schakelspanning: 200 V= Conform RoHS: Ja Voedingsspanning: 5 V/DC 9 ONTWERPPROBLEEM, PROGRAMMA VAN EISEN EN ONTWERPVOORSTEL De vetgedrukte deeloplossingen hieronder worden gekozen. Voor toelichtingen op de keuzes: zie de screenshots op de site van dit profielwerkstuk: www.profielwerkstuk.freehostia.com Hoofdprobleem 1: Er moet software gemaakt worden voor zenden van signalen naar de printerpoort. Het programma moet: 1. Het autootje direct kunnen aansturen. - Door middel van knoppen in het programma. - Met de pijltjestoetsen van het toetsenbord. - Met de beweegrichting van de muis wordt de auto aangestuurd. 2. Volledig grafisch zijn. - Met Java een Frame maken en tonen op het beeldscherm. - Gebruik maken van output naar de command. 3. Overzichtelijk zijn. - Voor elke toepassing een ander programma - Voor elke functie wordt een nieuw venster geopend vanuit een hoofdprogramma. - In het hoofdprogramma zijn verschillende tabbladen waarin de onderdelen verwerkt zitten. - Boven de verschillende onderdelen staan de namen ervan. 4. Een traject uit kunnen zetten die het autootje volgt. - Verschillende stuurhoeken en afstanden die opgeven worden in een tekstveld, die het programma uitvoert. - Het autootje volgt een route die getekend kan worden op het scherm. 5. Weergeven welke acties uitgevoerd worden. - De rijopdrachten worden onder elkaar weergegeven in een tekstveld (logvenster). - Alleen de opdracht die uitgevoerd wordt, wordt weergegeven op een label. - De rijopdrachten worden naar de command geschreven. Aparte eis na keuze deelprobleem 1: 1. De knoppen van het programma moeten te bedienen zijn (oplossing voor het 10 feit dat geen twee knoppen tegelijkertijd ingedrukt kunnen worden). - Een knop staat aan totdat er opnieuw is geklikt op die knop. - Na het klikken op een knop voert deze de opdracht uit voor een instelbare tijdsduur (invoerveldje). Aparte eisen na keuze deelprobleem 4: 1. Tijdens het rijden moet weergegeven worden aan welk deel van de route de auto bezig is. - Een punt dat beweegt op de route. - Het huidige lijnstuk krijgt een andere kleur. - De gepasseerde punten krijgen een andere kleur. 2. Tijdens het rijden moet weergegeven worden op hoeveel procent van de route de auto is. - Een progressbar - Het aantal procent weergeven in het rijgebied op het scherm. 3. Van het punt moet tijdens het slepen getoond worden welke hoek hij maakt en welke lengte afgelegd wordt. - Deze gegevens worden in de hoek van het programma weergegeven. - Worden bij het te verslepen punt gezet worden en meebewegen tijdens slepen. - Worden in een apart venster in een tabel genoteerd. 4. Dit moet ook achteraf getoond kunnen worden. - Elk punt kan geselecteerd worden door erop te klikken. - In een tabel kan van elk punt de gegevens opgezocht worden. 5. Het traject moet instelbaar zijn wat betreft de eigenschappen van het autootje(schaal, snelheid, stuurgevoeligheid). - Verschillende schuifbalkjes op het rijgebied op het scherm. - Verschillende schuifbalkjes in een apart dialoogvenster. - Tekstvakken om de gegevens in te voeren op het rijgebied op het scherm. - Tekstvakken in een apart dialoogvenster. 6. De route moet verwijderd kunnen worden - Automatisch verwijderen na het rijden van de route - Een aparte verwijderknop - onder het rijgebied - die hiervoor zorgt. - Een aparte verwijderknop – in het instellingen dialoogvenster - die hiervoor zorgt. Aparte eis na keuze deelprobleem 5 1. Het logvenster moet geleegd kunnen worden - Een leeg-knop onder het logvenster. - Alleen de laatste 10 opdrachten blijven staan de rest wordt verwijderd. 11 Hoofdprobleem 2: Er moet hardware gemaakt worden om het signaal om te zetten in een actie. 1. Moet veilig zijn - Gebruik maken van een oude computer (gevolgen minder erg als het toch fout gaat). - De onderdelen niet te dicht bij elkaar solderen zodat minder snel kortsluiting ontstaat. - Gebruik maken van goed geïsoleerde draad. - Gebruik maken van een beschermkapje over de elektronica. 2. Een elektrische stroom uit de printerpoort moet de schakelaar van de afstandsbediening aansturen. - Gebruik maken van relais. - Gebruik maken van transistor. 12 WERKWIJZE Materialenlijst Hardware Rc autootje Afstandsbediening Computer met printerpoort Printerkabel 4 relais bedrading Software Parport Userport voor Windows. JDK (Java Development Kit) Teksteditor (JCreator, Wordpad, Kladblok, Kate) 13 Installatie Software: Parport pak het zip-bestand uit en plaats de map in de map waarin het javaprogramma zich bevindt. plaats parport.dll uit de map parport in de map [JRE]/bin/. Bij linux moet het bestand libparport.so in de map: /usr/lib/jvm/[jdk]/jre/lib/i386 worden geplaatst. UserPort Download het zip-bestand met Userport onder het kopje Downloads Pak het zip bestand uit op de plek die je wilt In de uitgepakte bestanden is het bestand "UserPort.sys" aanwezig. Dit moet je kopiëren naar %windir%/system32/drivers/. In de uitgepakte bestanden vind je "UserPort.exe". Dit moet je starten. Klik linksonder in het programma op "Start". Als het goed is draait de driver nu op de achtergrond. Je kunt op exit klikken. Om de driver te stoppen moet "UserPort.exe" opnieuw gestart worden en op "stop" geklikt worden. JDK Download en installeer de setup. Het is te downloaden van onze site. Voor alleen het draaien van de software is alleen de JRE(Java Runtime Environment) nodig. JCreator of andere teksteditor (JCreator is eenvoudig voor beginners) Download van http://www.jcreator.com/download.htm Installeer de setup 14 Aanpak hardware Open de afstandsbediening Zoek uit welke pinnetjes(4) van de schakelaar met elkaar moeten worden verbonden voor een gesloten stroomkring. Sluit op die pinnetjes het relais aan zoals op de afbeelding hiernaast is vermeldt. Verbind het relais met de printerpoort. Hierbij moet één draad aan één van de pinnen 2 t/m 9(data) en de andere draad in één van de 18-25(aarde) pinnen. Doe dit met elk van de vier schakelaars. 15