Not so simple camera gimbal -- cancelled project.
Why cancel it? Simple: the design specs didn't call for something this complex. Most of our requirements can be handled in software with a two-axis "overhead scanning" gimbal.
Stranger Things
Game of Thrones Daily
I'd rather be in outer space 🛸

Origami Around
we're not kids anymore.
untitled
trying on a metaphor

titsay

Andulka

tannertan36

❣ Chile in a Photography ❣
YOU ARE THE REASON
$LAYYYTER

gracie abrams
Keni
PUT YOUR BEARD IN MY MOUTH
🩵 avery cochrane 🩵

blake kathryn
Xuebing Du

bliss lane

seen from United Kingdom

seen from Saudi Arabia

seen from Belgium

seen from Malaysia
seen from Italy

seen from United States
seen from Italy

seen from United States

seen from United Kingdom

seen from United Arab Emirates
seen from Greece
seen from United States

seen from Armenia

seen from Indonesia
seen from Japan

seen from Türkiye

seen from Sweden
seen from United States

seen from United States

seen from Türkiye
@nodnarbstuff
Not so simple camera gimbal -- cancelled project.
Why cancel it? Simple: the design specs didn't call for something this complex. Most of our requirements can be handled in software with a two-axis "overhead scanning" gimbal.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Micromouse Update
I won the school-wide competition by sheer luck and brute force.
3D printed micromouse: try 2/(3?)
Playing with shapes: Level: extreme. 119 XP until level up. :D MICROMOUSE QUEST 2 COMPLETED!
Size matters: a story from Kerbal Space Program.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Just work on logics. The individual blocks outlined in this schematic need to be completed, and more documentation should be written on this project. But everything is more or less working. This block partitioning allows for multiple members of the staff here at nodnarB Labs to work on this project concurrently, but unfortunately there is a shortage of staff here at nodnarB labs.
My new LED nametag… enjoy.
My micromouse... taken by a good friend of mine... (it did fail the competition that we had on that day until I smashed it a bit with a hammer and bruteforced turns.)
Code for an exercise bike...
#include <LiquidCrystal.h> #define REV 0 #define SPD 1 #define CAL 2 #define RPM 3 #define DIS 4 #define JOG 5 LiquidCrystal lcd(12, 11, 10, 9, 8, 7); // Here come the pins const char revPin = 2; // the number of the revolution pin const char ledPin = 13; // the number of the LED pin const char modePin = 3; // the number of the mode change pin const char unitsPin = 4; // the number of the units pin // Here come the calculation variables volatile unsigned int revolutions = 0; // the number of revolutions (volatile for interrupt reasons) volatile unsigned long lastmillis; // the last number of millis since the revolution, comrade! volatile float rpm; // revolutions per minute (should be able to be calculated from lastmillis and the current millis) volatile float calories; // how many calories were burned (this should be a constant with every revolution) volatile float kmh; // how many kilometers per hour volatile float mph; // how many miles per hour volatile float miles; volatile float kilometers; // Here come the states unsigned char state = REV; // This is the actual state of the device boolean printedState = 0; // This tells whether the units were printed or not... unsigned char secondaryState = REV; // These are the states for the jog mode... use them wisely. unsigned long lastStateChange = 0; // Here are the unit variables boolean units = 1; // These are the unit states boolean lastunits = 1; // This is the last state of the units button boolean unitsOn = 1; // Here are the mode variables boolean lastmode = 1; boolean modeOn = 1; boolean modeMove = 0; boolean secondaryModeMove = 0; unsigned long secondaryModeMillis = 0; void setup() { lcd.begin(20,2); lcd.print("Initiating bike..."); lcd.setCursor(0, 1); lcd.print("nodnarb.dyndns.org"); // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbuttons as an input: pinMode(revPin, INPUT_PULLUP); pinMode(modePin, INPUT_PULLUP); pinMode(unitsPin, INPUT_PULLUP); Serial.begin(9600); attachInterrupt(2, incRevolutions, RISING); } void loop(){ // Here's stuff controlling the mode pin modeOn = digitalRead(modePin); if ((modeOn != lastmode) && !modeOn) { modeMove = 1; } lastmode = modeOn; // Here's stuff controlling the units pin unitsOn = digitalRead(unitsPin); // Read the units if ((unitsOn != lastunits) && !unitsOn) { units++; printedState = 0; } lastunits = unitsOn; switch (state) { case REV: if (!printedState) { lcd.setCursor(0,0); lcd.print("Revolutions:"); lcd.setCursor(0,1); } lcd.print(revolutions); if (modeMove) { state = SPD; modeMoveReset(); } break; case SPD: if (!printedState) { lcd.setCursor(0,0); if (units) { lcd.print("Speed (in km/h):"); } else { lcd.print("Speed (in MPH):"); } lcd.setCursor(0,1); } printSpeed(); if (modeMove) { state = CAL; modeMoveReset(); } break; case CAL: if (!printedState) { lcd.setCursor(0,0); lcd.print("Calories consumed:"); lcd.setCursor(0,1); } if (modeMove) { state = RPM; modeMoveReset(); } break; case RPM: if (!printedState) { lcd.setCursor(0,0); lcd.print("RPM:"); lcd.setCursor(0,1); } if (modeMove) { state = DIS; modeMoveReset(); } break; case DIS: if (!printedState) { lcd.setCursor(0,0); printDistance(); lcd.setCursor(0,1); } if (units) { lcd.print(miles); } else { lcd.print(kilometers); } if (modeMove) { state = JOG; modeMoveReset(); } break; case JOG: if ((millis() - secondaryModeMillis) >= 500) { secondaryModeMove = 1; secondaryModeMillis = millis(); } switch (secondaryState){ case REV: if (!printedState) { lcd.setCursor(0,0); lcd.print("Jog (revs.):"); lcd.setCursor(0,1); } lcd.print(revolutions); if (secondaryModeMove) { secondaryState = SPD; secondaryModeMoveReset(); } break; case SPD: if (!printedState) { lcd.setCursor(0,0); if (units) { lcd.print("Jog (km/h):"); } else { lcd.print("Jog (MPH):"); } lcd.setCursor(0,1); } printSpeed(); if (secondaryModeMove) { secondaryState = CAL; secondaryModeMoveReset(); } break; case CAL: if (!printedState) { lcd.setCursor(0,0); lcd.print("Jog (cals.):"); lcd.setCursor(0,1); } lcd.print(calories); if (secondaryModeMove) { secondaryState = RPM; secondaryModeMoveReset(); } break; case RPM: if (!printedState) { lcd.setCursor(0,0); lcd.print("Jog (rpm.):"); lcd.setCursor(0,1); } lcd.print(rpm); if (secondaryModeMove) { secondaryState = DIS; secondaryModeMoveReset(); } break; case DIS: if (!printedState) { lcd.setCursor(0,0); if (units) { lcd.print("Jog (km):"); } else { lcd.print("Jog (miles):"); } lcd.setCursor(0,1); } printDistance(); if (modeMove) { secondaryState = REV; secondaryModeMoveReset(); } break; default: secondaryState = REV; break; } if (modeMove) { state = REV; modeMoveReset(); } break; default: state = REV; break; } if (digitalRead(revPin)) { // turn LED on: digitalWrite(ledPin, HIGH); } else { // turn LED off: digitalWrite(ledPin, LOW); } } void incRevolutions () { revolutions++; rpm = 60000.0 / ( millis() - lastmillis ); mph = rpm / 4.8; kmh = rpm / 3.0; miles += 1.0 / 288.0; kilometers += 1.0 / 180.0; calories += 10.0 / (millis() - lastmillis); lastmillis = millis(); printInformation; } void printInformation () { Serial.print("Revolutions: "); Serial.println(revolutions); Serial.print("RPM: "); Serial.println(rpm); Serial.print("MPH: "); Serial.println(mph); Serial.print("km/h: "); Serial.println(kmh); Serial.print("Miles: "); Serial.println(miles); Serial.print("Kilometers: "); Serial.println(kilometers); Serial.print("Calories: "); Serial.println(calories); Serial.print("Time Since Last Revolution: "); Serial.println(millis() - lastmillis); } void modeMoveReset () { modeMove = 0; printedState = 0; } void printSpeed () { if (units) { lcd.print(kmh); } else { lcd.print(mph); } } void printDistance () { if (units) { lcd.print("Distance (km):"); } else { lcd.print("Distance (miles):"); } } void secondaryModeMoveReset () { secondaryModeMove = 0; printedState = 0; }
The comments stopped after a while... sorry.
because lab equipment!

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
I'm just taking inventory over here at nodnarB labs. Enjoy the nice view.
Pseudocreobotra ocellata by Artur Celles
Close up of a moth’s wing.

Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
Free to watch • No registration required • HD streaming
Rosin flux… sure looks pretty. (Engineers can be artists too!)
A strand of me and my little sisters hair crossing