Folks racking up debt

★
Mike Driver

@theartofmadeline
Fai_Ryy
official daine visual archive

Discoholic 🪩
sheepfilms

PR's Tumblrdome
d e v o n
Aqua Utopia|海の底で記憶を紡ぐ

izzy's playlists!

⁂
2025 on Tumblr: Trends That Defined the Year
Xuebing Du

Origami Around

titsay
he wasn't even looking at me and he found me

❣ Chile in a Photography ❣
No title available
tumblr dot com

seen from Romania
seen from United Kingdom
seen from T1
seen from United States
seen from Australia
seen from Malaysia

seen from Malaysia

seen from United Kingdom

seen from Malaysia
seen from United States
seen from Germany
seen from Jamaica

seen from Italy

seen from Israel

seen from Germany

seen from Bangladesh

seen from United Kingdom

seen from Australia
seen from Oman

seen from Malaysia
@101100101-blog
Folks racking up debt
Final Code.
Below
Overview. (Halfway to a mood sheet)
Jordan Sjol
4 May 2012
Interactive Electronics
Prof. Jason Krugman
Debt! the pinball machine.
Debt! is a handmade pinball machine riffing on the game dynamic of student loans. By activating the stimulating elements of the game, the player racks up debt—and takes out loans—to determine her final score.
Given a starting balance of $10,000 a player interacts with elements that cost (tuition, fees, meal money, etc.) or earn (you found work). When her balance hits 0, the player is given a loan that increases her balance and debt by $10,000. Her final score is her total debt less her current balance.
Each costing element triggers flashing red lights, as the earning element triggers flashing green lights. A skilled player can graduate by playing long enough (and racking up debt), but many games end when the player drops out. A scoreboard run on the Processing programming language is displayed on a laptop plugged to the machine. At the end of the game the scoreboard displays the final score (total debt) and a number of years to freedom.
Jordan Sjol is an artist, a writer, and a media theorist. He has been effected by student debt.
Arduino and Processing Codes!
After the break: Codes. (read more...)
Processing:
import processing.serial.*; Serial myPort; int lf = 10; import ddf.minim.*; //for loadfile AudioPlayer player; Minim minim; int score = 10000; int debt = 0; int ball = 0; float mChange = .11; float mVal = 0; float endTime = 0; float endPlus = 0; int endYears = 0; String scoreString; String debtString; String varstring; //for test// String ballstring; //for test// String endTimeString; //for test// String endPlusString; String debttString; //for endgame String endYearsString; int dex = 900; int dexx = 1600; int sex = 1; //for setting endTime uniquely char invar; void setup() { size(800,500); println(Serial.list()); myPort = new Serial(this, Serial.list()[0], 9600); myPort.bufferUntil(lf); minim = new Minim(this); player = minim.loadFile("pix.mp3"); //player.play(); } void draw() { background(0,0,0); ballstring = str(ball); //for test textSize(20); fill(250,180,6); text(ballstring,5,20); if(ball==0){ textSize(169); fill(250,180,6); text("DEBT!", 160, 250); textSize(32); text("(the pinball machine)", 300, 300); endPlus = second(); //if(endPlus%2 == 1){ textSize(20); fill(180,140,0); text("Press Start", 330,360); //} textSize(14); text("Created by Jordan Sjol", 610,470); score = 10000; //reset the score, debt, & matriculation status debt = 0; mVal = 0; invar = myPort.readChar(); switch(invar){ case 'f': ball=ball+1; myPort.clear(); } } if((1<=ball && ball<=3)||(ball==4 && mVal>=450)){ textSize(35); fill(250,168,3); text("Balance", 300, 300); textSize(24); text("Debt", 100, 300); scoreString = str(score); text(scoreString, 300, 350); debtString = str(debt); text(debtString, 100, 360); textSize(39); text("Debt!", dex, 80); dex = dex - 3; if (dex<=-600){ dex=900; } textSize(32); text("(the pinball machine)", dex + 240, 80); text("Debt!", dexx, 80); dexx = dexx - 3; if (dexx<=-600){ dexx=900; } textSize(32); text("(the pinball machine)", dexx + 240, 80); textSize(18); text("Matriculation Timeline", 120, 450); textSize(12); text("by Jordan Sjol", 710,20); rectMode(CORNER); fill(100,40,3); rect(100,460,600,20); stroke(0); fill(255,190,8); rect(100,459,mVal,21); if(mVal<=600){ mVal=mVal+mChange; } noStroke(); fill(220,108,3); rect(250,460,4,20); rect(400,460,4,20); rect(550,460,4,20); if(mVal>=450){ textSize(20); text("Extra Ball", 575, 450); //extra ball sound } invar = myPort.readChar(); // varstring = str(invar); //for test //text(varstring, 500, 100); switch(invar){ case 'a': score = score - 231; break; case 'b': score = score -232; break; case 'c': score = score - 1680; break; case 'd': score = score -5080; break; case 'e': score = score +7861; break; case 'f': //FOR TEST: TAKE OUT SO start won't trigger ball = ball+1; break; case 'g': ball=ball+1; endTime=second(); break; } if(score<=0){ score=score+10000; debt=debt+10099; } myPort.clear(); } if((ball==4 && mVal<450) || ball>=5){ //stop audio background(0,0,0); if(sex == 1){ endTime = second(); sex=69; } endPlus = second(); textSize(120); text("GAME OVER", 20, 170); //play "game over" audio if(endPlus-endTime >1){ textSize(37); if(mVal>=600){ text("You Graduated", 150, 200); } if(mVal<600){ text("You Dropped Out", 150, 200); } } if(endPlus-endTime > 3){ textSize(42); text("Your Total Debt:", 15, 340); } if(endPlus-endTime > 4){ debttString = str(debt-score); text(debttString, 370, 340); } /* endTimeString = str(endTime); endPlusString = str (endPlus); text(endTimeString, 500, 200); text(endPlusString, 500, 250); */ if(endPlus-endTime > 5.5){ text("MATCH", 15, 410); } if (endPlus-endTime > 6.0){ endYears = (debt-score)/760; endYearsString = str(endYears); text(endYears, 195, 406); text("years",280,410); } if (endPlus-endTime > 7.0 /*&& endPlus%2 == 1*/){ textSize(30); text("press start", 610, 470); } //final noise invar = myPort.readChar(); switch(invar){ case 'f': sex = 1; ball = 0; } } }
Status Update: Trials and Tribulations
The pinball machine is up and running. The security guard poking his head in this morning seemed slightly confused. Hooking up the circuits, soldering for hours, I really didn't know if it would work when I plugged it all together. And, shockingly, it didn't. But now, it does. How goes from there to here?
Troubleshooting list # 1 reads half-confession half problem-solving flowchart. 14 of the 21 items are crossed off. Of those that remain, some are genuine tribulations, unexpected or self-emergent, and others are what's not-been-gotten-to yet. (I'm calling it, he said, 5:34: time of prototype.)
WHAT REMAINS:
Launch sometimes shoots ball straight to drain
ball doesn't always roll along bottom limit
sideways ramp ¬ --> fees
not mapped or painted
no sound as of now
bottom slides
ball launch sucks.
(I have plans for most of them. Grant me the serenity...)
WHAT HAS GONE: not counting ball return --> circuit problem; not flashing lights; not reading flipperconnex --> circuit problem; matriculation timeline too fast; fees too small; green light circuit problem --> relay not working; double input on ball return; last DebounceTime = millis() --> NO: solve in ARDUINO; get work nearly impossilbe; no debt years.
'What is that' you say? Is it a streetmap? a flowchart?
No! It's a circuit diagram.
Red Light. Green Light.
prototyping LED circuits...
building a pinball machine.
just building a pinball machine.
what are you doing
a' hammer and screwing?
I'm building a pinball machine.
New Flipper Design
Above you can see the flippers I built because my solenoids weren't powerful enough. You tug on the chord to hand-actuate the flipper, and the spring returns the flipper. On the chord, on either side of the tube it runs through, there's a limit washer to limit the range of motion. I've coiled wire around the front limit washer to make a contact; when the chord is pulled it closes a circuit through the coil on the tube and signals the arduino.
Arduino/Processing Love
Sitting down to do some coding, gridding out arduino and processing responsibilities.
Processing
Run Matriculation Timeline
(tuition due, count time…)
Count Score
(Balance and Debt, animation for LOAN)
Display Score
Run end-game loop (?high score? Years for repayment?)
Input(from Arduino) //Output
You got work // Balance +amount
//sound or video output
Field of fees // Balance -amount
//”ca-ching” sound effect
Left AND Right flippers // balance -amount
// maybe blip sound effect
Start button // ballcount+1
Ball Return count // ballcount+1;thenenter endgame loop/
Something else // something else.
Arduino
Input//Output
Left AND right flipper // flash red LEDs x1
//signal Processing (println)
Field of fees // flash red LEDs each hit
// signal Processing
You got Work // flash green LEDs a lot
// signal Processing
Start button // signal Processing
Ball Return Count // signal Processing
Something else // Something else
Whisker Switch Prototype
I'm using a bunch of whisker switches for my field of fees. A whisker switch is basically a spring around a wire. When hit from the side, the circuit closes.
I hooked this one up on a piece of cardboard, then put an LED on the circuit and ran 3.3VDC to it through a powersupply. Rolling the pinball at it, even slowly, closed the circuit and flashed the LED. Success.
A Problem!
So I hooked up solenoids to my flippers on the board, and discovered that the solenoids I have have nowhere near enough power to flip the flippers. I spent some time looking for a workaround or a way to troubleshoot, but it became clear that these solenoids are hopeless. Also, I don't have the time or the money to buy more serious solenoids. So I have a problem: how do I actuate my flippers?
Playing around on the board, I found that if I used my fingers to press the solenoids, I got enough power to hit the pinball. So now I'm thinking hand-actuated flippers.
But, with as much time as I have left, it looks like the flippers will be one of the centerpieces of the project. And the project is an interactiveelectronics project. So my problem is: how do I make hand-actuated flippers, that are still interactive electronics components?
Solution: make the action of flipping the flippers trigger an electronic switch. I'll use this switch to trigger to scoreboard to cost, and trigger the gameboard to light the red LEDs.
pictures to come.
Tested the circuitry for the flippers: works great. Both can run off a single 12V powersupply if put on parallel circuits, but they can't be used at the same time. This is fine with me.
I wanted LEDs to go ON when the flippers flipped, but didn't want to divert power from the solenoids. The only pole left on the switches was the open one. So I ran that through a 5V relay to ground, and attached the LEDs to power through the poles on the relay that are attached when it gets no power. Thus, when the switch is flipped, the LED goes on, and I can use the voltage to trigger the arduino to "cost." My only problem: I don't want to put 12V through that relay again, so I need a resistor.
Pictured above, ball launcher (unframed) in open and compressed positions.
Status Update: Project Debt
First self-deadline is the end of the weekend. I'm going to have the gameboard and frame built, the flippers attached and working, and the ball launch going. From this point I can experiment with the angle of incline for the board to maximize flipper range, and can find out where the ball goes, in what directions, and where to put the interactive components of the board.
I'm constructing the frame with a piece of 2'x4' birch plywood (1/2"), white pine 2x4 (a runner along the bottom of both sides, for structural integrity and to make a hollow space on bottom to put the electronics), and MDF tacked along both sides to hold the ball on the surface. I won't be enclosing the top (that will come), and will be putting an angled piece on the bottom to funnel the ball to the ball launch. Along this piece I need a switch (probably handmade) to count the ball returns.
The flippers will be lever-shaped and covered in rubber (industrial rubber bands) and operate by 12VDC pull solenoids (run off an external powersupply, routed through a relay attached to the arduino and triggered by switches). The solenoids will pull an arm opposite the pivot point from the levers. The pivot point will be threaded rod bolted through the playing board with a steel sleeve (to decrease friction). I am waiting on the power supply to figure out how much travel the solenoids have; their arc will have to be proportional to the desired travel of the levers. Also, each switch will trigger a red LED either on or near the flipper, because each flipper-action costs. (See overview)
The ball return (pictured-incomplete-above) is a cable bolt, a hex bolt, a washer (to guide the cable bolt and to press against the spring), a spring, and a larger washer. metal part will be encased in a wood frame, and the back washer will be held in place (by screws at the limit-point) for the spring to push against. I also still have to rubberize the tip.
The electronics consists of five circuits. The arduino (power) to the lever to the relay and LED (x2); the power supply through the relay to the flipper (x2); and the arduino (power) through the switch to an arduino input pin. It will use up 3 of my 19 possible digital pins.
I've been worrying that the weight of my pinballs won't be heavy enough to toggle my switches. I opened one up, and couldn't figure out a way to make the toggle-pressure lighter. (The switch was resilient, though, it went back together even after I pried it apart.) So I came up with a couple ideas for alternate (handmade) switches, and am brainstorming more.
Debt!
Find it below: a description of my upcoming physical computing project.
Overview
The project is a pinball machine called “Debt.” It is to be 2ft.x4ft (or 2½x4 depending on available MDF). It will consist of the pinball table (ball range: flippers, ball ejector, and interactive components) and a scoreboard. The pinball table will be run via Arduino; the movement of the ball will provide the physicality of the computing. The user interfaces with the table by two buttons (R and L) which actuate flippers. The scoreboard will be displayed on a computer screen (laptop) attached to the arduino board via serial connection. The scoreboard will run via processing, tallying pluses and minuses, playing audio, displaying video, and (possibly) recording high scores.
Game Dynamic
The scoreboard displays two numbers, “balance” and “debt.” Balance initially starts at a number n, say 1,000. Debt starts at 0. In gameplay, most of the components 'cost,' that is, they cause the balance to decrease. (Two components, “Job” and “Daddy's Money,” increase balance.) Once balance reaches or goes below 0, a “loan” is granted: balance and debt increase by 1,000. Once balance again reaches 0, another loan is granted, et. cetera.
Players start with 3 balls; getting their fourth is a function of time. (If a player plays long enough without losing all three balls they are granted a fourth.) Players that get out in three “drop out” (they are not elligible for high-scores). Players that get four balls “Graduate” and are elligible for high-scores.
The final score is the negative of the total debt minus the balance. The high score is the least-negative score. Thus, technically, the way to win is to do nothing, or very little.