teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

写真追加

2017/08/10 07:52

投稿

takuma.sakamoto
takuma.sakamoto

スコア20

title CHANGED
File without changes
body CHANGED
@@ -230,6 +230,8 @@
230
230
 
231
231
  ```
232
232
  ###補足情報
233
+
234
+ ![イメージ説明](49ca16b29051b3843987eac293be7d1d.jpeg)
233
235
  構成:
234
236
  Arduino mega2560
235
237
  3gim・3gシールド

2

問題の明確化

2017/08/10 07:52

投稿

takuma.sakamoto
takuma.sakamoto

スコア20

title CHANGED
@@ -1,1 +1,1 @@
1
- [Arduino]3G回線を使い一定間隔で画像をサーバーアップロードしたい
1
+ JPEG画像にノイズが入る原因
body CHANGED
@@ -1,40 +1,20 @@
1
1
  ###前提・実現したいこと
2
- Arduinoで3G回線を使いカメラで撮影した画像データ[JPG]をSDカードに保存し、
2
+ Arduinoで3G回線を使いカメラで撮影した画像データ[JPG]をSDカードに保存し、一定間隔でサーバーにアップロードする監視カメラを作っています。データをバイナリから文字変換し、サーバーにpostする時にノイズが入ってしまいます。
3
- 一定間隔でサーバーにアップロードするシステムを作っています。
4
- データをバイナリから文字変換し、サーバーにpostする時に
5
- 以下ような問題が発生し、原因が分からず困っています。
3
+ 状態では監視カメラとして問題があるので、ノイズ発生原因、また解決方法などご教授頂ければと思います。
6
4
 
7
5
 
8
- ###発生している問題・エラーメッセージ
9
6
 
10
- ```
11
- ![・画像にノイズが入ったり欠落を起こす](6ed9ea76ad6ca58e1f78dfb089bb5e9d.jpeg)
12
7
 
13
- ・1ループ目は正常にデータをpostできるが、2ループ目から正常にpostできなくなり、
14
- データが壊れてしまう
15
8
 
16
- 1ルプ目で以下のSerial.printlnが表示されない
9
+ ###発生している問題エラメッセージ
17
10
 
18
- //画像サイズ選択(640x480, 320x240 or 160x120)
19
- //cam.setImageSize(VC0706_640x480); // biggest
20
- //cam.setImageSize(VC0706_320x240); // medium
21
- cam.setImageSize(VC0706_160x120); // small
22
11
 
23
- delay(100);
12
+ ![イメージ説明](101b5bdd78d02eb01439c8e29ce3c75a.jpeg)
24
13
 
25
- uint8_t imgsize = cam.getImageSize();
26
- Serial.print("Image size: ");
27
- ///////////この部分/////////////
28
- if (imgsize == VC0706_640x480) Serial.println("640x480");
29
- if (imgsize == VC0706_320x240) Serial.println("320x240");
30
- if (imgsize == VC0706_160x120) Serial.println("160x120");
31
- ```
32
14
 
33
15
  ###全体のソースコード
34
16
  ```ここに言語を入力
35
- /*
17
+
36
- * Arduino UNO + TTL Camera + SD Storage w/SPI Interface
37
- */
38
18
  #include <Adafruit_VC0706.h>
39
19
  #include <SoftwareSerial.h>
40
20
  #include <SD.h>
@@ -44,13 +24,13 @@
44
24
  #define chipSelect 53
45
25
 
46
26
  //送信データ格納
47
- #define BODY_BUFFER 550
27
+ #define BODY_BUFFER 965
48
- char body[BODY_BUFFER];
28
+ char body[BODY_BUFFER]; // バッファ
49
29
  #define IMGEQ "img="
50
30
 
51
31
  // POST send parameter
52
- const char *server = "*******.bitter.jp"; // サーバ名
32
+ const char *server = "******.bitter.jp"; // サーバ名
53
- const char *path = "*******.php"; // PHPファイル
33
+ const char *path = "******.php"; // PHPファイル
54
34
 
55
35
  // 送信書式
56
36
  const char *header = "Content-Type: application/x-www-form-urlencoded";
@@ -58,6 +38,7 @@
58
38
 
59
39
  int IS=strlen(IMGEQ);
60
40
  char res[100];
41
+ const int powerPin = 0; //ここ重要 3gim power pinIf not using power control, 0 is set.
61
42
 
62
43
  // CAMERA TX => 69
63
44
  // CAMERA RX => 3
@@ -68,19 +49,21 @@
68
49
  char fname[13];
69
50
 
70
51
  void setup(){
71
- Serial.begin(9600);
52
+ Serial.begin(9600);//シリアル通信設定
72
53
 
73
54
  Serial.println("//monitoring program start//");
55
+
74
-
56
+ //SD初期化
75
- pinMode(SS,OUTPUT); delay(10);
57
+ pinMode(chipSelect,OUTPUT); delay(10);
76
58
  //SD.begin();
77
- if(!SD.begin()){
59
+ if(!SD.begin(chipSelect)){
78
60
  Serial.println("SD card initialization failed!");
79
61
  while(1){
80
62
  ;
81
63
  }
82
64
  }
65
+
83
-
66
+ //カメラ初期化
84
67
  if( cam.begin() ){
85
68
  camera_found = true;
86
69
  Serial.println("Camera Found");
@@ -91,16 +74,17 @@
91
74
  }
92
75
  }
93
76
 
77
+ //メイン処理
94
78
  void loop() {
95
79
 
80
+ //a3gs.setLED(true);
81
+
96
82
  //画像サイズ選択(640x480, 320x240 or 160x120)
97
83
  //cam.setImageSize(VC0706_640x480); // biggest
84
+ cam.setImageSize(VC0706_320x240); // medium
98
- //cam.setImageSize(VC0706_320x240); // medium
85
+ //cam.setImageSize(VC0706_160x120); // small
99
- cam.setImageSize(VC0706_160x120); // small
86
+
100
-
101
- delay(100);
102
-
103
- uint8_t imgsize = cam.getImageSize();
87
+ uint8_t imgsize = cam.getImageSize();
104
88
  Serial.print("Image size: ");
105
89
  if (imgsize == VC0706_640x480) Serial.println("640x480");
106
90
  if (imgsize == VC0706_320x240) Serial.println("320x240");
@@ -108,21 +92,20 @@
108
92
 
109
93
  Serial.println("Snap in 3 secs...");
110
94
  delay(3000);
111
-
95
+
112
- //撮影
96
+ //撮影処理部分
113
97
  if( cam.takePicture() ){
114
98
  set_filename();
115
99
  Serial.println("Picture taken!");
116
- File fp = SD.open( fname, FILE_WRITE | O_TRUNC );
100
+ File fp = SD.open( fname, FILE_WRITE | O_TRUNC );
117
-
118
- //データ容量
101
+
119
102
  if( fp ){
120
103
  uint16_t leng = cam.frameLength();
121
104
  Serial.print("Storing ");
122
105
  Serial.print(leng, DEC);
123
106
  Serial.print(" byte image.");
107
+
124
108
  pinMode(8, OUTPUT);
125
-
126
109
  byte wCount = 0; // For counting # of writes
127
110
 
128
111
  while (leng > 0) {
@@ -152,32 +135,36 @@
152
135
  }
153
136
  Serial.println("connected!");
154
137
 
155
- //------------ SDメモリー読込み3GS書出し --------------
138
+ //------------ SDメモリー読込み3GSA書出し --------------
156
139
  File fp = SD.open( fname ,FILE_READ );
157
140
  int len = sizeof(res);
158
141
  int i=strlen(IMGEQ);
159
142
  sprintf(body,"%s",IMGEQ);//POST引き渡し変数名設定
160
143
  uint8_t b;
161
- delay(3000);
144
+ //delay(3000);
162
145
 
163
146
  Serial.print("\nhttpPOST..");
164
147
 
148
+ delay(50);
149
+
165
150
  while(fp.available()) {//------------読み取り可能なbyteがある場合入る --------------
166
151
  b = fp.read();
167
152
  body[i++] = b/16 + (b/16>9?'A'-10:'0'); // バイナリ―から文字変換(上位)
168
153
  body[i++] = b%16 + (b%16>9?'A'-10:'0'); // バイナリ―から文字変換(下位)
169
154
 
155
+ delay(50);
156
+
170
157
  if( i>=BODY_BUFFER ) {
171
158
  if(a3gs.httpPOST(server,port,path,header,body,res,&len,false)!=0){
172
- // Serial.println("httpPOST error1...");
159
+ //Serial.println("httpPOST error1...");
173
- delay(100);
160
+ delay(200);
174
161
  }else{
175
162
  Serial.print(".");
176
163
  }
177
164
  i=strlen(IMGEQ);
178
165
  sprintf(body,"%s",IMGEQ); //POST引き渡し変数名設定
179
166
  }
180
- delay(50);
167
+ //delay(50);
181
168
  }
182
169
  fp.close();
183
170
 
@@ -185,9 +172,9 @@
185
172
  body[IS +i] = 0x00 ; // 残りバッファの3GSA書出し
186
173
  if(a3gs.httpPOST(server,port,path,header,body,res,&len,false)!=0){
187
174
  //Serial.println("httpPOST error2...");
188
- delay(100);
175
+ delay(200);
189
176
  }else{
190
- Serial.print(".");
177
+ Serial.print("!");
191
178
  }
192
179
  }
193
180
 
@@ -198,10 +185,7 @@
198
185
  }else {
199
186
  Serial.print(" Completed send '"); Serial.println(fname);
200
187
  }
201
-
202
- cam.reset();
188
+ cam.reset();
203
-
204
- if (SD.exists(fname)) SD.remove(fname);//SDクリア
205
189
 
206
190
  time = millis() - time;
207
191
 
@@ -211,33 +195,40 @@
211
195
  Serial.println("3G Shutdown..");
212
196
  a3gs.end();
213
197
  a3gs.shutdown();
198
+ //a3gs.setLED(false);
199
+
214
200
  Serial.println("----------------------------------");
215
- delay(20000);
201
+ delay(25000);
216
202
  }
217
203
  void set_filename(){
218
204
  sprintf(fname, "IMG%02d.JPG", file_count++);
219
205
 
220
206
  if( file_count > 10){
221
- file_count = 1; // ファイルネーム上書き
207
+ file_count = 1; // Overwrite
208
+ }
222
209
  }
223
210
 
224
211
 
225
212
 
213
+
226
214
  ```
227
215
 
228
- ###試したこ
216
+ ###原因思われる部分
217
+ ```
229
- ・BODY_BUFFER の値を100~1000の間で更しpostました。
218
+ body[i++] = b/16 + (b/16>9?'A'-10:'0'); // バイナリ―から文字換(上位)
230
- 結果はあまり値が小さすぎると1ループ目からファルが壊れてしまい、500~850の間に設定しpostすると壊れたり壊れなったりと安定しませんでした。
219
+ body[i++] = b%16 + (b%16>9?'A'-10:'0'); // バナリ―ら文字変換(下位)
231
220
 
232
- ・resの値を変更してみました。こちらもpostすると壊れたり壊れなかったりで安定しませんでした。
221
+ delay(50);
233
222
 
223
+ if( i>=BODY_BUFFER ) {
234
- ・3Gに接続するタイミングをsetup内からloop内、SDメモリー読込み3GS書出しの直前に変更しました。
224
+ if(a3gs.httpPOST(server,port,path,header,body,res,&len,false)!=0){
225
+ //Serial.println("httpPOST error1...");SDとの通信が上手くできていない?
226
+ delay(200);
227
+ }else{
228
+ Serial.print(".");
229
+ }
235
230
 
236
- ・while(fp.available())内のiの値が加算され続けているのかと思い、デバッグプリントで確認しましたが、問題ありませんでした。
231
+ ```
237
-
238
- ・SD内に複数のデータがあると、postする時に目的のファイルを検知できないのかと思い、1ループ目で写真撮影→SD保存→撮影した写真を消去→2ループ目という流れにしました。
239
-
240
-
241
232
  ###補足情報
242
233
  構成:
243
234
  Arduino mega2560

1

機器構成部TTLシリアルカメラ追加

2017/08/10 07:47

投稿

takuma.sakamoto
takuma.sakamoto

スコア20

title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,7 @@
8
8
  ###発生している問題・エラーメッセージ
9
9
 
10
10
  ```
11
- ![・画像にノイズが入ったり欠落を起こす](0a5eb755096c7424c7bcdd5d6e39c514.jpeg)
11
+ ![・画像にノイズが入ったり欠落を起こす](6ed9ea76ad6ca58e1f78dfb089bb5e9d.jpeg)
12
12
 
13
13
  ・1ループ目は正常にデータをpostできるが、2ループ目から正常にpostできなくなり、
14
14
  データが壊れてしまう
@@ -244,4 +244,5 @@
244
244
  3gim・3gシールド
245
245
  SDカードスロット
246
246
  simカード soracom air
247
- SDカード
247
+ SDカード
248
+ TTLシリアルカメラ