Skip to content

7. Input & Output device

This week we worked on input and output devices, connected to Arduino Nano 33 Ble microcontroller.

General information

An input device is something you connect to a computer that sends information into the computer. An output device is something you connect to a computer that has information sent to it.

Input

Input devices are used to allow us to enter information into a computer system. This might be, for example, to control a character in a game, click on a shortcut icon on your desktop, or type data into a spreadsheet. To test this, we tried to use the microcontroller to sense temperature and connected it to the computer to read the results.

Reading temperature

The steps goes as following:

1- Opening a new Arduino page

2- Copying the HTS221 library link from Arduino website to download it

3- Opening Sketch > Include library > Manage libraries

4- Pasting the link copied earlier to make the Arduino read the temperature and humidity sensors

5- Going to Examples > ReadSensors

6- Going to serial monitor to show the values

7- This one contains the original temperature and humidity values

8- This one after heating the Arduino by holding it and it shows the new temperature and humidity values

Temperature and Humidity code
/*
  HTS221 - Read Sensors

  This example reads data from the on-board HTS221 sensor of the
  Nano 33 BLE Sense and prints the temperature and humidity sensor
  values to the Serial Monitor once a second.

  The circuit:
  - Arduino Nano 33 BLE Sense

  This example code is in the public domain.
*/

#include <Arduino_HTS221.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

  if (!HTS.begin()) {
    Serial.println("Failed to initialize humidity temperature sensor!");
    while (1);
  }
}

void loop() {
  // read all the sensor values
  float temperature = HTS.readTemperature();
  float humidity    = HTS.readHumidity();

  // print each of the sensor values
  Serial.print("Temperature = ");
  Serial.print(temperature);
  Serial.println(" °C");

  Serial.print("Humidity    = ");
  Serial.print(humidity);
  Serial.println(" %");

  // print an empty line
  Serial.println();

  // wait 1 second to print again
  delay(1000);
}

Output

Output devices provide data in myriad different forms, some of which include audio, visual, and hard copy media. The devices are usually used for display, projection, or for physical reproduction. Monitors and printers are two of the most commonly-known output devices used with a computer. To test this device I chose the servo.

Servo motor

Servo motors or “servos”, as they are known, are electronic devices and rotary or linear actuators that rotate and push parts of a machine with precision. Servos are mainly used on angular or linear position and for specific velocity, and acceleration. This time we needed to connect the servo motor with the micro controller by jumper wires.

So the connections we need here are Ground to Ground, Power to Vin, Digital to D6

After that comes the programming part with the steps following:

1- Going to Examples > Servo > Sweep

2- The code now shows

3- Changing the pos to the value of 180 which is the maximum movement degree for this servo and changed the delay to 1000

Sweep code
/* Sweep
 by BARRAGAN <http://barraganstudio.com>
 This example code is in the public domain.

 modified 8 Nov 2013
 by Scott Fitzgerald
 https://www.arduino.cc/en/Tutorial/LibraryExamples/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(0);              // tell servo to go to position 0
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(180);              // tell servo to go to position 180
    delay(15);                       // waits 15 ms for the servo to reach the position
  }
}

Results

Servo Test on Vimeo.

Input and Output

DC Motor and sound sensor

I wanted to make something related to my final project, so the whole idea was to connect DC Motor with sound sensor through Motor driver

you can check out this link for more

What I needed to do this: - DC Motor - Motor driver - Sound sensor - Breadboard - Microcontroller - Jumper wires

code
int sound_digital = 6;
int sound_analog = A0;
int motor2pin1 = 4;
int motor2pin2 = 5;
int motor1pin1 = 7;
int motor1pin2 = 8;
int enA = 3;
int enB = 9;
bool rotate = 0;



void setup(){
Serial.begin(9600);
pinMode(sound_digital, INPUT);
pinMode(motor2pin1, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
}



void loop(){
int val_digital = digitalRead(sound_digital);
int val_analog = analogRead(sound_analog);



Serial.print(val_analog);
Serial.print("\t");
Serial.println(val_digital);




if (val_digital == HIGH && rotate == 0)
{
analogWrite(enA, 150);
analogWrite(enB, 150);
digitalWrite(motor2pin1, HIGH);
digitalWrite(motor2pin2, LOW);
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, HIGH);
delay(4000);
rotate = 1;
}
else if (val_digital == HIGH && rotate == 1)
{
analogWrite(enA, 50);
analogWrite(enB, 50);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, HIGH);
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2, LOW);
delay(4500);
rotate = 0;
}
else if (val_digital == LOW)
{
analogWrite(enA, 255);
analogWrite(enB, 255);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, LOW);
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, LOW);
}
}

Results

Motor Test on Vimeo.


Last update: January 19, 2022