PDI -- Peanut Defence Initaitive, eller hur man bygger en jordnötskastare. ========================================================================== Det var på våren 1988 och NASACON IX närmade sig med stormsteg. NASACON är en årlig SF kongress som hålles någonstans i Fisksätra. Förutom det litterära, arrangeras även det så kallade jordnötsloppet. Jordnötsloppet är en tävling där det gäller att förflytta en jordnöt minst två meter, över ett av tävligsledningen uppmätt område. Alla medel är tillåtna utom att över området tillföra mänsklig energi. Dvs, man får kasta över nöten, men inte bära den. Stilpoäng utdelas. Den som får högst stilpoäng vinner tävlingen. På NASACON VIII, året innan, hade SAFA (Svenska Arbetsgruppen För Algoritmforskning) ställt upp med PDI i jordnötsloppet. Den dåvarande PDI-konfigurationen bestod av en voice coil magnet från en utrangerad RP03:a, den som används för att förflytta läs/skrivhuvudena. En sådan magnet är klart imponerande. Efter transport i bil, har de flesta lösa verktyg man hade i bagageluckan hittat dit. I stället för den medföljande spolen tillverkades en egen av en avsågad 1-liters T-spritflaska, som visade sig ha samma diameter som originalspolen. På toppen av flaskan (vid korken) monterades ett cigarretui, i vilket sedan jordnöten skulle placeras. För att skjuta iväg spolen anslöts sedan ett kraftigt kondenstorbatteri via en kontaktor. För att öka imponator- effekten ytterligare styrdes det hela från en portabel dator med talsyntesprogram. Det hela blev mycket uppskattat och SAFA vann tävlingen. Nu gällde det alltså att försöka hitta på något ännu häftigare. På arbetet (Mikrologik AB) satt jag för tillfället och uppdaterade programvaran till GME-systems positioneringssystem Mikropos 300. Det var då jag kom att tänka på möjligheten att montera en sked direkt på motoraxeln och sedan snäppa iväg jornöten med skeden på något intressant sätt. Mikropos 300 är styrdatorn i ett generellt positioneringssystem för enklare maskinstyrningar etc. Ett sådant system består i huvudsak av: Servomotor med tachometer för hastighets-återkoppling och en pulsgivare för positionsåterkoppling. Till detta kopplar man en drive och en Mikropos. En drive är i princip ett effektsteg med en hastighetsregulator. En analog insignal styr motors hastighet, 0V = Stå stilla, +5 V = halv fart framåt, +10 V = full fart framåt, -5 V = halv fart bakåt etc. Mikropos är kopplad till pulsgivaren och denna styrsignal. Från Mikropos kan man sedan styra motorns position, hastighet och acceleration, se fig 1. Ett timerinterrupt i Mikropos beräknar varje ms en ny önskad hastighet och position för motoraxeln. Den beräknade positionen jämförs med den verkliga positionen (från pulsgivaren), Denna skillnad kombineras med den önskade hastigheten för att ge ett nytt hastighetsbörvärde till driven. För att sedan kunna styra det hela på ett effektivt och flexibelt sätt finns det en interpreter som interpreterar ett för positioneringsändamål specialutvecklat språk kallat P. Språket P påminner till utseendet om en blandning av Basic och Assembler, se listningen. Nu skulle jag alltså testa ifall det skulle vara praktiskt genomförbart att montera en sked eller liknande på motoraxeln, lägga en jordnöt i skeden och sedan på ett konstfullt sätt skicka iväg jordnöten minst 2 meter. En plastsked monterades provisoriskt och försök med att kasta muttrar påbörjades. Någon timma, ett antal plastskedar och många muttrar senare skickades den första muttern med en kraftfull forehand i väggen. Det fungerade alltså, med serve! Nu behövde följande göras/byggas: Ett riktigt fäste för skeden, en ställning för motorn, en laddare av något slag (det vore ju inget roligt att bara lägga jordnöten i skeden), skriva styrprogram i P för att kontrollera skedens rörelser, ett häftigt menyprogram till I*M PC med imponatoreffekt, affischer och ett föredrag med OH-bilder visandes PDI's funktion. Vi delade upp arbetet så att Nils tog hand om menyprogrammt, Jörgen fick fixa föredraget, Jag P-programmet, och Jag + Jörgen de mekaiska bitarna. En helg ca 1 månad före NASACON var undertecknad hos Jörgen för att bygga behövliga mek-bitar. En ställning till motorn svetsades samman och slipades till av ett par meter fyrkantsrör. Detta skedde under svåra protester från en finsk barnkör, som övade ute på gräsmattan. Vi fick bara använda slipmaskinen i korta intervaller, medan kören drack saft och åt bullar eller var allmänt religiösa. Därefter skulle mataren för jordnötterna konstrueras. Vi tänkte oss att nötterna skulle ligga i ett magasin (a la k-pist) som ledde till en ränna och sedan flyttades därifrån med en kolv. Detta visade sig dock inte fungera i praktiken. Problemet var att toleransen hos jordnötterna var betydligt sämre än hos 9 mm's ammunition. Efter ett antal timmars provande och testande kunde vi klara max två till tre jordnötter i magasinet utan att de fastnade i varandra. Det är förvånansvärt på hur många olika sätt jordnötter kan trassla ihop sig. Vi gjorde en back-tracking (som det heter i prolog) och hamnade till sist på den välkända Colt-principen. Den verkade tillräckligt enkel för att kunna fungera med jordnötter. Alltså, en revolver med plats för tolv jordnötter sågades ut ur en spånplatta, en ställning löddes ihop av kretskort och stagades med tråd och ännu mera kretskort. Nu återstod bara rännan som nötterna skulle glida nedför för att hamna snyggt och prydligt i skeden. Det visade sig vara ett icke-trivialt problem. (För de som inte tror mig: Skaffa en påse oöppnade jordnötter och prova själv!) Någon gång vid midnatt var vi nöjda med resultatet. En vecka senare fanns en preliminär version av styrprogrammet klart. Det var nu dags för samkörning mellan PC:n och Mikropos, dock fanns det inget menyprogram. Nils S höll på, men var inte klar. Nils hade hittat en Modula-II kompilator för PC på KICKI. Som demoprogram för en medföljande multitask-hanterare fanns ett terminalemulatorprogram. Nu höll Nils på att hacka om detta program till ett PDI/2 menyprogram, detta för att enklare kunna köra seriekommunikationen mot Mikropos. Medan jag trimmade positioneringsprofilerna till Mikropos skrev Jörgen följande spec till Nils: ================================================================ Nya specar på de strängar som skall styra PDI/2, the sequel ----------------------------------------------------------- PDI hardware team har i sin godhet beslutat införa en del nya strängar att styra nötkastaren med. Dessutom har en ny form av kommunikation införts. Allt för att glädja herr programmeraren av användarinterfejset. NY KOMMUNIKATION ---------------- Prompten och loginmeddelandet fås som tidigare. Nu gäller det att mata värden till och läsa värden ur register istället. Läser gör man på följande sätt: DISP Rnn Svaret blir: Rnn= m och en ny prompt. Att stoppa ett värde i ett register går till på följande sätt: LET Rnn, m varvid svaret blir en ny prompt. NYA STRÄNGAR ------------ Alla kommandon enligt tidigare spec har utgått och ersatts av att man matar in värden i register och skickar till Mikropos istället. Svaren får man genom att läsa andra register. Denna metod bryter inte exekveringen, som ^C gjorde. Värdena och åtgärderna för register R20 kvarstår dock i stort sett oförändrade. Registren kan pollas när som helst och svar kan fås när som helst under kör- ningen. Vi har nu fyra register, R20, R21, R22 och R23. Reg Läsfunktion Skrivfunktion --- ----------- ------------- R20 status N.A. R21 =0, kommandot Skjutochladdkommando accepterat. Nytt kommndo kan ges omedlebart, ett kommando kan ligga pending R22 antal nötter antal nötter kvar i revolvern efter nyladdning R23 Hur många nöt- Antal nötter att ter kvar att automatskjuta automatskicka Detaljer, R20 ------------- Om R20 är gäller följande status 0 MP måste startas, ge "^CRUN" 1 Klart att ge startkommando 2 Klart att ge startkommando Detaljer, R21 ------------- Om R21 läses till noll är det nyss givna kommandot accepterat. Alla andra värden skall ignoreras. Värden skrivna till R21 är skjutkommandon. Dessa är följande: Tal Betydelse 1 Misslyckad laddning av jordnöt, sked för hög 2 Misslyckad laddning av jordnöt, sked för låg 3 Lyckad laddning, svagt kast (0.5 meter) 4 Kastar jordnöt och tar den igen, kastas därefter enl 3 5 Lyckad laddning av jordnöt, men tappar den senare 6 Vevar skeden fram och åter, winding up spoon power 7 Enkelt kast av jordnöt. Tävlingskast utan serve 8 Slag med serve, framåt, tävlingsslag 9 Mycket hårt slag med serve, bakåt. Jordnöt sannolikt krossad 10 Livsfarligt kommando, skeden går 600 rpm samtidigt som magasinet töms. Jordnötter sprutar åt alla håll 11 Automateld, tävlingskast, snabbare än om det görs som upprepade 7 ef- tersom, tja skit i det. Antal jordnötter som skjuts anges i R23, före skottet. 12 Skeden går som sekundvisare, tills annat kommando ges. Skjuter nötter varje minut, tills nötterna är slut 13 Automateld med krossfunktion, mycket illusoriskt, jordnötsdimma 14 To be determined ... bzz .. . Detaljer, R22 ------------- Häri skrivs hur många nötter det nu finns i revolvern, om Mikropos skulle ha en avvikande mening, dvs när man skjutit slut och laddat. Max antal nötter är tolv (12). Detaljer, R23 ------------- Häri skrivs hur många nötter nästföljande automateldkommando skall skjuta. Automateld genom Mikropos försorg blir snabbare än om du skall ge flera skjutkommandon i serie på grund av att skeden inte behöver återställas efter varje skott. Värdet som skrivs i R23 får naturligtvis inte vara högre än det som läses ur R22. /Jörgen ================================================================ Två dagar innan tävlingen: Nu var det hög tid för samkörning. Nils var dock inte riktigt klar ännu, några detaljer var kvar att fixa, bl.a läsning av registervärden från Mikropos. Samkörningen gick hyfsat tills läsning av registervärden skulle provas. Ett allvarligt problem upptäcktes: Om det blev ett enda överföringsfel på seriekanalen så hamnade alla processerna i PC:n i WAIT, och det fanns ingen timeout-möjlighet. Olika alternativ övervägdes och förkastades. Det hela skulle gå att lösa snyggt om multitaskhanteraren hade varit styrd från timer-interruptet eller hade haft en funktion motsvarande SimulaSimulations HOLD. Vid midnatt var det dags att ge upp för dagen. Hemma, med källkoden till multitask-hanteraren försökte jag laga till en HOLD-funktion. Efter någon timmas funderande fanns ett utkast klart. En dag innan tävlingen: Den nya HOLD-funktionen provas och visar sig fungera. Meny-programmet skrivs om för att utnyttja den, och allt verkar funka ok. Nils ritar nya skärmbilder, ändrar andra och fixar in nya finesser i programmet som diverse oljud mm. Under tiden plockar jag och Jörgen ihop de saker som skall användas, fixar kablar till högtalare etc. Tävlingsdagen: Vi har nu en konfiguration enl fig 2. På förmiddagen ställs allt upp för en sista testskjutning. Allt fungerar ok. (Se bild 1 och 2) Vi monterade ned grejorna och lastade i två bilar för färd mot Fisksätra skola. Allt bars in i stora aulan i väntan på tävlingen. Vi hade ansökt om att bli sista deltagare vilket tävlingsledningen också beviljade. Jörgen, iklädd vit rock, och något svamligare än vanligt drog teorin bakom PDI. Han hade faktiskt utarbetat ett program som följdes i huvudsak: ================================================================ PEANUT DEFENCE INITIATIVE the sequel på Nasacon 9, 1988 1. Sakerna ställs upp inför publik 2. Overheadpresentation 3. Skjutning 4. Undertecknande av onlookers award ####################### 2. Overheadpresentation ####################### SAFA och PDI PDIs historia PDI och framtiden PDI i ett militärhistoriskt perspektiv, redan Lionardo da Vinci... PDI är naturligtvis helt ofarligt för Sveriges befolkning. Som vi redan har visat med vår förra demonstration, den elektromagnetiska kanonen, är de förstörelsevapen SAFA framställer helt riskfria för den egna nationen. Naturligtvis är eldkraften så stor att ingen annan nation skulle våga ett anfall. Som vanligt framställer SAFA bara vapnen för forskningens skull och skall de sedan användas är det ju politikernas sak, vi tar inte ställning till den saken. Vi gör bara vad som är bäst för landet. (Overhead ON!) Projektet studerades denna gång mycket ingående och under några hektiska veckor i juni färdigställdes och togs hela utrustningen och all programvaran fram. Det var The SAFA Night Hacking Team, vilka alla finns representerade här idag, som arbetat till långt in på nätterna vid terminaler och lödkolvar för att få allt färdigt till denna viktiga demonstration, idag. För att ni skall kunna föreställa er vilka svårigheter detta projekt bjöd på skall jag ta er på en kort rundvandring genom årets jordnötskanons alla delar. Gå igenom konstruktionen Sluta med att utlova en award ############ 3. Skjutning ############ Och nu får jag be alla intresserade stiga fram och flockas kring bildskärmen men se upp för kanonen, eftersom den är farlig och kan ställa till med personskador om den vidrörs. Det visade sig bland annat under projektets gång, då skedenheten lossnade från motordelen och flög och studsade genom hela laboratoriet, slog märken i en printer och slutligen hamnade i ett angränsande rum. Presentera maskinens olika delar Tala om problemen som uppstått under projektets gång, olika skjutfel, nötterna hamnade på alla andra ställen än där de skulle. Det stod från början helt klart att nötterna måste automatmatas, inte kunde man hålla på att lägga i dem för hand inte. Vi hade på gång en helt annan matarteknik, nämligen en matare med liggande nötter, men det visade sig inte fungera så bra, revolvern fick bli lösningen. Många teorier prövades, rörande det optimala skottet och vi ska be att få visa några av dem, senare. Spoon-enheten var ursprungligen av plast, men detta gav sådana problem med flygande splitter i lablokalen att den snabbt utbyttes mot en i ett mera beständigt material, nämligen stååååål! Dessutom visade det sig att vi behövde ett specialfäste som tålde höga accelerationer, varför ett dylikt svarvades av Delrin. Demo av the spoon unit. Nu måste fjädern spännas, så vi tar och vevar upp spoon-enheten. Veva skeden fram och åter-demon Demo av olika laddnings-metoder Misslyckad laddning, sked för hög LOAD TOO HI Misslyckad laddning, sked för låg LOAD TOO LO Tappar nöten LOAD 'N DROP Släng upp nöten och fånga igen CATCH Demo av eldkraften, tidigt försök Svagt kast LOAD OK 50 CM Tävlingskastet, FÅR VI NU BE TÄVLINGSLEDNINGEN FRAMBÄRA N Ö T E N och ladda den i revolvern! Enkelt kast ----- tävlingsjordnöt ------- ONESHOT 1 Andra, kraftigare skott Slag med serve ONESHOT 2 Hårt slag bakåt BACKFIRE "All out superpower confrontation" kommando 10, slumpmässigt nötsprut, sk asynkron kross LETHAL!! kommando 11, lyckad automateld AUTOFIRE Medan domarna nu bestämmer sig för vilket bidrag som skall vara det vinnande, låter vi klockan gå! Observera med vilken precision vårt urverk spinner, etc. Klock-kommandot CLOCK Under tiden kan vi få be alla hugade åskådare att stiga fram och emottaga ett bevis på att ni stått ut med denna demonstration, the PDI Onlookers Award. ####### S L U T ####### ================================================================ Det hela vart så lyckat att vi tyckte det var synd att bara deltagare på NASACON fick bevittna det hela, så efter ett tag fanns följande meddelande att läsa på diverse ställen: ================================================================ SAFA visar PDI/2 på STACKEN-möte. På Stackenmötet Torsdagen den 7/7-1988 kl 19:15 i sal E7 kommer SAFA att demonstrera PDI/2, årets vinnare av jordnötsloppet på NASACON IX. PDI står för "Peanut Defence Initiative" och PDI/2 består i huvudsak av en datorkontrollerad motordriven sked med vilken man på ett antal konstfulla sätt kan slunga iväg en jordnöt. Till denna sked är ett revolvermagain för 12 nötter anslutet. Maximala eldhastigheten är omkring 1 jordnöt/sekund. Eftersom PDI/2 blev synnerligen uppskattad på NASACON och är kraftigt datoriserad så är det något som en sann hacker bara måste se. MISSA INTE DETTA UNIKA TILFÄLLE!!! ================================================================ Detta skedde också på utlovad tid, samt på kåren och vid ett senare tillfälle i Stackens lokal. /Thord Nilson. FAKTARUTA: ---------- Motor: ElectroCraft S-26-1A. Kont Moment: 2.5 Nm Toppmoment: 20.7 Nm Max varvtal: 3000 rpm Max kont uteff: 700 W Mek tidskonst: 6 ms El tidskonst: 1.7 ms Max kont ström: 7.5 A Max toppstöm: 60 A Vikt: 7 Kg Pulsgivare: Leine Linde, 1250 Pulser/Varv. Detta pulstal multipliceras sedan med 4 internt i Mikropos vilket ger en effektiv upplösning på 5000 pulser/varv. Drive: GME System PWE 6010. Styrsystem: GME System Mikropos 300. ================================================================ Bilder: (Se märkning vid bild på kontaktkopia. Bilderna klippes in på lämpliga ställen i texten.) Foto: Rickard Andersson. Bild: Föreställandes. (Märkn neg) 1 TX2: Testuppkopplingen på Mikrologik begrundas av Jörgen och mig. 2 TX3: Nils som PDI commander vid testkörning på Mikrologik. 3 TX4,5: Uppställningen vid NASACON, i vila. 4 TX6: Uppställningen vid NASACON, aktiv. 5 TX7: Vid NASACON, PDI utför CATCH, jordnöten kastas upp i luften, skeden backar ett varv för att sedan fånga nöten när den faller ner. ================================================================