1 Watt audio amplifier for Mobile device

About LM4890

1 Watt audio amplifier for mobile device has been designed using LM4890 power amplifier. LM4890 is primarily designed for mobile phones and other portable devices. It is capable of delivering 1 watt of continuous average power to an 8 ohm load from 5v power supply. It has a distortion of less than 1%.

LM4890 does not require output coupling capacitors and therefore ideally suited for mobile phones and other low voltage applications where minimal power consumption is primary requirement. Power output at 5v is 1 watt and at 3.3 v it is approximately 0.4 watt.

Circuit diagram

LM 4890 - 1 watt audio power amplifier

Parts required.

  • C1= 1 μf 16v
  • C2=0.39 μF 50v
  • C3=1 μf 16 v
  • C4=25 pf
  • R1, R2, R3 = 20 k
  • J1 an dJ2 = Jumper head vertical mount
  • Speaker – 8 Ω

For more circuits on audio amplifier click here

Real time clock with DS1302

Real time clock with DS1302 is designed using Arduino Uno.

About DS1302

The DS1302 is a trickle-charge timekeeping chip containing a real-time clock/calendar and 31 bytes of static RAM. It communicates with a microprocessor via a simple serial interface. The real-time clock/calendar provides seconds, minutes, hours, day, date, month, and year information. DS1302 requires only three wires to communicate with the clock/RAM: CE, I/O (data line), and SCLK (serial clock). It has dual power pins, one for primary and another for backup.  In this example the Primary power will be provided by the Arduino, and the back up by a CR2032 battery.

During reading, the clock could rollover. That would result in bad clock data. To prevent that, the DS1302 has a buffer to store the clock data. That buffer can be read in a single communication session, called a “burst” mode.

The Year data of the DS1302 is only two digits (0-99). The Year ‘0’ is 2000, and not 1970. It has a Leap-Year compensation from 2000 up to 2099 (for a value of 0-99).The data in this ram will get lost if the Arduino is off, and the battery gets empty.

What is required to build the real time clock?

You will need following parts/components

  • Arduino Uno
  • DS1302 Module
  • Button cell

How to connect to Arduino?

The DS1302 can be easily connected to the Arduino. Three pins are needed for the interface (CE, I/O, SCLK), and Vcc2 should be connected to +5V (or +3.3V). The Vcc1 is for a battery .

A crystal of 32.768kHz should be connected to X1 and X2.

The DS1302 can run with a voltage from 2.0V to 5.5V.

Sample Code

// Example sketch for interfacing with the DS1302 timekeeping chip.
#include <stdio.h>
#include <DS1302.h>
namespace {
// Set the appropriate digital I/O pin connections. These are the pin
// assignments for the Arduino as well for as the DS1302 chip.
//
const int CePin   = 5;  // Chip Enable
const int IoPin   = 6;  // Input/Output
const int SclkPin = 7;  // Serial Clock

// Create a DS1302 object.
DS1302 rtc(CePin, IoPin, SclkPin);
String dayAsString(const Time::Day day) {
  switch (day) {
    case Time::kSunday: return "Sunday";
    case Time::kMonday: return "Monday";
    case Time::kTuesday: return "Tuesday";
    case Time::kWednesday: return "Wednesday";
    case Time::kThursday: return "Thursday";
    case Time::kFriday: return "Friday";
    case Time::kSaturday: return "Saturday";
  }
  return "(unknown day)";
}
void printTime() {
  // Get the current time and date from the chip.
  Time t = rtc.time();
  // Name the day of the week.
  const String day = dayAsString(t.day);
  // Format the time and date and insert into the temporary buffer.
  char buf[50];
  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
           day.c_str(),
           t.yr, t.mon, t.date,
           t.hr, t.min, t.sec);
 // Print the formatted string to serial so we can see the time.
  Serial.println(buf);

}
}  // namespace
void setup() {
  Serial.begin(9600);
 // Initialize a new chip by turning off write protection and clearing the
  // clock halt flag. These methods needn't always be called. See the DS1302
  // datasheet for details.

 //  rtc.writeProtect(false);

  // rtc.halt(false);
  // Make a new time object to set the date and time.
 // This need to be done first time to set the Date and time.
  // Thursday, July 6, 2017 at 22:58:50.
  // Time t(2017, 07, 6, 22, 58, 50, Time::kThursday);
  // Set the time and date on the chip.
  // rtc.time(t);
}
// Loop and print the time every second.
void loop() {
  printTime();
  delay(1000);
}

Note: Download the library from https://github.com/msparks/arduino-ds1302

DS1302 Datasheet: http://datasheets.maximintegrated.com/en/ds/DS1302.pdf

 

In the next Post I will modify this to make Alarm clock using LCD display.

How to Install Linux Bash shell on Windows 10

Latest windows update allows you to have a full Ubuntu-based Bash shell. This allows you to run the Bash shell and the exact same binaries that you would normally run on Ubuntu Linux.

To get started with bash make sure you are using correct version of Windows.

We would need Windows 10 creators update and a 64 bit version of the Windows 10.

Install Linux bash shell

To install Linix bash shell on windows follow the following steps.

Step 1 – Activate the developer mode

Update & Security > For Developers. Activate the “Developer Mode” as shown below:

enable developer mode

Step2: Enable the Windows Subsystem for Linux (Beta)

Next, open the Control Panel, click “Programs,” and click “Turn Windows Features on or Off” under Programs and Features. Enable the “Windows Subsystem for Linux (Beta)” option in the list here and click “OK.” After this it will ask you to reboot.

Step 3:

After your computer restarts, open windows command prompt and type bash as shown below. The first time you run the bash.exe file, it will prompt to accept the terms of service. The command will then download the “Bash on Ubuntu on Windows” application from the Windows Store. It will ask you to create a user account and password for use in the Bash environment.

What can you do with bash shell on windows?

  • You would be able to use standard Linux SSH utility and discard third party tool like putty.
  • You will be able to edit text with VIM from the command line, and manipulate text using Sed and Awk.
  • You can also, apt-get to manage their packages, and to install tens of thousands of Ubuntu binaries.
  • Basically its good utility for developer/administrators. These may not be very useful to general users. But if you are interested in learning Linux you can start it from here without going into the complexity to install LINUX.

Seven segment display counter

A seven segment display is typically used to display numbers from 0-9. It consists of 7 bar segments and a dot( 8 Segments). They are numbered A to F and DP for the dot or decimal place. There are 2 types of 7 Segment display

  • Common anode
  • Common cathode

 

Seven Segments are labelled as below.

For more detail on 7 segment display refer my blog post on it here.

To display number we need to turn on the correct segments as shown below:

0- ABCDEF
1- BC
2- ABGED
3- ABCDG
4- BCFG
5- ACDFG
6- ACDEFG
7- ABC
8- ABCDEFG
9- ABCFG

List of Parts needed

  1. Common cathode seven segment LED display
  2. 470 Ohm resistors – 7 nos
  3. Arduino UNO

Schematic diagram:

Seven Segment counter

 

Below is the code for the one digit counter

//Pins for seven segment
int sega = 1;
int segb = 2;
int segc = 3;
int segd = 4;
int sege = 5;
int segf = 6;
int segg = 7;
int dispa = 8;
int dispb = 9;

void setup() {
 // Setup code to run once
   pinMode(sega,OUTPUT);
   pinMode(segb,OUTPUT);
   pinMode(segc,OUTPUT);
   pinMode(segd,OUTPUT);
   pinMode(sege,OUTPUT);
   pinMode(segf,OUTPUT);
   pinMode(segg,OUTPUT);
   pinMode(dispa,OUTPUT);
   pinMode(dispb,OUTPUT);
}

void loop() {
 // put your main code here, to run repeatedly:
  for(int count=0;count<10;count++)
  {
    digitalWrite(sega,LOW);
    digitalWrite(segb,LOW);
    digitalWrite(segc,LOW);
    digitalWrite(segd,LOW);
    digitalWrite(sege,LOW);
    digitalWrite(segf,LOW);
    digitalWrite(segg,LOW);
    if(count==0){
     digitalWrite(sega,HIGH);
     digitalWrite(segb,HIGH);
     digitalWrite(segc,HIGH);
     digitalWrite(segd,HIGH);
     digitalWrite(sege,HIGH);
     digitalWrite(segf,HIGH);
  }
  if(count==1){
    digitalWrite(segb,HIGH);
    digitalWrite(segc,HIGH);
  }
  if(count==2){
    digitalWrite(sega,HIGH);
    digitalWrite(segb,HIGH);
    digitalWrite(segg,HIGH);
    digitalWrite(sege,HIGH);
    digitalWrite(segd,HIGH);
  }
  if(count==3){
    digitalWrite(sega,HIGH);
    digitalWrite(segb,HIGH);
    digitalWrite(segc,HIGH);
    digitalWrite(segd,HIGH);
    digitalWrite(segg,HIGH);
  }
  if(count==4){
    digitalWrite(segb,HIGH);
    digitalWrite(segc,HIGH);
    digitalWrite(segf,HIGH);
    digitalWrite(segg,HIGH);
  }
  if(count==5){
    digitalWrite(sega,HIGH);
    digitalWrite(segc,HIGH);
    digitalWrite(segd,HIGH);
    digitalWrite(segf,HIGH);
    digitalWrite(segg,HIGH);
  }
  if(count==6){
    digitalWrite(sega,HIGH);
    digitalWrite(segc,HIGH);
    digitalWrite(segd,HIGH);
    digitalWrite(sege,HIGH);
    digitalWrite(segf,HIGH);
    digitalWrite(segg,HIGH);
  }
  if(count==7){
    digitalWrite(sega,HIGH);
    digitalWrite(segb,HIGH);
    digitalWrite(segc,HIGH);
  }
  if(count==8){
    digitalWrite(sega,HIGH);
    digitalWrite(segb,HIGH);
    digitalWrite(segc,HIGH);
    digitalWrite(segd,HIGH);
    digitalWrite(sege,HIGH);
    digitalWrite(segf,HIGH);
    digitalWrite(segg,HIGH);
  }
  if(count==9){
    digitalWrite(sega,HIGH);
    digitalWrite(segb,HIGH);
    digitalWrite(segc,HIGH);
    digitalWrite(segf,HIGH);
    digitalWrite(segg,HIGH);
  } 
  delay(1000);
 }
}

 

Web server on raspberry pi – how to setup?

Introduction

In this post I will let you know how to set up web server on raspberry pi. There are many web servers for raspberry pi. In out example we will be setting up apache web server. Apache is a popular web server application and we will install it on raspberry pi to server web pages

 Step 1 -Install APACHE

First install apache 2 package by using the following command in to the terminal

sudo apt-get install apache2 -y

 Step 2 – Test the Web Server

By default, Apache puts a test HTML file in the web folder. This default web page is served when you browse to http://localhost/ on the Pi itself, or http://192.168.1.9 ( IP address of Pi) from another computer on the network.

Browse to the default web page either on the Pi or from another computer on the network and you should see the following:

default_html_page

This means you have Apache working!

Step 3 – Changing the default Page

This default web page is just a HTML file on the filesystem. It is located at /var/www/index.html.

Navigate to this directory in the Terminal and have a look at what’s inside:

cd /var/www/html

ls -al

This will show you:

step3_htme_page_location

Step 4- Install Php

To allow your Apache server to process PHP files, you’ll need to install PHP5 and the PHP5 module for Apache. Type the following command to install these:

 sudo apt-get install php5 libapache2-mod-php5 -y

Now remove index.html file and add index.php with following content

<?php echo "hello world"; ?>
<?php echo date('Y-m-d H:i:s'); ?>
<?php phpinfo(); ?>

Now open the index.php page. You will get following:

dynamic_php_page

You are now done setting up web server on raspberry pi which can server dynamic pages.

In the next post we will use this web server to post real time data from arduino/raspberry pi and also control different appliances from the web page.

Plus/minus supply using LMC7660

LM 7660 is a CMOS voltage convertor capable of converting a positive voltage in the range of +1.5 v – 10 v to the corresponding negative voltage of -1.5v to -10v using very few external components. Below is the schematic diagram for the same.

We can use this get +/-5v from different sources like from 9v battery. Adding LM7805 converter to a 9v battery or 9v power supply will reduce it to 5v as shown below.

Components

  • IC1 – LMC7660
  • IC2 – LM7805
  • C1,C2 – 10μF 16V
  • C3 – 470 μF 25V
  • C4 – 2.2μF 16V
  • Battery – 9v

 

Bicycle USB Charger

This circuit has been developed to add a USB charging port to a bicycle for charging a mobile phone. The input supply for the circuit is produced by a dynamo (6V, 3W dynamo) in the bicycle.

The circuit is based on LM2596-5.0. It is a 3A step down voltage regulator. LM 2596 are available in fixed output voltage of 3.3, 5, 12v and an adjustable output version. The LM2596 series operates at a switching frequency of 150 kHz, thus allowing smaller-sized filter components than what would be needed with traditional lower-frequency switching regulators. The IC provides all active functions for a step-down (buck) switching regulator, capable of driving a 3A load with excellent line and load regulation.

Circuit & Part list

  • C1        1000uf
  • C2        470 uf
  • D1-D2        1N5818
  • D5        1N5818
  • J        Dynamo 6v 3W
  • L        33 u
  • LED
  • R          1k
  • SW        1 on/off switch
  • IC        LM2596
  • USB-A Connector

How it Works?

The alternating voltage generated by the dynamo is converted to DC by a full-wave bridge rectifier comprising Schottky barrier rectifier diodes D1 through D4 and a filtering electrolytic capacitor (C1). The output of the bridge rectifier, which is charged to peak value of AC voltage (nearly 10V), is input to switching regulator LM2596-5.0 to provide a regulated 5V (DC) output, which is suitable for charging mobile devices using the USB connector.

The 5mm LED (LED1) in the circuit indicates output status. Feedback connection FB (pin 4 on IC1) is connected directly to output voltage at electrolytic capacitor C2. The 33μH inductor (L1) should be rated for a DC current of at least 1A. The dynamo output is connected to the circuit by switch S1.

Light Sensor using Arduino

Introduction

In this project, a simple light sensor is designed using LDR. The project is built around Arduino.

Components required

  • Arduino UNO
  • Light Dependent Resistor (LDR)
  • 100 KΩ POT
  • Buzzer

Circuit Diagram

Working

A 100 KΩ POT and the LDR form a voltage divider and the output of the voltage divider is given to the analog input A0 of Arduino. A buzzer is connected to pin 11 of Arduino.

When the LDR detects a light over certain intensity, the Arduino will trigger the buzzer. When the intensity of light decreases, the buzzer is turned off.

The 100 KΩ POT used in the voltage divider network can be used to adjust the intensity levels at which the buzzer is triggered.

Code

int sensorPin = A0; // select the input pin for the potentiometer
int sensorValue = 0; // variable to store the value coming from the sensor
void setup() {
// declare the ledPin as an OUTPUT:
Serial.begin(9600);
pinMode(11,OUTPUT);
}
void loop()
{
sensorValue=analogRead(sensorPin);
if(sensorValue <= 14)
digitalWrite(11,HIGH);
else
digitalWrite(11,LOW);
Serial.println(sensorValue);
delay(2);
}

This circuit is similar to dark sensor circuit using BC547 transistor.

What is Omega 2 Board?

Omega 2 board is the development boards from Onion. It comes packed with built-in Wi-Fi and on-board flash storage. You do not have to worry about buying Wi-Fi dongles or installing operating system images onto external SD cards.

Using the Omega2 is just like using a desktop computer. It has built simple and intuitive apps  to interact with the Omega2. It also have an App Store where you can discover even more apps. The Omega2 runs the Linux Embedded Development Environment (LEDE) operating system, a distribution based on OpenWRT.  You can think of the Omega2 as a tiny Linux server with Wi-Fi.

The Omega2 can be easily added to your existing Arduino projects. Another important benefit of running Linux is that the Omega2 can be programmed with whatever language you want.

Omega 2 Specs

Memory64MB Memory
Storage16MB Storage
USBUSB 2.0
MicroSD Slot
No
WiFi adapterb/g/n Wi-Fi
GPIOs15
PWM2
UART2
I2C1
SPI1
I2S1

Pin out

Omega2 Accessories

 

Expansion Docs

The Expansion Dock powers the Omega2, it breaks out all of the GPIOs, and allows you to expand your Omega2 with expansion modules. It has a USB-to-serial chip on-board, allowing you to access the Omega2 easily through the serial terminal.

Mini Dock

The Mini Dock provides power to the Omega2, and it allows you to plug in USB devices

 Power Dock

Arduino Dock