Javier Vicente Sáez was born in Barakaldo (Bizkaia, Spain) in 1978. He finished his studies of Industrial technical engineering at University of Deusto in 1999. After that, he obtains the degree of telecommunication engineering in 2001. Since 2001, he is lecturer of the telecommunication department at University of Deusto.
At the same time, Begoña Garcia Zapirain and he form the Advanced Signal Processing group, in which he works as researcher. He obtains the Phd in computer science in 2016.
On Wednesday 17 we assist the First lesson with Neil Gershenfeld. It has been a pleasure to meet the MIT Team, other students and FabLabs. In that first day we had the opportunity to receive information about Principles and Practices, everything about FabLabs global network main idea. We find also the Fab Charter in the class schedule, FabLabs rights and responsibilities.
The assignment this week was to plan and sketch a potential final project, so I made some sketches around my idea. Basically, the main idea for my final project is: Modular Robot Curiosity.
In these times there is a lack of interest of the bachelor students in studying engineering. The students in bachiller have to choose between the human and the scientific branch. If they do not choose the scientific branch they can not study engineering. The few students who want to study engineering face another problem, they do not know how to differentiate each type of engineering. In Spain there are a lot of different engineering degrees and the student don´t know to choose between them.
To avoid this problem my faculty is planning action to achieve three goals.
My idea is to design a practical workshop based in a modular robot. In each workshop five groups will contest to see who sets the best robot. There will be tree different challenges: velocity, strength and agility. The students can change different items in the robot:
The teams can choose between different types of wheels (Diameter,thickness, material..). So the will have to argue which is better for each of the challenge. The same for the propulsion system, they can choose between different types of gears. They will have to discover which one provides more velocity or more strength. These changes will have to be quick, so a plug-and-play system will be used, probably using magnets.
In the market exists a lot of educational robot kits, but all are focused in programing. None of the kits in the image allows a quick change of the components, without using a screwdriver or other tool. What I want to achieve in a modular system that allows to exchange the parts and modify your physical behavior, be quicker, be stronger... In this form in a two-hour session students can discuss aspects of engineering such as:
You can find my final project scheme in the image below:
The chasis of the robot has been designed in SolidWorks. In the next picture a render of the design can be shown. The wheels and the gear suppor have hole to include magnets to ease the change of this components.
Click in the list to change the 3D visualization file:
The main part is the chasis this element have been cutted with the laser cutter and made in wood.
The next step is to put the gear holder. This part has magnets to hold the gear. This part also has a hole to host an optocoupler to be able of count the revolutions of the engine.
After that is possible to mount the gear engine, this part have two pieces to hold the DC motor and also have some gears to change the revolution ratio. The gears used in this project have been designed in week2-Computer-Aided-Design.
In the next picture four neodymium magnets can be shown.
In the next picture the battery holder and the gear can be shown joined to the chasis.
In the next picture the steering holder have been added to the chasis.
Now the servo motor holded have been placed.
Finaly the bridge of the steering system have been added.
In the next picture the final robot can be shown. The wheels and the filaflex wheel cover were designed in the week6.
In the mount moment a problem was detected, a piece hole was to small to introduce the bearings and was redesigned.
To control the robot a circuit board has been designed. The robot must be controled by a remote APP through Bluetooh and in a future wifi connection to send data to the cloud will be added. Becouse of that an ESP32 microcontroller has been selected, this microcontroller incorporate BLE and wifi in the same SOC. The energy is take from a 3.7V lipo battery so a lipo battery charged have been added to the design. The chip BD6211F is the motor driver that has been selecter to control the Motor and the TC1262 is the 3.3V regurator choosed. The reason to choose these components is the power lipo power source. The regulator have a low drop voltaje of 400mV that permit provide a 3.3V output from a 3.7V input. The full schematic can be shown in the next picture.
In the next picture the designed PCB can be shown. The lipo charger circuit is in the top lef part. In the bottom lef part there is the motor driver. The ESP32 SOc is in the top right part. The paths in blue are bridges that will be done using wire because it was not posible to do the board in one side. These path are the input and output signals from the ESP32. The fact of not routing this parts permit to check the board before conecting the inputs and the outputs.
The resulting board have a very good finish, without any important fault.
I began to soldering the board.
First I solder a few componens, the battery connector, the regulator and the buttons and I tested then before soldering the microcontroller.
When I almost finished the soldering I began to test the microcontroler. The button of the corner permit to select the flash mode and the other is the reset.
Once the power supply was checked the bridge wires were added.
Another wire was added because the light sensor was in a pin of the ADC2 and it is not possible use the ADC2 if you want to use the BLE. So I had to solder one wire from the light sensor to he pin that use the ADC1.
The remote control has been implemented using AppInventor. This application was designed in week13. The reason to choose this option is that AppInventor is a very good educational tool that permit to teach mobile Application development very easy to young people.
The aplication has in the right part a touch pad to control the movements of the robot and in the left a panel to show the telemetry from the robot.
The block diagram permit the connection between the mobile and the robot through a BLE connection.
Thist part of code allow the recepcion of the telemetry from the robot.
This part of code center the ball in the middle of the pad and began the scanning.
This code move the ball when is pressed the touchpanel.
This code send the ball to the middle when the touchpanel is released.
This code send the motor and steering values to the robot every 250ms.
Whe BLE deviced are detected they are added to the selection list.
The ESP32 has been programed using the Arduino IDE. The reason of selecting the arduino IDE is again the facility to teach programing to young people that they have never programmed. The aplication use a BLE service with two caracteristic. The first characteristic is a write characteristic to send the motor and steering information from the mobil. The second characteristic is a notification characteristic to send the data from the light sensor and the temperature sensor to the mobil. The data is send every 2 seconds.
The ESP32 does not have a native servo motor control library so I have use this library.
#include #include #include #include #include #ifdef __cplusplus extern "C" { #endif uint8_t temprature_sens_read(); #ifdef __cplusplus } #endif uint8_t temprature_sens_read(); #define DIR1_CHANNEL 2 #define DIR2_CHANNEL 3 // use 13 bit precission for LEDC timer #define LEDC_TIMER_13_BIT 13 // use 5000 Hz as a LEDC base frequency #define LEDC_BASE_FREQ 5000 #define dir1Pin 14 // GPIO pin used to Dir1 #define dir2Pin 12 // GPIO pin used to Dir2 #define servoPin 15 // GPIO pin used to connect the servo control (digital out) #define lightPin 34 BLECharacteristic *pCharacteristic1; BLECharacteristic *pCharacteristic2; BLECharacteristic *pCharacteristic3; bool deviceConnected = false; int lightValue = 0; int servo = 0; int motor = 0; float temperature=0.0; Servo myservo; // See the following for generating UUIDs: // https://www.uuidgenerator.net/ #define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" #define CHARACTERISTIC_UUID1 "beb5483e-36e1-4688-b7f5-ea07361b26a8" #define CHARACTERISTIC_UUID2 "beb5483e-36e1-4688-b7f5-ea07361b26a9" #define CHARACTERISTIC_UUID3 "beb5483e-36e1-4688-b7f5-ea07361b26aA" class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; }; void onDisconnect(BLEServer* pServer) { deviceConnected = false; } }; class MyCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) { std::string rxValue = pCharacteristic->getValue(); String cadena = rxValue.c_str(); if (rxValue.length() > 0) { int intcadena = cadena.toInt(); motor = intcadena / 1000; servo = (intcadena - motor * 1000) ; Serial.print("Motor: "); Serial.print(motor); Serial.print(" Servo: "); Serial.println(servo); if (motor == 50) { ledcWrite(DIR1_CHANNEL, 0); ledcWrite(DIR2_CHANNEL, 0); } else if (motor < 50) { ledcWrite(DIR1_CHANNEL, 0); ledcWrite(DIR2_CHANNEL, map(motor, 50, 100, 0, 8191)); } else if (motor > 50) { ledcWrite(DIR1_CHANNEL, map(motor, 0, 50, 8191,0)); ledcWrite(DIR2_CHANNEL, 0); } myservo.write(map(servo, 0, 100, 50, 130)); } } }; void setup() { Serial.begin(115200); Serial.println( myservo.attach(servoPin, 500, 2400)); //Setup PWM Channel for Dir1 ledcSetup(DIR1_CHANNEL, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT); ledcAttachPin(dir1Pin, DIR1_CHANNEL); //Setup PWM Channel for Dir2 ledcSetup(DIR2_CHANNEL, LEDC_BASE_FREQ, LEDC_TIMER_13_BIT); ledcAttachPin(dir2Pin, DIR2_CHANNEL); //Setup Servo //Stop Motors and Center ledcWrite(DIR1_CHANNEL, 0); ledcWrite(DIR2_CHANNEL, 0); myservo.write(90); // Create the BLE Device BLEDevice::init("DeustoAstroBot"); // Create the BLE Server BLEServer *pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); // Create the BLE Service BLEService *pService = pServer->createService(SERVICE_UUID); // Create a BLE Characteristic pCharacteristic1 = pService->createCharacteristic( CHARACTERISTIC_UUID1, BLECharacteristic::PROPERTY_READ ); pCharacteristic2 = pService->createCharacteristic( CHARACTERISTIC_UUID2, BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_READ ); pCharacteristic3 = pService->createCharacteristic( CHARACTERISTIC_UUID3, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_INDICATE ); pCharacteristic1->addDescriptor(new BLE2902()); pCharacteristic2->addDescriptor(new BLE2902()); pCharacteristic3->addDescriptor(new BLE2902()); pCharacteristic2->setCallbacks(new MyCallbacks()); // Start the service pService->start(); // Start advertising pServer->getAdvertising()->start(); Serial.println("Waiting a client connection to notify..."); } void loop() { if (deviceConnected) { lightValue=analogRead(lightPin); Serial.printf("*** NOTIFY: %d ***\n", lightValue); String valueTexto = (String) lightValue; temperature=(temprature_sens_read() - 32) / 1.8; String tempTexto=(String)temperature; String texto=tempTexto+";"+valueTexto; pCharacteristic3->setValue(texto.c_str()); pCharacteristic3->notify(); } delay(2000); }
The first test was to check the motor and the gears. I was afraid of the influence of the magnets with the motor, but it was all right. I checked the motor with a power supply setting the voltage to 3.7V, as can be shown in the video the consumption of the motor is about 276mA.
The next test was to probe the servo motor and the steering using the designed board. Has can be shown in the video it works ok.
The motor controlled by the designed board also was tested.
The next step was to test the light sensor and see if it detects well the light changes.
The next video is the test with BLE activated, the sensors and the actuators. I had to make a change in the board to be possible all work well together. It is not possible to use the ADC2 when the BLE is enabled it must be used the ADC1. So I had to solder a wire between the light sensor and a pin in the ESP32.
The final test was to try all together.
This project is oriented to promote engineering studies at schools. So we need to go to schools with the robot, a notebook, a phone and other accessories. So all this components are transported in a ruggedizedcase that can be shown in the next picture.
In the first level the notebook and the phone are placed.
In the second level the robot, wheels, gears, usb cable and other accessories are placed.
The students can take the robot and begin the contest.
In the next video the unboxing can be shown.
The choosed license for this project is the AFL license.
This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work:
Licensed under the Academic Free License version 3.0
1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following:
a) to reproduce the Original Work in copies, either alone or as part of a collective work;
b) to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work;
c) to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor's reserved rights and remedies, in this Academic Free License;
d) to perform the Original Work publicly; and
e) to display the Original Work publicly.
2) Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works.
3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work.
4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor's trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license.
5) External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c).
6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work.
7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer.
8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation.
9) Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including "fair use" or "fair dealing"). This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c).
10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware.
11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License.
12) Attorneys' Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License.
13) Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You.
16) Modification of This License. This License is Copyright © 2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process.
The next list are the componens outsite the fablab inventory that have been used in the project.