Dual rocket altimeter using the ATmega 328 microcontroller. The AltiDuo

Similar documents
3 pyro output datalogger altimeter with an ATmega 328 microcontroller Kit assembly instructions

ATTiny84/85 AVR adapter kit building and usage instructions

Lesson 8: Digital Input, If Else

Bosch BMP085 Breakout Board

R-DAS Tiny User s Manual

keyestudio Keyestudio MEGA 2560 R3 Board

Building your own special-purpose embedded system gadget.

Metro Minimalist Clock

<Table of content> <Parts and description> <Circuit board Guide> <Pins> <Basics of Coding> <Intro to Arduino> <Intro> <Downloading Arduino IDO>

Sanguino TSB. Introduction: Features:

Adafruit Metro Mini. Created by lady ada. Last updated on :12:28 PM UTC

1/Build a Mintronics: MintDuino

ZX Distance and Gesture Sensor SMD Hookup Guide

Smart Objects. SAPIENZA Università di Roma, M.Sc. in Product Design Fabio Patrizi

ARDUINO MINI 05 Code: A000087

Installing the Bear Altimeter Console Android application.

Building and using JasperMIDI

Note. The above image and many others are courtesy of - this is a wonderful resource for designing circuits.

Adafruit BMP280 Barometric Pressure + Temperature Sensor Breakout

Lab 01 Arduino 程式設計實驗. Essential Arduino Programming and Digital Signal Process

This is the Arduino Uno: This is the Arduino motor shield: Digital pins (0-13) Ground Rail

Bluno M0 Mainboard SKU: DFR0416

USB-to-I2C Basic. Hardware User s Manual.

ADC to I 2 C. Data Sheet. 10 Channel Analog to Digital Converter. with output via I 2 C

Arduino Uno. Arduino Uno R3 Front. Arduino Uno R2 Front

Lab-3: LCDs Serial Communication Analog Inputs Temperature Measurement System

Goal: We want to build an autonomous vehicle (robot)

Create your own wireless motion sensor with

GRAVITECH GROUP

Introducting Itsy Bitsy 32u4

User Manual Version 1.1

AK-DS2482S-100. Reference manual. Copyright 2016 Artekit Italy All rights reserved

Grove - Multichannel Gas Sensor

Adafruit CAP1188 Breakout

XNUCLEO-F030R8, Improved STM32 NUCLEO Board

Display Real Time Clock (RTC) On LCD. Version 1.2. Aug Cytron Technologies Sdn. Bhd.

ARDUINO LEONARDO WITH HEADERS Code: A000057

IDUINO for maker s life. User Manual. For IDUINO development Board.

RFID: Read and Display V2010. Version 1.1. Sept Cytron Technologies Sdn. Bhd.

IDUINO for maker s life. User Manual. For IDUINO Mega2560 Board(ST1026)

Alessandra de Vitis. Arduino

TA0139 USER MANUAL ARDUINO 2 WHEEL DRIVE WIRELESS BLUETOOTH ROBOT KIT

Grove - Mini I2C Motor Driver v1.0

How to Use an Arduino

Arduino Prof. Dr. Magdy M. Abdelhameed

Introduction to Arduino. Wilson Wingston Sharon

Arduino IDE Geiger Counter

RKP08 Component List and Instructions

Module 3B: Arduino as Power Supply

AXE Stack 18. BASIC-Programmable Microcontroller Kit. An inexpensive introduction to microcontroller technology for all ability levels

Digital Pins and Constants

Serial.begin ( ); Serial.println( ); analogread ( ); map ( );

Exen Mini. Setup Guide - V1. nerdonic.com

ARRL ETP Solder Hour Clock Kit Construction Manual

Prototyping & Engineering Electronics Kits Basic Kit Guide

ESPino - Specifications

ARDUINO MEGA ADK REV3 Code: A000069

GE-INTERNATIONAL JOURNAL OF ENGINEERING RESEARCH VOLUME -3, ISSUE -5 (May 2015) IF ISSN: ( )

EasyAVR6 Development System

Using the BMP085/180 with Raspberry Pi or Beaglebone Black

ARDUINO LEONARDO ETH Code: A000022

Adafruit DS3231 Precision RTC Breakout

Arduino ADK Rev.3 Board A000069

solutions for teaching and learning

AUDIO AMPLIFIER PROJECT

ARDUINO MICRO WITHOUT HEADERS Code: A000093

CORTESIA ELECTRONICCA

Arduino Uno. Power & Interface. Arduino Part 1. Introductory Medical Device Prototyping. Digital I/O Pins. Reset Button. USB Interface.

Prototyping Module Datasheet

ARDUINO UNO REV3 Code: A000066

AlphaBot2 robot building kit for Arduino

Earthshine Design Arduino Starters Kit Manual - A Complete Beginners Guide to the Arduino. Project 15. Shift Register 8-Bit Binary Counter

ARDUINO UNO REV3 SMD Code: A The board everybody gets started with, based on the ATmega328 (SMD).

AXE033 SERIAL/I2C LCD & CLOCK

AT42QT101X Capacitive Touch Breakout Hookup Guide

Sten-SLATE ESP Kit. Description and Programming

Getting Started with STK200 Dragon

AVR Intermediate Development Board. Product Manual. Contents. 1) Overview 2) Features 3) Using the board 4) Troubleshooting and getting help

StenBOT Robot Kit. Stensat Group LLC, Copyright 2018

The DTMF generator comprises 3 main components.

Sprinkler Controller Assembly Manual

ISL RGB Sensor Tutorial By: Sabrina Jones

Thursday, September 15, electronic components

MAE106 Laboratory Exercises Lab # 1 - Laboratory tools

IME-100 Interdisciplinary Design and Manufacturing

MINITRONICS v1.0 DATASHEET

Omega MP. Multi-Programming Shield for Atmel Microcontrollers. User Manual

Shack Clock kit. U3S Rev 2 PCB 1. Introduction

ITG-3200 Hookup Guide

Arduino 101 AN INTRODUCTION TO ARDUINO BY WOMEN IN ENGINEERING FT T I NA A ND AW E S O ME ME NTO R S

DREAM 2 WIRED RTU SYSTEM GUIDE

IOX-16 User s Manual. Version 1.00 April Overview

Freescale Semiconductor, I

IME-100 ECE. Lab 3. Electrical and Computer Engineering Department Kettering University. G. Tewolde, IME100-ECE,

Evaluation Board User Guide UG-047

I2C interface Tutorial

You need the following components to assemble the Black n Wood Nixie Clock circuit board:

Adafruit INA219 Current Sensor Breakout

Pridgen Vermeer Robotics ATmega128 Revision 0

R-DAS User Manual. Rocket Data Acquisition System R-DAS hardware V2.x V3.x Firmware V3.1 User Manual V1.5 / 16 June, 2001

Transcription:

Dual rocket altimeter using the ATmega 328 microcontroller The AltiDuo Version date Author Comments 1.0 29/12/2012 Boris du Reau Initial Version Boris.dureau@neuf.fr 1.1 17/02/2013 Boris du Reau Updated schema 1.2 03/04/2013 Boris du Reau Updated info regarding the jumpers for presetting the altitude Type of rocket Micro-max Model Mid power High power rocket no yes yes yes Category Construction Technic Ground Support Electronic Other X X 03/04/2013 Copyright Boris du Reau 2012-2013 page 1

Contents Goal... 3 Why build your own altimeter?... 3 How does the altimeter works?... 3 Altimeter specifications... 3 Electronic Schema:... 5 Board and components implementation... 6 Components List:... 6 The board... 7 Pressure sensor:... 7 Presetting the main deployment altitude... 8 Connecting to the USB port:... 8 The PL2303HX model... 9 The CP2102 model... 9 Altimeter programming:... 9 Development Environment:... 10 Functional diagram:... 13 Altimeter code:... 14 03/04/2013 Copyright Boris du Reau 2012-2013 page 2

Goal The primary goal of the following document is to describe the build, the programming and the use of a low cost dual ejection altimeter based on the ATmega 328 microcontroller well known from the Arduino board users. The final goal is to be able to offer an altimeter kit for a reasonable price (less than 20 Euros) that is programmable by the user. This document assumes that you have used and you are familiar with a dual recovery altimeter in a rocket. Why build your own altimeter? - Most of the altimeters are coming from the US, even if sometime their price is more than reasonable, the shipping cost can be more expensive than the altimeter itself. - For the pleasure of doing it yourself. - To do exactly what you need - So that you are able to modify your program and to have full control of your electronic. Before your start Remember that it is a kit and that you can modify the program and behaviour of your altimeter. The country where you live might not even allow the use of such device. You have to assume total legal responsibility for any damages or claims including personal injury that results from the use of this device. I shall not be responsible for the above. If you disagree with that, please do not build it or use it. How does the altimeter works? A pressure sensor measure the ground altitude to define a reference, then detect the lift off, and when the apogee is reached an ejection charge is fired to extract the drogue and a second charge is fired at a predefined altitude (usually 100 meter) before landing to deploy the main parachute. The altimeter does a continuity test of the charges to make sure that they are good. Apogee and main altitude are beeped after the main has been fired. Altimeter specifications Dimensions: 90x32mm Weight: approximately 30 grams Power supply: from 6 to 10Volts 2 high power transistors pyro outputs Separate Continuity test for each output. Output on 2 pin terminal blocs 03/04/2013 Copyright Boris du Reau 2012-2013 page 3

Diode protection against reverse polarity. Programable using the USB port and the C/C++ language with the Arduino development environment. Apogee detection 4 preset altitude selectable for the main using jumpers According the pressure sensor (ie: the BMP085) datasheet, it should be able to measure up to 9000m. You can find the datasheet here http://www.daedalus.ei.tum.de/attachments/article/60/bst-bmp085-ds000-05%20drucksensor.pdf 03/04/2013 Copyright Boris du Reau 2012-2013 page 4

Electronic Schema: 03/04/2013 Copyright Boris du Reau 2012-2013 page 5

Board and components implementation: ATmega 328 dual altimeter AltiDuo Components List: R1,R2 100Kohm to 150Kohm R3,R4,R5 10Kohm to 15kohm R6,R7 100Kohm to 150Kohm C1, C2 20 or 22pf C3 47µf (vertical) T1, T2 Transistor (IRF540 or IRFZ44) Reg1 7805 (TO220) B1,B2,B3 2 pins Terminal block pitch 5,08 Q1 16Mhz cristal Buzz1 5 volts active buzzer Atmega 328 + 28 pins socket + IC1 Arduino bootloader D1 1N4001 to 1N4007 Sensor BMP085 Note that for the resistors when for R1, R2, R6, R7: you can choose a value between 100 and 150K, but all resistors must be identical. Same goes for the other resistors. For the diode it can be anything from 1N4001 to 7; the diode will reduce the output current; note that if you do not care about protecting the altimeter it can be replaced by a wire. 03/04/2013 Copyright Boris du Reau 2012-2013 page 6

The board The smallest board that I have made has the following dimension 30x90 mm Pressure sensor: The pressure sensor used is a BMP085. It has been soldered on a small board. Caution several model exists you need to choose a board that can be powered with 5V. The model that I have chosen after trying several one is the GY-65 : Those mini board pin layout are not identical between brands, you will have to adapt the board if you use a different one. Be careful not to use a 3V3 board that will not work with 5V (it will be damaged). Do not use the following one 03/04/2013 Copyright Boris du Reau 2012-2013 page 7

Presetting the main deployment altitude The main deployment altitude can be preset using a couple of jumpers. With version 1.0 and 1.1 of the program you can choose from 4 different altitudes. They are 50, 100, 150 or 200 meters. Here is a table with all possible options: 50m 100m 150m 200m Connecting to the USB port: It is possible to use several type of board but the order of the pins being different from one model to the other you will need to choose a model with a cable so that you can connect it to the altimeter board (crossing wires if needed). If possible choose one protected by some shrink tube. If this is not the case you will need to put some, it is mandatory because you will need to touch the card with your finger whenever you plug it to your USB port. Cable I have used the following models 03/04/2013 Copyright Boris du Reau 2012-2013 page 8

The PL2303HX model ATmega 328 dual altimeter AltiDuo The CP2102 model Altimeter programming: The USB adapter will be connected to your altimeter cable using a cable. Make sure that you cable it properly because the connections are not protected also, unplug the battery when you plug it to the PC or unplug the 5V power supply of the board. Note that the continuity test does not work properly when the battery is unplugged. 03/04/2013 Copyright Boris du Reau 2012-2013 page 9

Development Environment: In order to be able to upload the software on the altimeter you need to go to the Arduino web site. http://www.arduino.cc/ Then you need to download the software http://arduino.cc/en/main/software Install the development environment and launch the application by clicking the icon below 03/04/2013 Copyright Boris du Reau 2012-2013 page 10

Open the code 03/04/2013 Copyright Boris du Reau 2012-2013 page 11

After connecting the board using the USB adapter you need to select the correct serial port. Then click on the horizontal arrow to upload the software. If the serial adapter used is a PL2303HX then you will need to press the card reset push button during 3 seconds before uploading the program. If you have chosen the CP2102 model the additional pin allow to do a reset of the card before loading the program. 03/04/2013 Copyright Boris du Reau 2012-2013 page 12

Functional diagram: ATmega 328 dual altimeter AltiDuo Start Save ground altitude Main has continuity Yes No Short beep Long beep Apogee has continuity? yes no Short beep Long beep Measure altitude Do we have no lift off? yes Measure altitude no Apogee detected? yes Fire drog charge During 2 second Measure altitude no Main altitude detected? yes Fire main charge During 2 second Beep apogee altitude Wait for 5 second 03/04/2013 Copyright Boris du Reau 2012-2013 page 13

Altimeter code: /* Model Rocket dual altimeter Ver 1.0 Copyright Boris du Reau 2012-2013 This is using a BMP085 presure sensor and an Atmega 328 The following should fire the main at apogee if it is at least 50m above ground of the launch site and fire the main 100m before landing The Arduino board that I am using to load the program is an Arduino UNO ATmega328P For the BMP085 pressure sensor Connect VCC of the BMP085 sensor to 5.0V make sure that you are using the 5V sensor (GY-65 model) Connect GND to Ground Connect SCL to i2c clock - on 328 Arduino Uno/Duemilanove/etc thats Analog 5 Connect SDA to i2c data - on 328 Arduino Uno/Duemilanove/etc thats Analog 4 EOC is not used, it signifies an end of conversion XCLR is a reset pin, also not used here The micro swiches are connected on pin D6 and D7 The main is connected to pin D8 The apogee is connected to pin D9 The main continuity test is connected to pin D10 The apogee continuity test is connected to pin D11 The speaker/buzzer is connected to pin D12 */ #include <Wire.h> #include <Adafruit_BMP085.h> #define DEBUG //=true Adafruit_BMP085 bmp; //ground level altitude long initialaltitude; //current altitude long curraltitude; //Apogee altitude long apogeealtitude; long mainaltitude; long liftoffaltitude; long lastaltitude; //Our drogue has been ejected i.e: apogee has been detected boolean apogeehasfired =false; boolean mainhasfired=false; //nbr of measures to do so that we are sure that apogee has been reached unsigned long measures; unsigned long maindeployaltitude; const int pinaltitude1 = 8; const int pinaltitude2 = 7; const int pinapogee = 9; const int pinmain = 13; const int pinapogeecontinuity = 10; const int pinmaincontinuity = 11; const int pinspeaker = 12; const int pinled = 13; int nbrlongbeep=0; int nbrshortbeep=0; 03/04/2013 Copyright Boris du Reau 2012-2013 page 14

boolean NoBeep=false; void setup() int val = 0; int val1 = 0; // variable to store the read value // variable to store the read value // initialize the serial communication for debuging Serial.begin(9600); Wire.begin(); //Presure Sensor Initialisation bmp.begin(); //our drogue has not been fired apogeehasfired=false; mainhasfired=false; //let's read the lauch site altitude initialaltitude = bmp.readaltitude(); lastaltitude = 0; //bmp.readaltitude(); //Initialize apogee to ground altitude + 20 meters liftoffaltitude = lastaltitude + 20; //number of measures to do to detect Apogee measures = 10; //initialise the deployement altitude for the main maindeployaltitude = 100; //Initialise the output pin pinmode(pinapogee, OUTPUT); pinmode(pinmain, OUTPUT); pinmode(pinspeaker, OUTPUT); pinmode(pinled, OUTPUT); pinmode(pinaltitude1, INPUT); pinmode(pinaltitude2, INPUT); val = digitalread(pinaltitude1); val1 = digitalread(pinaltitude2); if(val == 0 && val1 ==0) maindeployaltitude = 50; if(val == 0 && val1 ==1) maindeployaltitude = 100; if(val == 1 && val1 ==0) maindeployaltitude = 150; if(val == 1 && val1 ==1) maindeployaltitude = 200; pinmode(pinapogeecontinuity, INPUT); pinmode(pinmaincontinuity, INPUT); //Make sure that the output are turned off digitalwrite(pinapogee, LOW); digitalwrite(pinmain, LOW); digitalwrite(pinspeaker, LOW); digitalwrite(pinled, LOW); void loop() //read current altitude curraltitude = (bmp.readaltitude()- initialaltitude); if (( curraltitude > liftoffaltitude)!= true) 03/04/2013 Copyright Boris du Reau 2012-2013 page 15

continuitycheck(pinapogeecontinuity); continuitycheck(pinmaincontinuity); //detect apogee if(curraltitude > liftoffaltitude) if (curraltitude < lastaltitude) measures = measures - 1; if (measures == 0) //fire drogue digitalwrite(pinapogee, HIGH); delay (2000); apogeehasfired=true; digitalwrite(pinapogee, LOW); apogeealtitude = curraltitude; else lastaltitude = curraltitude; ATmega 328 dual altimeter AltiDuo if ((curraltitude < maindeployaltitude) && apogeehasfired == true && mainhasfired==false) // Deploy main chute 100m before landing... digitalwrite(pinmain, HIGH); delay(2000); mainhasfired=true; mainaltitude= curraltitude; digitalwrite(pinmain, LOW); if(apogeehasfired == true && mainhasfired==true) beginbeepseq(); //#ifdef DEBUG Serial.println("Initial Altitude:"); Serial.println( initialaltitude); Serial.println("Apogee Altitude:"); Serial.println( apogeealtitude); beepaltitude(apogeealtitude); //#endif beginbeepseq(); //#ifdef DEBUG Serial.println("Main Altitude:"); Serial.println(mainAltitude); beepaltitude(mainaltitude); //#endif void continuitycheck(int pin) int val = 0; // variable to store the read value // read the input pin to check the continuity if apogee has not fired if (apogeehasfired == false ) val = digitalread(pin); if (val == 0) //no continuity long beep 03/04/2013 Copyright Boris du Reau 2012-2013 page 16

longbeep(); else //continuity short beep shortbeep(); ATmega 328 dual altimeter AltiDuo void beepaltitude(long altitude) int i; // this is the last thing that I need to write, some code to beep the altitude //altitude is in meters //find how many digits if(altitude > 99) // 1 long beep per hundred meter nbrlongbeep= int(altitude /100); //then calculate the number of short beep nbrshortbeep = (altitude - (nbrlongbeep * 100)) / 10; else nbrlongbeep = 0; nbrshortbeep = (altitude/10); Serial.println("long beep:"); Serial.println( nbrlongbeep); if (nbrlongbeep > 0) for (i = 1; i < nbrlongbeep +1 ; i++) longbeep(); delay(50); Serial.println("Short beep:" ); Serial.println(nbrShortBeep); if (nbrshortbeep > 0) for (i = 1; i < nbrshortbeep +1 ; i++) shortbeep(); delay(50); delay(5000); void beginbeepseq() int i=0; if (NoBeep == false) for (i=0; i<10;i++) tone(pinspeaker, 1600,1000); delay(50); notone(pinspeaker); delay(1000); void longbeep() if (NoBeep == false) 03/04/2013 Copyright Boris du Reau 2012-2013 page 17

tone(pinspeaker, 600,1000); delay(1500); notone(pinspeaker); void shortbeep() if (NoBeep == false) tone(pinspeaker, 600,25); delay(300); notone(pinspeaker); ATmega 328 dual altimeter AltiDuo 03/04/2013 Copyright Boris du Reau 2012-2013 page 18