Grus - LEGO SPIKE Prime crane robot
Grus, from Latin, means Crane.
The Crane uses one motor to turn the hand and one motor to hold the ball. You need to balance the jib first? What can you add to it?
- #4178
- 25 Jan 2026
These are all the robot building instructions. By visiting each building instruction you could see the Tutorials and Courses and Lessons in which it is used.
Grus, from Latin, means Crane.
The Crane uses one motor to turn the hand and one motor to hold the ball. You need to balance the jib first? What can you add to it?
Levi comes from levitama, which means distribute in Estonian.
This robot uses a color sensor to detect the color of a plastic ball. Then, according to the color of the ball, the robot sorts it to the correct side.
Paga is named after the famous violinist Niccolò Paganini.
The robot is designed to resemble a violin. The faster the motor turns, the higher the pitch it produces. Let’s see if you can play a concerto on it!
Chromagraph is a play on the original name of the record player, the "Phonograph," which comes from the Greek phono (sound), graph (writing), and chroma (color).
This robot is designed to work similarly to a record player. It has a rotating “disc” with different colored bricks that are read by the color sensor. The robot then plays a sound for each color. Can you create a melody?
Sympho is named after Symphonium, the first company to manufacture music boxes.
The robot uses a color sensor to detect whether the box is closed. When you open it, the robot can play music and spin something with the motor. You can build anything you like on top!
Carlos, named after the famous Mexican guitarist Carlos Humberto Santana Barragán.
The robot uses the distance sensor to determine the pitch of the sound and the force sensor to play the sound. You can shred pretty good with this one!
Mello is named after the famous DJ "Marshmello".
This robot is designed to work like half of a DJ set. It speeds up or slows down a melody based on the rotation of the motor. Can you create some cool remixes with it?
This is a program we created for the LED strip display course.
#include <Adafruit_NeoPixel.h> #define LED_COUNT 20 #define StripPin A2 #define HallEffectSensorPin 6 #define HallEffectGNDPin 5 #define HallEffectVCCPin 4 int startSeconds = 20; int startMinutes = 10; int startHours = 1; int secondsArrow; int minutesArrow; int hoursArrow; int arrowPosition; int hallSensorPastState = LOW; int hallSensorRead; int timeForOneRotation = 1; unsigned long RPMTimer = millis(); Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_COUNT, StripPin, NEO_GRB + NEO_KHZ800); int color[3] = {255, 100, 150}; int secondsColor[3] = {255, 0, 0}; int minutesColor[3] = {0, 255, 0}; int hoursColor[3] = {0, 0, 255}; void setup(){ pinMode(HallEffectSensorPin, INPUT); pinMode(HallEffectGNDPin, OUTPUT); pinMode(HallEffectVCCPin, OUTPUT); digitalWrite(5, LOW); digitalWrite(HallEffectVCCPin, HIGH); leds.begin(); leds.setPixelColor(19, color[0], Color[1], color[2]); } void loop(){ RPMUpdate(); ClearLedsWithoutTheLastOne(); arrowPosition = StateFrom60(); secondsArrow = ((int) floor(( millis() / 1000) + startSeconds) % 60); minutesArrow = ((int) floor(( millis() / 60000) + startMinutes) % 60); hoursArrow = ((int) floor(( millis() / 3600000) + startHours) % 12) * 5; if (arrowPosition == secondsArrow){ for (int i = 0; i < LED_COUNT - 3; i ++){ leds.setPixelColor(i, secondsColor[0], secondsColor[1], secondsColor[2]); } } if (arrowPosition == minutesArrow){ for (int i = 0; i < LED_COUNT - 6; i ++){ leds.setPixelColor(i, minutesColor[0], minutesColor[1], minutesColor[2]); } } if (arrowPosition == hoursArrow){ for (int i = 0; i < LED_COUNT - 10; i ++){ leds.setPixelColor(i, hoursColor[0], hoursColor[1], hoursColor[2]); } } if (arrowPosition % 5 == 0){ leds.setPixelColor(18, color[0], color[1], color[2]); leds.setPixelColor(17, color[0], color[1], color[2]); } leds.show(); } void RPMUpdate(){ hallSensorRead = digitalRead(HallEffectSensorPin); if(hallSensorRead != hallSensorPastState){ if(hallSensorRead == HIGH){ timeForOneRotation = millis() - RPMTimer; RPMTimer = millis(); hallSensorPastState = HIGH; } else{ hallSensorPastState = LOW; } } } void ClearLedsWithoutTheLastOne(){ for(int i = 0; i < LED_COUNT - 1; i ++){leds.setPixelColor(i, 0);} } int StateFrom60(){ return (int)floor(((millis() - RPMTimer) * 60) / timeForOneRotation) % 60; }