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.
Three Goblin Art
No title available
Alisa U Zemlji Chuda

Kiana Khansmith
Today's Document
RMH

blake kathryn

#extradirty
No title available
d e v o n
Lint Roller? I Barely Know Her
trying on a metaphor

tannertan36
One Nice Bug Per Day
styofa doing anything
hello vonnie
🪼
Sade Olutola
No title available
"I'm Dorothy Gale from Kansas"

seen from Malaysia

seen from Ecuador

seen from United States

seen from Australia

seen from Türkiye
seen from Singapore
seen from United States
seen from United States
seen from United States
seen from United States
seen from United States
seen from United States
seen from United States

seen from United States

seen from United States
seen from United States
seen from United States
seen from United States
seen from United States

seen from Australia
@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.
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.
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!
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.
Rosin flux… sure looks pretty. (Engineers can be artists too!)
A strand of me and my little sisters hair crossing