Dear friends welcome to another video!
In today’s video, we are going to build an Arduino based robot capable of avoiding obstacles in its path. It is a fun project and a great learning experience, so without any further delay, let’s get started!
How to build an Arduino Robot
Today, we will be building a fully functional robot capable of moving around and avoiding obstacles in its path. The robot uses the Ultrasonic distance sensor to measure the distance in front of it. When this distance reduces to a particular level, the robot interprets it to mean the presence of an obstacle in its path. When the robot detects an obstacle in its path, it stops, goes backward for a few cms, looks around(right and left) then turn towards the direction that shows more free space in front of it. As you are going to find out, building this impressive little robot is extremely fun and easy as it will take only a few hours to put everything together. After which you can use my code directly or modify it to implement the behavioral pattern you desire for the robot. It is a great learning experience and great introduction to robotics for kids and adults. Let’s build it!
——————————————————–
Required Components and Where to Buy
——————————————————–
The parts needed in order to build this Arduino Robot are listed below. You can click the link in front of each part to buy the exact components used for this video.
Robot Chassis Kit ▶ http://bit.ly/RobotChassisB
Arduino Uno ▶ https://educ8s.tv/part/ArduinoUno
Motor Shield ▶ http://bit.ly/MotorShield
SG90 Servo ▶ https://educ8s.tv/part/SG90
Ultrasonic Sensor ▶ https://educ8s.tv/part/HCSR04
Switch ▶ http://bit.ly/Switch10PCS
100nf Capacitors ▶ https://educ8s.tv/part/CeramicCapacitors
300μF Capacitors ▶ https://educ8s.tv/part/ElectrolyticCapacitors
Wires ▶ https://educ8s.tv/part/Wires
Full disclosure: All of the links above are affiliate links. I get a small percentage of each sale they generate. Thank you for your support!
[adsense]————————–
Building the Robot
————————–
To begin, we start by coupling the chassis of the robot. The robot kit, contains the chassis, two geared DC motors, the wheels, the front wheel, battery holder, some screws, and wires. The kit also contains a guide which can be followed in steps like we will be doing to build the robot.
Step 1. Connect the motor and wheels to the chassis.
To complete this step, we start by soldering the thick red and black wires to the positive and negative terminals of the motors and in order to reduce the electrical noise that the motor produces, we solder the small ceramic capacitors to the motors as shown in the image below. Since we are using ceramic capacitors which do not have polarity, just solder one leg to each motor terminal as the orientation doesn’t matter.
Next, We attach the front wheel. My little nephew helps me with this, he owns the small hands in the picture. This project is great for kids!
Next, we attach the rear wheels to the chassis in accordance with the instruction leaflet provided attached to the kit.
Step 2: Prepare the Switch and connect the Power Source
Next, we add a switch to the battery holder so that we will be able to turn the robot on or off. The switch is connected according to the schematics shown below and attached to the case using a hot glue. The Battery case is attached to the chassis using a double-sided tape to ensure everything sticks together.
Step 3: Mount other Parts on the chassis.
The next step is to mount other parts of the robot before we start connecting their wires. The motor shield is stacked on the Arduino and it is mounted on the chassis using a double-sided tape. The current requirements of the motors are often higher than what the Arduino can provide, that is why it’s important to use the motor shield as it is equipped with additional circuitry to provide up to 600mA current to each of the motors. This shield provides power to the motors and the servo motor and makes our life much easier. The Ultrasonic sensor is also mounted on the top of the servo motor which is then mounted on the chassis using a double-sided tape. I could have easily made a 3D print part in order to achieve these things but since most of the viewers don’t have access to a 3D printer yet, I decided to go with this simple solution.
With this part done, we are through with coupling the robot and can move to wiring the components.
Schematics
Wire up the components together as shown in the image below.
To simplify the connections, below is a pin map of how the components connect, one to the other.
Ultrasonic Sensor ▶ Motor Shield VCC ▶ 5v Gnd ▶ Gnd Trig ▶ A4 Echo ▶ A5 Servo ▶ Motor Shield(Servo_2 port) Signal(yellow wire) ▶ S Vcc(Red wire) ▶ + Gnd(Black wire) ▶ -
Double check your connections to be sure everything is as it should be. Slide the switch to turn it on and you should see a green light come up on the motor driver, indicating power presence. If this does not occur, take a look at the schematics and correct any error.
With everything confirmed, we can then proceed to take a look at the code for this project.
——-
Code
——
The code uses three libraries. Two of them must be downloaded in order for the program to compile. The first one is the motor shield driver from Adafruit. The second library is the NewPing library for the supersonic distance sensor. You can find the links for both libraries in the description of the video.
——————–
LIBRARIES
——————–
Motor Shield Library: https://github.com/adafruit/Adafruit-Motor-Shield-library
New Ping Library: https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home#!download-install
Let’s now take a quick look at the code in order to see how it works.
The first thing we do in the code is to include the libraries that have been downloaded into the code.
////////////////////////////////////////////// // Arduino ROBOT v0.1 // // // // https://educ8s.tv // ///////////////////////////////////////////// #include <AFMotor.h> #include <NewPing.h> #include <Servo.h>
Next, we declare the pins to which or ultrasonic sensor is connected to, and some variables which will be used to store info as the code runs then we set the speed of the motors. You can set any value up to 255.
#define TRIG_PIN A4 #define ECHO_PIN A5 #define MAX_DISTANCE 200 #define MAX_SPEED 190 // sets speed of DC motors #define MAX_SPEED_OFFSET 20
Next, we Initialize the servo motor by creating an object of the servo library. We Also initialize the Motors to which the wheels are connected using the AF library.
AF_DCMotor motor1(1, MOTOR12_1KHZ); AF_DCMotor motor2(3, MOTOR12_1KHZ); Servo myservo;
We then move into the void setup() function where we initialize the servo motor and we set it to “look” straight. In my case, this was at 115 degrees angle, but you might need to do some maths or trial and error to get the degrees which signify the ultrasonic sensor is forward faced. Next, we read the distance a few times in order to get a valid distance measurement.
void setup() { myservo.attach(9); myservo.write(115); delay(2000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); }
Now we go to the loop function which executes every 40 ms. If the distance we measured is less than or equal to 15 cm, we stop the motors, reverse for 300ms, stop, look right and left and measure the distance in each direction. If the distance in one direction is greater than the other we turn the robot to the direction with the farthest/greatest distance and instruct it to move forward.
void loop() { int distanceR = 0; int distanceL = 0; delay(40); if(distance<=15) { moveStop(); delay(100); moveBackward(); delay(300); moveStop(); delay(200); distanceR = lookRight(); delay(200); distanceL = lookLeft(); delay(200); if(distanceR>=distanceL) { turnRight(); moveStop(); }else { turnLeft(); moveStop(); } }else { moveForward(); } distance = readPing(); }
That’s the simple algorithm I developed for this robot so far. As always you can find the code of the project in a link in the description of the video and also by clicking the link below. As earlier mentioned, feel free to modify the code to suit your needs.
——————–
CODE OF THE PROJECT
——————–
That’s it for this tutorial guys, thanks for watching and(or) reading. Did you make any cool and interesting modifications or you have any questions, just drop the comment. Also subscribe to our youtube channel by following the link below, its one of the few ways you could show love for what we are doing.
SUBSCRIBE ON YOUTUBE
——————–
Never miss a video: Subscribe to educ8s.tv
Thk u very much..ur tutorial is really good…i have seen all ur vedio and subscribed…but Can u plz send me a link where I can download all ur codes of the project’s at a time….i had downloaded it earlier but I lost it ..now again I have get a codes by going through each vedio info again…plz send to my email or send me an link to download all the codes at a time…thk you
Hi, your code is not working properly. do you have a fix for it? Seems to be having a problem with this line:
NewPing sonar (TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
Thanks
Have you downloaded the NewPing library?
Hi!
Please help me with the code. I get a set of errors when trying to upload.
Arduino: 1.5.4 (Windows 7), Board: “Arduino Uno”
ArduinoRobot:19: error: ‘AF_DCMotor’ does not name a type
ArduinoRobot:20: error: ‘AF_DCMotor’ does not name a type
ArduinoRobot.ino: In function ‘void moveStop()’:
ArduinoRobot:109: error: ‘motor1’ was not declared in this scope
ArduinoRobot:109: error: ‘RELEASE’ was not declared in this scope
ArduinoRobot:110: error: ‘motor2’ was not declared in this scope
ArduinoRobot.ino: In function ‘void moveForward()’:
ArduinoRobot:118: error: ‘motor1’ was not declared in this scope
ArduinoRobot:118: error: ‘FORWARD’ was not declared in this scope
ArduinoRobot:119: error: ‘motor2’ was not declared in this scope
ArduinoRobot.ino: In function ‘void moveBackward()’:
ArduinoRobot:131: error: ‘motor1’ was not declared in this scope
ArduinoRobot:131: error: ‘BACKWARD’ was not declared in this scope
ArduinoRobot:132: error: ‘motor2’ was not declared in this scope
ArduinoRobot.ino: In function ‘void turnRight()’:
ArduinoRobot:142: error: ‘motor1’ was not declared in this scope
ArduinoRobot:142: error: ‘FORWARD’ was not declared in this scope
ArduinoRobot:143: error: ‘motor2’ was not declared in this scope
ArduinoRobot:143: error: ‘BACKWARD’ was not declared in this scope
ArduinoRobot.ino: In function ‘void turnLeft()’:
ArduinoRobot:150: error: ‘motor1’ was not declared in this scope
ArduinoRobot:150: error: ‘BACKWARD’ was not declared in this scope
ArduinoRobot:151: error: ‘motor2’ was not declared in this scope
ArduinoRobot:151: error: ‘FORWARD’ was not declared in this scope
This report would have more information with
“Show verbose output during compilation”
enabled in File > Preferences.
I mention that I downloaded the code from your link on the website:
https://educ8s.tv/arduino-robot-easy-diy-project/
Many thanks!!!
Have you installed the Motor library?
hey you install the motor shield library. i am sure you will get it and after installing the library make sure you drag the library folder to document/Arduino/library..
Hey, never mind. Your code works great. Needed to restart arduino after installing the ping library. Great video. Thanks.
Thank you very much
Hi, i don’t understand where to sold the 300μF capacitor……Thank you very much
Sorry….. i resolved….Great project, . I would like to congratulate you on your excellent work!!!
I need a little help… Where do I have to connect the 300μF capacitor??? Thanks! Great tutorial! :)
Sir the robot is not moving its head and only rotating right side only please help me
Did you sort this if so how?
thank you so much.your video helped a lot.?☺
Hi, I was wondering how I could modify the code to include IR sensors for line following? Also how would I attach these to the current body of the robot
Thank you
Love the project. It’s been a big help to me. I modified an old Trilobot (that my son found in the garbage) and all basic functions work fine. But, I have a question. In your code there is a class called “moveForward”. See below. In that class you refer to a Boolean variable called “goesForward”. If this is necessary, please explain why. I have adapted the overall code to suit the latest version of the Adafruit Motorshield. In my case, is “goesForward” still required?
Have fun.
Thanks,
Terry from Toronto
*************************************************
void moveForward() {
if(!goesForward)
{
goesForward=true;
motor1.run(FORWARD);
motor2.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
}
*********************************************
Good night, I have just completed mine, the robot is not moving, i have checked the code and everything, I suspect that it is the batteries, I will get some better one and let you know the outcome.
Thanks
Sir can we make a robo follow us using this technique
I m thinking of a an emmiter which the user will carry and a ultrasound sensor which will be on the bot by measuring distance it can also follow the emmiter
Hi . Im doing this project uaing servo motor instead of dc motor. Do you have coding for that . Thank you
Can you help me with my case,,, my robot is 4wd and i don’t know how to modify the code for that…
Hi,
your video is very easier to build obstacle robot, in this regard I have build everything and finally verify your code but there is error coming which is “redefinition void set up()” for this I could not upload it. So would you please help me by correcting this. (parts are arduino uno,adafruit motor shield,HC-Sr04 and SG90).
Thanks
#include
#include
#include
#define TRIG_PIN A4
#define ECHO_PIN A5
#define MAX_DISTANCE 200
#define MAX_SPEED 190 // sets speed of DC motors
#define MAX_SPEED_OFFSET 20
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motor1(1, MOTOR12_1KHZ);
AF_DCMotor motor2(3, MOTOR12_1KHZ);
Servo myservo;
boolean goesForward=false;
int distance = 100;
int speedSet = 0;
void setup() {
myservo.attach(9);
myservo.write(115);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);
if(distance=distanceL)
{
turnRight();
moveStop();
}else
{
turnLeft();
moveStop();
}
}else
{
moveForward();
}
distance = readPing();
}
int lookRight()
{
myservo.write(50);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
}
int lookLeft()
{
myservo.write(170);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
delay(100);
}
int readPing() {
delay(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}
void moveStop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
}
void moveForward() {
if(!goesForward)
{
goesForward=true;
motor1.run(FORWARD);
motor2.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
}
void moveBackward() {
goesForward=false;
motor1.run(BACKWARD);
motor2.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
void turnRight() {
motor1.run(FORWARD);
motor2.run(BACKWARD);
delay(300);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
void turnLeft() {
motor1.run(BACKWARD);
motor2.run(FORWARD);
delay(300);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
this code is working properly or not ? i have to make it ? please reply !
Great write up. I’m looking to use this for a 4 wheel robot…any suggestions please ?
Can I use Arduino Uno DIP ? Coz in your video you’re using Arduino Uno SMD.
Yes, it is exactly the same.
hey : your code give result to me (error compiling)
and i installed the libraries af motor and new ping
could you tell the solution?
Hi,
Could you please help me fix this code? I’m using the Adafruit motor shield V2.
Everything else seems fine but I get an error at the end of the code:
Documents/Arduino/ArduinoRobot/ArduinoRobot.ino: In function ‘void moveStop()’:
ArduinoRobot:119:10: error: request for member ‘run’ in ‘motor1’, which is of pointer type ‘Adafruit_DCMotor*’ (maybe you meant to use ‘->’ ?)
motor1.run(RELEASE);
^
ArduinoRobot:120:10: error: request for member ‘run’ in ‘motor2’, which is of pointer type ‘Adafruit_DCMotor*’ (maybe you meant to use ‘->’ ?)
motor2.run(RELEASE);
^
/Users/Documents/Arduino/ArduinoRobot/ArduinoRobot.ino: In function ‘void moveForward()’:
ArduinoRobot:128:12: error: request for member ‘run’ in ‘motor1’, which is of pointer type ‘Adafruit_DCMotor*’ (maybe you meant to use ‘->’ ?)
motor1.run(FORWARD);
^
ArduinoRobot:129:12: error: request for member ‘run’ in ‘motor2’, which is of pointer type ‘Adafruit_DCMotor*’ (maybe you meant to use ‘->’ ?)
motor2.run(FORWARD);
Any help would be appreciated.
Here is my code:
//////////////////////////////////////////////
// Arduino ROBOT v0.1 //
// //
// https://educ8s.tv //
/////////////////////////////////////////////
#include
#include
#include
#include
#include “Adafruit_PWMServoDriver.h”
#define TRIG_PIN A4
#define ECHO_PIN A5
#define MAX_DISTANCE 200
#define MAX_SPEED 190 // sets speed of DC motors
#define MAX_SPEED_OFFSET 20
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
// Select which ‘port’ M1, M2, M3 or M4. In this case, M1
Adafruit_DCMotor *motor1 = AFMS.getMotor(3);
Adafruit_DCMotor *motor2 = AFMS.getMotor(4);
Servo myservo;
boolean goesForward=false;
int distance = 100;
int speedSet = 0;
void setup() {
AFMS.begin();
myservo.attach(10);
myservo.write(115);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}
void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);
if(distance=distanceL)
{
turnRight();
moveStop();
}else
{
turnLeft();
moveStop();
}
}else
{
moveForward();
}
distance = readPing();
}
int lookRight()
{
myservo.write(50);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
}
int lookLeft()
{
myservo.write(170);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
delay(100);
}
int readPing() {
delay(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}
void moveStop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
}
void moveForward() {
if(!goesForward)
{
goesForward=true;
motor1.run(FORWARD);
motor2.run(FORWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
}
void moveBackward() {
goesForward=false;
motor1.run(BACKWARD);
motor2.run(BACKWARD);
for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor1.setSpeed(speedSet);
motor2.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
void turnRight() {
motor1.run(FORWARD);
motor2.run(BACKWARD);
delay(300);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
void turnLeft() {
motor1.run(BACKWARD);
motor2.run(FORWARD);
delay(300);
motor1.run(FORWARD);
motor2.run(FORWARD);
}
Trabajé en su proyecto gracias, usted cree que puede explicarme todo el código por favor y enviarlo a mi correo electrónico si no es demasiado problema.
I worked on your project thanks, you believe you can explain me all the code please and send it to my email if it is not too much trouble.
Usotohonto14@gmail.com is my e-mail Thanks for everything.
Could you please share how to fix the code for v2 ? We are also having trouble with v2… And our project needs to be completed soon… Thank you
Thank you! Good explanation and nice pics. The video helped a lot ! I would like to suggest a few edits please.
1- The wiring for the Ultrasound Sensor needs to be corrected. The trigger and Echo pins in the diagram and in the code are inverted. The code has Trigger pin in A4, while the diagram has it in A5.
2- If you have issues with motor not running, may be you want to remove the input MOTOR12_1KHZ from lines 7&8. See updated code below. What I found is that for most of the battery operated motors, the MOTOR12_1KHZ will create an error and a humming noise in the motor.
AF_DCMotor motor1(1); // Removed MOTOR12_1KHZ
AF_DCMotor motor2(3); // Removed MOTOR12_1KHZ
Hello, I’m very thankful to you for uploading this,
but can I make Ultrasonic avoid fire?
If I can, how could I connect it in a way that can avoid fire?
And should I connect it with fire sensor?
I hope you can help me.
I will really appreciate your help.
Thank you.
Not moving backward … Please suggest a solution .. all other things are fine….
Don’t used 330uf ? What going on?
Sir your code is compiling but I can’t upload it to my arduino board .I thought my arduino board is not working but the led glows (on , pin 13 led) please help me to fix this problem.
Sir your code is compiling but i can’t upload any code to the arduino board. I thought my arduino board is not working but the led of my board glows (both on and pin13 led)please help me to fix this problem.
Which library is turnLeft()/turnRight() etc from?
terima kasih untuk kodenya, saya menggunakan modul track / tank sebagai platform dan berfungsi baik dengan baterai 9v
thanks for the code , i’m using track/tank module as platform and it work great with 9v battery
hey im useing the same code and motor sheild. for some reason sometimes after it detects something backs up and checks for left and right distance and turns it will get hung up for like 5 seconds sometimes longer without doing anything before moving forward.
hello !!! Why your code doesn’t work ????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@????????????????????????
void buzStop() {
tone(buzzer, 660);
delay(20);
noTone(buzzer);
delay(5);
tone(buzzer, 540);
delay(20);
noTone(buzzer);
delay(5);
//digitalWrite(LED_RED, HIGH);
//delay(25);
//digitalWrite(LED_RED, LOW);
//digitalWrite(LED_BLU, HIGH);
//delay(25);
//digitalWrite(LED_BLU, LOW);
//digitalWrite(LED_GRN, HIGH);
//delay(25);
//digitalWrite(LED_GRN, LOW);
}
I’m trying to add the follow function to your code but it keeps changing the algorithm when I add it within the loop;
//moveStop();
//delay(100);
//buzStop(); //audiable sound from speaker
moveStop();
delay(100);
moveBackward();
delay(150);
//buzStop(); //audiable sound from speaker
//delay(150);
moveStop();
delay(200);
//buzStop(); //audiable sound from speaker
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);
//buzStop(); //audiable sound from speaker
I have tried placing the function in different location in the loop but It’s still not working. My project is due 5/7/2020 and I would like to have this feature in the code for the final design.
Hi, I keep getting error message serial port not selected. What does this mean, please help!!
please help my code error:
Arduino: 1.8.19 (Windows Store 1.8.57.0) (Windows 10), Board: “Arduino Uno”
ArduinoRobot:8:10: fatal error: NewPing.h: No such file or directory
#include
^~~~~~~~~~~
compilation terminated.
exit status 1
NewPing.h: No such file or directory
Invalid library found in C:\Users\USER\Documents\Arduino\libraries\readme.txt: no headers files (.h) found in C:\Users\USER\Documents\Arduino\libraries\readme.txt
Invalid library found in C:\Users\USER\Documents\Arduino\libraries\sketch_jun05a: no headers files (.h) found in C:\Users\USER\Documents\Arduino\libraries\sketch_jun05a
Hello,
I’m building this now but I have a job for it. I’m a home based researcher and I want to collect atmospheric data in an empty room. I’m looking for unusual activity like supposed ghosts. Unlike the TV shows, I want to collect data from different sensors to later determine if there is a relationship between sounds and pictures of any activity and data captured independently. I had a National Science Foundation grant to build the robot but Covid happened and the university laid every teacher off. I never was able to build the robot. Now I teach 6th grade and I have to build it. I really need your help.
The robot needs to identify differences in the temperature like a thermocamera / IR and move towards the colder objects and follow them around like a puppy collecting weather and atmospheric data. Many people report that the air temperature is colder when a spirit is near. If the robot can identify such a temperature difference, that would be great that it moves toward that anomoly and collects data. I’ll be adding several Arduino Nanos for different sensors instead of everything on one Uno. They’re very affordable and redundant data is better for research. The robot will have cameras and sound recording on-board, I would like to be able to have the data sent to me wirelessly and backed up on the robot on SD cards too. I need to know the relative humidty and temperature, air pressure, and light properties if possible. Can you help? The sensors should be independent of each other. And is there a way to talk through a speaker on the robot to ask questions if a spirit is there?
Thank you.