Project Idea: I want to build (A ROVER KIT teaching kids and Computer Programming), coding KIT toy for girls and boys. Powered by a tangible programming language. It's super fun and super intuitive.
Kit Rover can make specific movements due to a (sequence of programming blocks) and tell the child if he reaches the target or faces an obstacle, and tell him if he uses a good coding sequence or not (Through LCD Screen)
I care about it as:
-It's non-prescriptive - MELO gives children the ability to solve problems within the world they create. This gives them the freedom to express their creativity and aptitudes, unconstrained by the challenges of literacy, or the distractions of a screen.
-It's child-centered - All they need to get started is a nudge in understanding that blocks = actions. After this point, even the discovery of what each block does can be led by the child, leaving adults to observe and only help when needed.
-It's auto-didactic - Solving problems with the blocks is about trial and error. Once a sequence is sent to MELO, the result is immediate and non-abstract, giving children concrete grounds on which to self-correct without adult intervention. Just change the blocks and go again.
It's designed for scaffolding: When a problem is too complex, the right sequence is easily pooled from the collective knowledge of children in the play session. Each child can in turn add a block, or a suggestion, layering in their individual competence to the solution in small steps.
I inspired by the idea through research, and I found this idea on (Kickstarter & primo).
I used "Fusion 360"
I imagined the design in my mind, then I sketched it using paper and pen.
I opened the fusion 360 software
I Sketched the parts of the design on a new sketch on the software (using the tools that I have learned from the Diploma) (Start with the base then the double roof and (front & Back) the the sides).
After finishing the sketch, I extruded the parts to turn them into 3d parts (Distance 3 mm, the thickness of plywood)
I joined and assembled the parts of the design together to show the final design of the project, and to notice if there is any problem with the dimensions before fabrication.(The parts of my model assembled together using screws and nuts in order to I designed a T-Sluts in it).
I Downloaded the CAD Components the i will use in my project (Arduino, breadBoard, Motors, else) form (GRABCAD) and i uploaded them to fusion 360 then i inserted them in my project.
i jointed all the components in suitable places then i project the nail holes to the construction parts and i designed some of mounting parts to fixed the components.
After making sure that all is ok. I exported the file as Dxf file.
I opened (Laser Works V6 )
I imported the Stand Design file to the software.
I fit the dimensions and the place of the design
I Prepared the setting of the cutting (cut speed 25, power 65
scan engraving speed 300, power 25 )
Here we have the Contruction parts of the KIT
I used the" laser works " program to prepare my 2D parts for cutting
After I exported the sketch file from fusion 360 as DXF file, I import them on the laser work program to the computer of the laser cutting machine.
check if there is any overlap to remove it.
I set the properties of the cutting operations (cut speed is 25 power is 65 RED color, the scan speed is 300 power is 25 Black COLOUR )
Then I export the file in LDR and download it to the laser cutting machine.
file.dxf to the memory of the machine.
I placed a plywood sheet on the machine(3mm wood sheet 30*15cm).
I choose the starting point.
Start the laser cutting
I have to check the scope of the machine and trak the frame.
Then I pressed the file option then choose my file and pressed enter and then pressed run.
Finally, I calculated the total work time on the machine and told the specialist about it.
After Cutting :-
I start with making the construction blocks
I Collected all the parts of the blocks then i set the reisotrs and connected with he copper tape and finally i connected all the parts by douple face tape.
then i constructed the parts of the rover and i mounted the components then i make the wiring connections.
the electronic circuit consists of input and action components :-
the input components :-
1. Push Button (Toggle start \ stop making the functions of moving the motors)
2.Controlling blocks (Resistors with different values, each value make the analog input read a certain value then due to this value a certian movement of the motor will be)
the Sensing components :-
1. Ultrasonic Sensor (To measure the distance and sense and avoid obstacles then light one of the 3 LEDS due to the distance of the obstacle).
the Action components :-
DC motors Make movement, (Forward, Right, Left)
LEDs Emit Light,
LCD Screen will write messages.
the Other components :-
breadboard (make electrical connection between the components)
arduino UNO (micro controller)
Jumpers ( males & females) used to connect components with each others.
7V adaptor for powering
Resistors
(the rover will make a function due to the blocks of resistors the press the push button the motors will make a specific movemets due to this resisotrs and the lcd screen will ound the turns and write messages at the same time the ultrasonic sensor detect if there is any obstacle and light led.. thee arduino control and process all the data and the integration of all the components.)
After Searching about all the data sheets of the components to know about the suitable voltage and amperage i found :-
LED :
Forward Current (IF): 30mA
Forward Voltage (VF): 1.8V to 2.4V
L298N Motor Driver Module
Driver Voltage: 5-35V
Driver Current:2A
16x2 LCD Module
Operating Voltage is 4.7V to 5.3V
Current consumption is 1mA without backlight
HC-SR04 Ultrasonic Sensor
Operating voltage: +5V
Operating Current: <15mA
The Arduino operating Vlotage from (5 to 12V)
Due to that :-
I Used 7.4 LipoBattery to power the Kit Rover
I connected the Leds with 330 Ohms Resistors
I Connected the lcd and ultrasonic sensor to he 5v+ of Arduino
I connected the Motor driver with Vin pin to get the same arduino voltage (7.4 not 5).
I programmed each single object alone. at first, I programmed theArduino to read the input from the blocks and resistors then Make a movment through the motors controlled by the motor driver.
the second was to programme the ultrasonic to measure the water level and also know if there is an obstacle then emit a light due to the distance of the obstacle.
the Third was to programme the LCD Screen to print the number of the turn and print messages if there is an obstacle or when get the final target distination .
then I integrate between the codes as following:
1- upon the reading of Resistor block when pres bush button make a movement(forward or right or left) when finih Lcd screen print (You reatched the Target)
2- according to the read of the ultra sonic sensor one of the three leds will emit a light due to the distance of obstacle
The LCD will print (''There is obstacle'').
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <Metro.h> //Include Metro library
Metro delayNew = Metro(1000);
int counter = 1;
int motor1pin1 = 4;
int motor1pin2 = 5;
int motor2pin1 = 7;
int motor2pin2 = 6;
int play = 8 ;
const int trigPin = 3;
const int echoPin = 2;
// defines variables
long duration;
int distance;
void setup() {
// put your setup code here, to run once:
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(motor2pin1, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(play, INPUT_PULLUP);
Serial.begin(9600);
lcd.init();
lcd.backlight();
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
}
void loop() {
// put your main code here, to run repeatedly:
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = duration * 0.034 / 2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
if (distance > 10) {
digitalWrite(11, HIGH);
} else {
digitalWrite(11, LOW);
}
if (distance < 5 && distance > 10) {
digitalWrite(10, HIGH);
} else {
digitalWrite(10, LOW);
}
if (distance < 5) {
digitalWrite(9, HIGH);
} else {
digitalWrite(9, LOW);
}
delay(10);
int block1 = analogRead(A0);
int block2 = analogRead(A1);
int block3 = analogRead(A2);
int block4 = analogRead(A3);
if (delayNew.check() == 1) {
switch (counter)
{
case 1:
action (block1);
lcd.setCursor(0, 1);
lcd.print("HELLO BOY, I'M MELO");
lcd.setCursor(0, 0);
lcd.print(" Step One ");
counter = 2;
break;
case 2:
action (block2);
lcd.setCursor(0, 1);
lcd.print("HELLO BOY, I'M MELO");
lcd.setCursor(0, 0);
lcd.print(" Step Two ");
counter = 3;
break;
case 3:
action (block3);
lcd.setCursor(0, 1);
lcd.print("HELLO BOY, I'M MELO");
lcd.setCursor(0, 0);
lcd.print(" Step Three ");
counter = 4;
break;
case 4:
action (block4);
lcd.setCursor(0, 1);
lcd.print("HELLO BOY, I'M MELO");
lcd.setCursor(0, 0);
lcd.print(" Step Four ");
counter = 1;
break;
}
}
lcd.setCursor(0, 1);
lcd.print(" ");
Serial.print(block1);
Serial.print(", ");
Serial.print(block2);
Serial.print(", ");
Serial.print(block3);
Serial.print(", ");
Serial.print(block4);
Serial.print(", ");
Serial.print(distance);
Serial.println(", ");
}
void action ( int reading ) {
if (reading > 50 && reading < 70) {
digitalWrite (motor1pin1 , LOW);
digitalWrite (motor1pin2 , LOW);
digitalWrite (motor2pin1 , HIGH);
digitalWrite (motor1pin2 , LOW);
}
else if (reading > 125 && reading < 150) {
digitalWrite (motor1pin1 , HIGH);
digitalWrite (motor1pin2 , LOW);
digitalWrite (motor2pin1 , HIGH);
digitalWrite (motor1pin2 , LOW);
}
else if (reading > 360 && reading < 395) {
digitalWrite (motor1pin1 , HIGH);
digitalWrite (motor1pin2 , LOW);
digitalWrite (motor2pin1 , LOW);
digitalWrite (motor1pin2 , LOW);
}
else {
digitalWrite (motor1pin1 , LOW);
digitalWrite (motor1pin2 , LOW);
digitalWrite (motor2pin1 , LOW);
digitalWrite (motor2pin2 , LOW);
}
}
then I integrate between the codes as following:
1- upon the reading of Resistor block when pres bush button make a movement(forward or right or left) when finih Lcd screen print (You reatched the Target)
2- according to the read of the ultra sonic sensor one of the three leds will emit a light due to the distance of obstacle
The LCD will print (''There is obstacle'').
(the rover will make a function due to the blocks of resistors the press the push button the motors will make a specific movemets due to this resisotrs and the lcd screen will ound the turns and write messages at the same time the ultrasonic sensor detect if there is any obstacle and light led.. thee arduino control and process all the data and the integration of all the components.)
Sherif Rashwan helped me alot in alot of suggestions to imgine the most valuable applicable Project from my idea, He was alway following up our progress.
he adviced me alot to control the time and to make the most progress in the minimum time. Moreover he helped me in the connections and alot during the diploma.
Ahmed Saeed Such a great leader and instructor, he helped me more than i thought. He provided me with all the components that i need. He changed me the arduino more than one time. he helped me in the coding of the project alot. he was a head with all the students untill they finished their projects.
I helped alot of my peers in connections and design ideas and coding. also i provided them with alot of components they need.
they helped me also and supported me when i needed them.
Thanks to everyone in this great Diploma.
I Stuck a lot of times. the biggest problem was how to handle the time and make progress in the project besides studying for the exams in the university. It was very hard time, i was compressed but I managed my time, I finished the project besides doing well in the exams.
also i had a problem whichwas i hav not internet connection during the new apartment so i had to went to Fablab every day after the exams to design the project.
moreover, i had some technical issues which made me think to change the project as it can't run. but i discovered that there was a problem in the arduino. After change it the projects become perfect.
it was very hard time, but i learned a lot from it.
If I have more time , I will add another mode to the kit rover to be controlled by the Bluetooth and mobile phone. and i will add a switch to change between the two modes.