Posts with «diy» label

You can make your own rotary cellphone

As convenient as modern cellphones are, there's a certain charm to spinning an old-fashioned rotary dial to make a call -- and now, there's a cellphone that caters to that nostalgia. Brookhaven National Lab engineer Justine Haupt has developed a rotary cellphone that's not only functional, but available to make with the help of a $240 do-it-yourself kit. It's effectively a throwback to the days when phones were for calling and nothing else, plus a few present-day creature comforts.

Source: Justine Haupt, Sky's Edge

Create your own Arduino Library

Project Description

In this short tutorial I will show you how to create your own Arduino Library. Making your own library seems daunting at first, but I will show you that it is not much harder than writing your own script/sketch. I would advise that you comment you code clearly, because when you come back to it in 5 years time, it will help to navigate you through your code at this time in history. Here we go, let's go through the process of creating a very simple Arduino library.

Parts Required

  • Arduino UNO or compatible board

Project Steps

Before we begin, there are a few questions you must ask yourself:

  1. What will the library be called ?
  2. What will the library do ?
  3. What are you trying to simplify?

For our library, these are the answers to the questions above:

  1. BlinkMe
  2. It will blink an LED attached to one of the digital pins
  3. The aim is to reduce the blink commands to a single line

Create a Folder

Create a folder on your computer which will be used to house all of the files in this project. Name the folder the same name as the library. In this case we will name it "BlinkMe". Make sure you use consistent naming throughout the tutorial. Capital and lowercase letters do matter.

Create the files

Using any text based editor (eg. notepad++, PSPad, Notepad2 etc), you will need to create 3 blank files:

  • The C++ file (BlinkMe.cpp) : Library code containing all of the functions
  • The Header file (BlinkMe.h): Contains the library function declarations
  • keywords.txt : Used for syntax highlighting within the Arduino IDE

I will tell you what you need to write inside each of these files, but make sure you have the blank BlinkMe.cpp, BlinkMe.h and keywords.txt files inside of the BlinkMe folder. Some people start by creating the header file first, but I personally like to start with the CPP file.
We will now look to populate the BlinkMe C++ file:

The C++ file (.cpp)

This file will contain all of the functions in your new library.
The first thing you will need to do is include the Arduino.h file. This will drag in all of the relevant Arduino code necessary for your library to function with an Arduino. And while we haven't yet created the header file (BlinkMe.h), we need to import that also. So the first two lines should be:

#include <Arduino.h>
 #include <BlinkMe.h>

The next section of code is the "constructor". This will be responsible for constructing the BlinkMe object. The BlinkMe object will allow you to call any of the public functions within the BlinkMe library. The constructor will allow us to define the default variables or constants.

BlinkMe::BlinkMe(){
    _dPin = 13;
 }

Sometimes we will want to blink an LED on a different pin. So we will create a function to set the pin that we would like use.

void setOUTPUT(int dPin){
    _dPin = dPin;
    pinMode(_dPin, OUTPUT);
 }

The only thing left is to create the useful part of the code. We will create a simple function that will blink the LED for a set duration. The function will have a parameter, which will be used to set the blink duration.

void blink(unsigned long delay_1){
    _delay_1 = delay_1;
    digitalWrite(_dPin, HIGH);
    delay(_delay_1);
    digitalWrite(_dPin, LOW);
    delay(_delay_1);
 }

Here is the complete "BlinkMe.cpp" file:

The Header file (.h)

The header file will be used to create the library function declarations. Open the "BlinkMe.h" file.
The first step is to check to make sure that the library is NOT already defined:

#ifndef BlinkMe_h

If it is not defined, then we must define the library:

#define BlinkMe_h

We then need to provide access to the standard Arduino types and constants

#include "Arduino.h"

And finally create the BlinkMe class:

//Create the class BlinkMe
class BlinkMe{
    public:
        BlinkMe();
        void setOUTPUT(int dPin);
        void blink(unsigned long delay_1);
    private:
        int _dPin;
        unsigned long _delay_1;
 };
#endif

Here is the complete header file:

keywords.txt (optional)

The keywords.txt file will contain the keywords for the library which will allow appropriate syntax highlighting. This file is optional, however it will highlight your classes or functions based on the keyword mapping.

  • LITERAL1: specifies constants (eg. HIGH, LOW,
  • KEYWORD1: specifies classes (eg. Serial)
  • KEYWORD2: specifies methods and functions (eg. analogRead, digitalWrite, delay)
  • KEYWORD3: specifies structures (eg. if, while, loop)
You need to make sure you use a single tab between the keyword and the "KEYWORD" mapping. In our example, BlinkMe is a class, so that would be a KEYWORD1. On the other hand, "blink" is a function, so that would be a KEYWORD2. So the keywords.txt file will contain the following text:

BlinkMe     KEYWORD1
setOUTPUT   KEYWORD2
blink       KEYWORD2

Example Sketch (optional)

It is often useful to include an sketch that provides an example of the library in use. It provides some context. If you plan to include the sketch in your library, then you must follow these simple rules:

  1. Create an "examples" folder.
  2. Create an example sketch, an place it within a folder of the same name as the sketch
  3. Place the sketch folder inside of the examples folder
You will end up with something like: examples/example_sketch/example_sketch.ino
In our case it will be: examples/blinkTest/blinkTest.ino

Here is the example sketch for this library (Save as blinkTest.ino):


The library

Here is a picture of the library contents:

And now the only thing left is to zip up the library folder and import it into the Arduino IDE. Use whatever program you want to zip up the BlinkMe folder, and note the location of the zip file. You need to import the zip file into the Arduino IDE:

  • Arduino IDE > Sketch > Include Library > Add .ZIP Library...
  • Select the library zip file you just created, and select "Open".
  • You can now use your library in the Arduino IDE.
  • Test it by running your example sketch: File > Examples > BlinkMe > blinkTest

Download

You can download the entire library here:
BlinkMe Library

Conclusion

In this tutorial, I showed you how to create a simple Arduino library. If you would like so see another example, have a look at my ToggleTimer library, which is very useful when trying to blink an LED without using a delay.You don't have to limit yourself to LEDs, you can use it for other projects where delay gets in the way. ToggleTimer is a non-blocking timer that toggles between two states.


If you found this tutorial helpful, please consider supporting me by buying me a virtual coffee/beer.

$3.00 AUD only

Social Media

You can find me on various social networks:

Follow me on Twitter: ScottC @ArduinoBasics.
I can also be found on Instagram, Pinterest, and YouTube.
And if all else fails, I have a server on Discord.


ScottC 29 Dec 10:09
arduino  blink  diy  led  library  tutorial  

A Better Embroidery Machine, With 3D Printing and Common Parts

In concept, an everyday sewing machine could make embroidery a snap: the operator would move the fabric around in any direction they wish while the sewing machine would take care of slapping down stitches of colored thread to create designs and filled areas. In practice though, getting good results in this way is quite a bit more complex. To aid and automate this process, [sausagePaws] has been using CNC to take care of all the necessary motion control. The result is the DIY Embroidery Machine V2 which leverages 3D printed parts and common components such as an Arduino and stepper drivers for an economical DIY solution.

It’s not shown in the photo here, but we particularly like the 3D printed sockets that are screwed into the tabletop. These hold the sewing machine’s “feet”, and allow it to be treated like a modular component that can easily be removed and used normally when needed.

The system consists of a UI running on an Android tablet, communicating over Bluetooth to an Arduino. The Arduino controls the gantry which moves the hoop (a frame that holds a section of fabric taut while it is being embroidered), while the sewing machine lays down the stitches.

[sausagePaws]’s first version worked well, but this new design really takes advantage of 3D printing as well as the increased availability of cheap and effective CNC components. It’s still a work in progress that is a bit light on design details, but you can see it all in action in the video embedded below.

RVR is a Sphero robot for budding tinkerers

Sphero's been amusing us with its collection of robotic balls, like its adorable BB-8, for eight years. But lately the company has been getting away from the toy aspect of its products and embracing its educational potential. It's had an app that can be used to program many of its current bots for a while now, but that's only for budding coders — what do kids interested in hardware have to tinker with? Indeed, Sphero is about to release its first robot specifically made to be physically modded, called the RVR.

Upgrade a sewing machine into an automatic embroidery rig

A needle and thread is extremely useful if you need to fasten a few pieces of fabric or sew on a button, and a sewing machine takes things up several notches in speed an accuracy. This venerable machine, however, can now be enhanced with a trio of stepper motors under Arduino Uno GRBL control to take things to an entirely new level.

The “Self-Made Embroidery Machine” employs a setup very similar to a 3D printer or CNC router. Two steppers move the fabric around, while a third actuates the needle. This allows the user to program in decorative shapes and patterns as shown in the video below, and the build process is well documented if you’d like to build your own!

Sewing machine part is any old or new sewing machine. Only change for original is stepper motor with synchronised pulley system (chain/belt drive) and more embroidery friendly presser foot. It is recommended to use older sewing machine, way more convenient to mount stepper motor to cast iron and prices are relatively cheap.

XY movement consists mainly 3D printed parts, 12 pcs and similar parts known from self build 3D printers. Both axes use GT2 belts, NEMA 17 steppers and both directions are fully scalable.

Synchronous movement comes from Arduino powered GRBL G-code interpreter, it is mouthful, but basically machine moves using G-code send to Arduino. It is not that complicated and it is only carrier like any other one when going from system to another one.

Now we have movement and code, but how to make nice shapes and export to G-code. It is nothing to do with medieval sorcery, it is a matter of downloading Inkscape and extension called Inkstitch.

Help and examples how to use Inkstitch extension can be found address above. End result should be really close to hobby level embroidery machines, just slower speed. After all, embroidery machine is nothing more than overgrown sewing machine.

Watch the Snappy, Insect-like Moves of this DIY Quadruped Robot

Some legged robots end up moving with ponderous deliberation, or wavering in unstable-looking jerks. A few unfortunates manage to do both at once. [MusaW]’s 3D Printed Quadruped Robot, on the other hand, moves in rapid motions that manage to look sharp and insect-like instead of unstable. Based on an earlier design he made for a 3D printable quadruped frame, [MusaW] has now released this step-by-step guide for building your own version. All that’s needed is the STL files and roughly $50 in parts from the usual Chinese resellers to have the makings of a great weekend project.

The robot uses twelve SG90 servos and an Arduino nano with a servo driver board to control them all, but there’s one additional feature: Wi-Fi control is provided thanks to a Wemos D1 Mini (which uses an ESP-8266EX) acting as a wireless access point to serve up a simple web interface through which the robot can be controlled with any web browser.

Embedded below is a brief video. The first half is assembly, and the second half demonstrates the robot’s fast, sharp movements.

We love it when robots show some personality, like this adorable little quadruped robot that can make small jumps.

Thanks to [Baldpower] for the tip!

DIY Puff-Suck Interface Aims for Faster Text Input

Puff and Suck (or Sip and Puff) systems allow people with little to no arm mobility to more easily interact with computers by using a straw-like unit as an input device. [Ana] tells us that the usual way these devices are used to input text involves a screen-based keyboard; a cursor is moved to a letter using some method (joystick, mouse emulator, buttons, or eye tracking) and that letter is selected with a sip or puff into a tube.

[Ana] saw such systems as effective and intuitive to use, but also limited in speed because there’s only so fast that one can select letters one at a time. That led to trying a new method; one that requires a bit more work on the user’s part, but the reward is faster text entry. The Puff-Suck Interface for Fast Text Input turns a hollow plastic disk and a rubber diaphragm into bipolar pressure switch, able to detect three states: suck, puff, and idle. The unit works by having an IR emitter and receiver pair on each side of a diaphragm (one half of which is shown in the image above). When air is blown into or sucked out of the unit, the diaphragm moves and physically blocks one or the other emitter-receiver pair. The resulting signals are interpreted by an attached Arduino.

How does this enable faster text input? By throwing out the usual “screen keyboard” interface and using Morse code, with puffs as dots and sucks as dashes. The project then acts as a kind of Morse code keyboard. It does require skill on the user’s part, but the reward is much faster text entry. The idea got selected as a finalist in the Human-Computer Interface Challenge portion of the 2018 Hackaday Prize!

Morse code may seem like a strange throwback to some, but not only does the bipolar nature of [Ana]’s puff-suck switch closely resemble that of Morse code input paddles, it’s also easy to learn. Morse code is far from dead; we have pages of projects and news showing its involvement in everything from whimsical projects to solving serious communication needs.

A HID For Robots

Whether with projects featured here or out in the real world, we have a tendency to focus most upon the end product. The car, solar panel, or even robot. But there’s a lot more going on behind the scenes that needs to be taken care of as well, whether it’s fuel infrastructure to keep the car running, a semiconductor manufacturer to create silicon wafers, or a control system for the robot. This project is one of the latter: a human interface device for a robot arm that is completely DIY.

While robots are often automated, some still need human input. The human input can be required all the time, or can be used to teach the robot initially how to perform a task which will then be automated. This “keyboard” of sorts built by [Ahmed] comes with a joystick, potentiometer, and four switch inputs that are all fully programmable via an Arduino Due. With that, you can perform virtually any action with whatever type of robot you need, and since it’s based on an Arduino it would also be easy to expand.

The video below and project page have all the instructions and bill of materials if you want to roll out your own. It’s a pretty straightforward project but one that might be worth checking out since we don’t often feature controllers for other things, although we do see them sometimes for controlling telescopes rather than robots.

 

 

Hack a Day 02 Jun 06:00

Laser projector ditches galvanometer for spinning drum

Laser projectors like those popular in clubs or laser shows often use mirror galvanometers to reflect the laser and draw in 2D. Without galvos, and on a tight budget, [Vitaliy Mosesov] decided that instead of downgrading the quality, he would seek an entirely different solution: a spinning mirror drum.

He fires a laser at a rotating drum with twelve mirror faces, each at a different adjustable vertical angle. The laser will hit a higher or lower point on the projection surface depending on which mirror it’s reflecting off – this creates resolution in the Y direction.

Timing the pulsing of the laser so that it reflects off the mirror at a certain horizontal angle provides the X resolution.

As you can already tell, speed and timing is critical for this to work. So much so that [Vitaliy] decided he wanted to overclock his Arduino – from 16 MHz to 24.576 MHz. Since this changes the baud rate, an AVR ISP II was used for programming after the modification, and the ‘duino’s hardware serial initialization had to be hacked too.

For the laser itself, [Vitaliy] designed some nifty driver circuitry, which can respond quickly to the required >50 kHz modulation, supply high current, and filter out voltage transients on the power supply (semiconductor lasers have no protection from current spikes).

On the motor side of things, closed loop control is essential. A photo-interrupter was added to the drum for exact speed detection, as well as a differentiator to clean up the signal. Oh, and did we mention the motor is from a floppy disk drive?

We’ve actually seen builds like this before, including a dot-matrix version with multiple lasers and one made apparently out of Meccano and hot-glue that can project a Jolly Wrencher. But this build, with its multiple, adjustable mirrors, is a beauty.  Check it out in action below.

Hack a Day 20 Apr 16:30

Arduino and processing based GUI person counter

In this post, we will make arduino and processing based GUI person counter. For person counter, we are using infrared sensor (IR). It's output is digital and is fed to pin number 7 of arduino.

The connections are as follows:


Arduino Code:

int switchPin=7;
int ledPin=13;

void setup() {
pinMode(switchPin,INPUT);
digitalWrite(switchPin,HIGH);
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
}

void loop() {
  if(digitalRead(switchPin))
    {
    while(digitalRead(switchPin));        
    Serial.print(1,DEC);
    }
  else
    {
    Serial.print(0,DEC);
    }
    delay(100);
} 

Processing Code:

import processing.serial.*;

Serial port;
int val;
int count=0;
PFont f;                           // STEP 1 Declare PFont variable

void setup()  {
    size(400,400);
    noStroke();
    println(Serial.list());  // print list of available serial port 
    port=new Serial(this,Serial.list()[0],9600);        
    f = createFont("Arial",16,true); // STEP 2 Create Font
 }
  
void draw()  {
  if(0<port.available())
  {
    val=port.read();
  } 
    background(204);
    println(val);

  if(val==48)
{     fill(255,0,0);   // red
  rect(50,50,300,300);  // green
}
  else if(val==49)
{     fill(0,255,0);   // green
  rect(50,50,300,300);  // green
  count++;
}

  textFont(f,30);               
  fill(0);                         
  text("Number of Person is: " + count , 30, 30);
//text(count, 100, 100);
delay(100);

 }

/* END OF CODE */